Lab3 바운싱 그래픽/공(파트 II)
2977 단어 6502emulatorspo600mathassembly
Lab3 개요
이 실습은 6502 어셈블리 언어로 산술/수학 코드를 작성하여 보다 복잡한 x86_64 및 AArch64 어셈블리 언어 학습을 준비합니다.
내가 선택한 옵션은 바운싱 그래픽입니다. 화면에 그래픽을 배치하고, 화면 주위에서 물체를 튕기며, 물체가 화면 가장자리 또는 다른 물체와 충돌했을 때 감지하는 등 여러 가지 기술이 필요합니다.
이 단계에서 저는 전체 프로세스에 대해 더 명확해지고 있습니다.
이전 에서는 1단계와 2단계를 주로 다루었습니다.
이제부터는 과정을 단순화하기 위해 먼저 공을 그리고 45도 각도로 공을 튕겨보도록 하겠습니다. 공을 그리려면 너비와 높이 변수를 정의해야 합니다. "hits-edge"기능과 "화살표 키 응답"기능은 나중에 구현될 예정입니다.
이 코드의 주요 아이디어는 공을 움직이게 하는 것입니다.
암호:
define WIDTH 5
define HEIGHT 5
define POINTER $10
define POINTER_H $11
define ROW_COUNT $13
define ROW $14
define COLUMN $15
define PTR_CALCULATE $19
lda #$04
sta ROW
lda #$04
sta COLUMN
;Calculation
cal_init:
lda #$00 ; create a pointer at $10
sta POINTER
lda #$02
sta POINTER_H
lda #$00
sta ROW_COUNT
lda #$00
sta PTR_CALCULATE
cmp ROW
beq column_count ; if row is done, deal with col
bne row_count ; if not fix row
;row count
row_count:
lda PTR_CALCULATE
clc
adc #$20
sta PTR_CALCULATE
lda POINTER_H
adc #$00
sta POINTER_H
inc ROW_COUNT
lda ROW
cmp ROW_COUNT
bne row_count
beq column_count
column_count:
lda PTR_CALCULATE
clc
adc COLUMN
sta PTR_CALCULATE
; store pointer
sta POINTER
; draw graphic
lda #$00
sta ROW_COUNT
ldx #$00
ldy #$00
; draw graph
draw: lda ball,x
sta (POINTER),y
inx
iny
cpy #WIDTH
bne draw
inc ROW_COUNT
lda #HEIGHT
cmp ROW_COUNT
beq draw
lda POINTER
clc
adc #$20
sta POINTER
lda POINTER_H
adc #$00
sta POINTER_H
ldy #$00
beq draw
; move the graph
move: inc ROW
inc COLUMN
; clear the screen before redraw the graph
clear: lda ball
sta POINTER
lda #$02
sta POINTER_H
ldy #$00
tya
clear_loop:
sta (POINTER),y
iny
bne clear_loop
inc POINTER_H
ldx POINTER_H
cpx #$06
bne clear_loop
jsr cal_initialize
; data constant byte (dcb instruction)
ball:
dcb 00,03,03,03,00
dcb 03,03,03,03,03
dcb 03,03,03,03,03
dcb 03,03,03,03,03
dcb 00,03,03,03,00
이 작업에서 가장 흥미로운 부분은 비트맵 화면에서 공을 그리는 방법을 배웠다는 것입니다. 가장 중요한 부분은 행과 열을 사용하여 포인트 위치를 계산하고 캐리 플래그를 통해 페이지 번호를 결정하는 것입니다. 여기서 트릭은 20으로 더하고 페이지 번호는 캐리 플래그로 결정됩니다.
45도 각도를 사용했기 때문에 행과 열에 1을 더해 이동을 단순화했습니다.
이동 기능은 이 단계에서 제대로 작동하지 않습니다. 주로 서브루틴이 제대로 결합되지 않았기 때문입니다.
여기서 학습 목표는 서브루틴을 이해하고 익숙해지는 것입니다.
Reference
이 문제에 관하여(Lab3 바운싱 그래픽/공(파트 II)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/qiwenyu/lab3-bouncing-graphicball-part-ii-2mem텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)