数学研究室アップデート万華鏡
3357 ワード
こんにちは、私の友人、ここで再びあなたに会うためによい.今日、私は数週間前に研究室3を更新するつもりです.残念ながら、私のグループメイトと私は6502アセンブリ言語を使用して卓球ゲームを解決することはできません.我々の問題は、我々は壁にバウンスする方法を確認していないです.そこで、私たちは新しいプロジェクトを始めることにしました.しかし、現在、新しいプロジェクトは万華鏡です.
このプロジェクトでは、矢印キーを押すと画面の4分の1に同じ図形を描画するプロジェクトを作成する必要がありました.これがコードです.
反射
この研究室では、我々は実際に完全に機能するプログラムで動作し、このプログラムは、ユーザーの入力を受信し、図を引き出すために利用可能です.この研究室を終えた後、私はサブルーチンの作業方法を学び、アセンブリ言語の構文と論理を深く理解しました.アセンブリ言語は、頻繁に、そして、明示的にメモリおよびレジスタにアクセスする低レベルのプログラミング言語である.私は、この練習が私が将来容易に6502アセンブリ言語で働くのを助けることを望みます.
このプロジェクトでは、矢印キーを押すと画面の4分の1に同じ図形を描画するプロジェクトを作成する必要がありました.これがコードです.
define POINTER $10 ;ptr: start of row
define POINTER_H $11
define ROW $20 ;current row
define COL $21 ; current column
define DOT $01 ; dot colour location
define CURSOR $05 ; green colour
setup: lda #$0f ; initial ROW,COL
sta ROW
sta COL
LDA #$01
STA DOT
draw: jsr draw_cursor
getkey: lda $ff ; get the keystroke
ldx #$00 ; clear the key buffer
stx $ff
cmp #$30
bmi getkey
cmp #$40
bpl continue
SEC
sbc #$30
tay
lda color_pallete, y
sta DOT
jmp done
continue: cmp #$43
beq clear
cmp #$63
beq clear
cmp #$80
bmi getkey
cmp #$84
bpl getkey
pha
lda DOT
sta (POINTER),y
jsr draw_on_quads
pla
cmp #$80
bne check1
dec ROW
jmp done
check1: cmp #$81 ; right key
bne check2
inc COL ; increment COL
jmp done
check2: cmp #$82 ; down key
bne check3
inc ROW ; increment ROW
jmp done
check3: cmp #$83 ; left key
bne done
dec COL ; decrement COL
clc
bcc done
clear: lda table_low ; clear screen
sta POINTER
lda table_high
sta POINTER_H
ldy #$00
tya
c_loop: sta (POINTER),y
iny
bne c_loop
inc POINTER_H
ldx POINTER_H
cpx #$06
bne c_loop
done: clc
bcc draw
draw_cursor:
lda ROW
and #$0f
sta ROW
lda COL
and #$0f
sta COL
ldy ROW
lda table_low,y
sta POINTER
lda table_high,y
sta POINTER_H
ldy COL
lda #CURSOR
sta (POINTER),y
rts
draw_on_quads:
LDA POINTER
PHA
LDA POINTER_H
PHA
LDA #$10
CLC
SBC COL
CLC
ADC #$10
TAY
LDA DOT
STA (POINTER),y
TYA
PHA
lda #$10
CLC
SBC ROW
CLC
ADC #$10
TAY
lda table_low,y
sta POINTER
lda table_high,y
sta POINTER_H
ldy COL
lda DOT
sta (POINTER),y
PLA
TAY
lda DOT
sta (POINTER),y
PLA
STA POINTER_H
PLA
STA POINTER
RTS
table_high:
dcb $02,$02,$02,$02,$02,$02,$02,$02
dcb $03,$03,$03,$03,$03,$03,$03,$03
dcb $04,$04,$04,$04,$04,$04,$04,$04
dcb $05,$05,$05,$05,$05,$05,$05,$05,
table_low:
dcb $00,$20,$40,$60,$80,$a0,$c0,$e0
dcb $00,$20,$40,$60,$80,$a0,$c0,$e0
dcb $00,$20,$40,$60,$80,$a0,$c0,$e0
dcb $00,$20,$40,$60,$80,$a0,$c0,$e0
color_pallete:
dcb $01,$02,$03,$04,$05,$06,$07,$08,$09,$0a
これは結果のサンプルです.反射
この研究室では、我々は実際に完全に機能するプログラムで動作し、このプログラムは、ユーザーの入力を受信し、図を引き出すために利用可能です.この研究室を終えた後、私はサブルーチンの作業方法を学び、アセンブリ言語の構文と論理を深く理解しました.アセンブリ言語は、頻繁に、そして、明示的にメモリおよびレジスタにアクセスする低レベルのプログラミング言語である.私は、この練習が私が将来容易に6502アセンブリ言語で働くのを助けることを望みます.
Reference
この問題について(数学研究室アップデート万華鏡), 我々は、より多くの情報をここで見つけました https://dev.to/qzhang125/spo600-lab3-math-lab-update-kaleidoscope-5b2iテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol