MC-10でアセンブラやってみる その2

TVボーイとMC-10の大きな違いは割り込みです。MC-10のBASICでは割り込みアドレスが固定されており、しかもビデオメモリと被るため利用できません。

SCI      TOF     OCF     ICF     IRQ1    SWI     NMI
FAD6    FAD6    FAD7    FAD6    FAC5    FAD6    FAD6
4200    4203    4206    4209    420C    420F    4212

TVボーイ($F000-$FFFF)のゲームをMC-10($8000-$8FFF)にリロケートして、割り込み処理が必要な部分はアドレスがずれないように、固有ルーチン($7000-$7FFF)へジャンプさせます。

;
;   File:       frogger10.c10
;

    org $7000
    jmp START

WAIT:
    ldaa    $7F
    jsr WAIT_LOOP
    rts

WAIT_LOOP:
    deca
    nop ;DUMMY
    nop ;DUMMY
    nop ;DUMMY
    nop ;DUMMY
    nop ;DUMMY
    nop ;DUMMY
    bne WAIT_LOOP
    rts

SHOT:
    ldaa    #$80
    coma            ;flip the bits
    staa    $0002       ;store in keystrobe
    ldaa    $BFFF       ;get the key group
    bita    #$08
    beq keySPC
    ldaa    #%11111110  ; check CTRL key
    staa    2
    ldaa    3   
    bita    #%00000010
    beq keyCTRL
    ldaa    #$FF
    rts

INPUT:
    ldaa    #$80
    coma            ;flip the bits
    staa    $0002       ;store in keystrobe
    ldaa    $BFFF       ;get the key group
    bita    #$04
    beq keyW
    ldaa    #$04
    coma            ;flip the bits
    staa    $0002       ;store in keystrobe
    ldaa    $BFFF       ;get the key group
    bita    #$08
    beq keyZ
    ldaa    #$02
    coma            ;flip the bits
    staa    $0002       ;store in keystrobe
    ldaa    $BFFF       ;get the key group
    bita    #$01
    beq keyA
    ldaa    #$08
    coma            ;flip the bits
    staa    $0002       ;store in keystrobe
    ldaa    $BFFF       ;get the key group
    bita    #$04
    beq keyS
    ldaa    #$FF
    rts

keyCTRL:
    ldaa    #$FB
    rts
keySPC:
    ldaa    #$FD
    rts
keyW:
    ldaa    #$FD
    rts
keyZ:
    ldaa    #$FB
    rts
keyA:
    ldaa    #$F7
    rts
keyS:
    ldaa    #$EF
    rts
;
    org $8000
START:
    clra
    staa    $0001
    staa    $0017
    coma
    staa    $0005
;   ldaa    #$7F
    ldaa    #$FF
    staa    $0000

f:id:tanam:20211211073905p:plain