数学研究室アップデート万華鏡

3357 ワード

こんにちは、私の友人、ここで再びあなたに会うためによい.今日、私は数週間前に研究室3を更新するつもりです.残念ながら、私のグループメイトと私は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アセンブリ言語で働くのを助けることを望みます.