Created
January 28, 2022 01:11
-
-
Save djg/395ffd5c0c6b0e8a35cd85cb756b9ea2 to your computer and use it in GitHub Desktop.
Gyruss 8039 ROM
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;;; ---------------------------------------------------------------------------- | |
;;; | |
;;; gyrussk.3a - Gyruss 8039 sound cpu2 rom | |
;;; | |
;;; If you ever wondered how the percussion samples are generated in the arcade | |
;;; version of Gyruss. | |
;;; | |
;;; Builds with SB-Cross Assembler 3. | |
;;; | |
;;; % sbasm audio2.asm | |
;;; | |
;;; Should produce one warning: | |
;;; | |
;;; *** Warning: Target program memory full | |
;;; 873 .NO $1000,$FF | |
;;; | |
;;; I've tried to working around the warning but the instructions at | |
;;; https://www.sbprojects.net/sbasm/8048.php on bank switching don't work to | |
;;; silence it. | |
;;; | |
;;; ---------------------------------------------------------------------------- | |
.CR 8048 | |
.TF audio2.rom,bin | |
.LF audio2.lst | |
.OR $000 | |
_RESET: | |
jmp INIT | |
nop | |
_INTERRUPT: | |
jmp INT_HANDLER | |
nop | |
nop | |
_TIMER: | |
jmp TIMER_HANDLER | |
INIT: | |
;; start timer running | |
strt t | |
;; clear sample | |
mov a,#$00 | |
outl p1,a | |
;; | |
mov a,#$00 | |
outl p2,a | |
mov a,#$80 | |
outl p2,a | |
;; | |
mov r2,#$00 | |
en i | |
;; PLAY_SOUND(r2) - Sound to play is passed in r2 | |
PLAY_SOUND_R2: | |
mov a,r2 | |
jmp PLAY_SOUND | |
HALT: | |
nop | |
jmp HALT | |
INT_HANDLER: | |
movx a,@r0 | |
mov r2,a | |
;; | |
mov a,#$00 | |
outl p2,a | |
mov a,#$80 | |
outl p2,a | |
;; | |
STACK_0 = $8 | |
mov r0,#STACK_0 | |
mov a,#PLAY_SOUND_R2 | |
mov @r0,a | |
mov r0,#STACK_0+1 | |
mov a,/PLAY_SOUND_R2 | |
mov @r0,a ; Stack 0 : PLAY_SOUND_R2 | |
mov a,#$09 ; A = %00001001 | |
mov psw,a ; set SP to 1 | |
retr ; goto LOC_016 | |
JO_PLAY_SOUND: | |
.OT | |
.DB JT_PLAY_SOUND_0 | |
.DB JT_PLAY_SOUND_1 | |
.DB JT_PLAY_SOUND_2 | |
.DB JT_PLAY_SOUND_3 | |
.DB JT_PLAY_SOUND_4 | |
.DB JT_PLAY_SOUND_5 | |
.DB JT_PLAY_SOUND_6 | |
.DB JT_PLAY_SOUND_7 | |
.DB JT_PLAY_SOUND_8 | |
.DB JT_PLAY_SOUND_9 | |
.DB JT_PLAY_SOUND_A | |
.DB JT_PLAY_SOUND_B | |
.DB JT_PLAY_SOUND_C | |
.DB JT_PLAY_SOUND_D | |
.DB JT_PLAY_SOUND_E | |
.DB JT_PLAY_SOUND_F | |
JT_PLAY_SOUND_0: | |
jmp SOUND_OFF | |
JT_PLAY_SOUND_1: | |
jmp SOUND_1 | |
JT_PLAY_SOUND_2: | |
jmp SOUND_2 | |
JT_PLAY_SOUND_3: | |
jmp SOUND_3 | |
JT_PLAY_SOUND_4: | |
jmp SOUND_4 | |
JT_PLAY_SOUND_5: | |
jmp SOUND_5 | |
JT_PLAY_SOUND_6: | |
jmp SOUND_6 | |
JT_PLAY_SOUND_7: | |
jmp SOUND_7 | |
JT_PLAY_SOUND_8: | |
jmp SOUND_OFF | |
JT_PLAY_SOUND_9: | |
jmp SOUND_OFF | |
JT_PLAY_SOUND_A: | |
jmp SOUND_OFF | |
JT_PLAY_SOUND_B: | |
jmp SOUND_OFF | |
JT_PLAY_SOUND_C: | |
jmp SOUND_OFF | |
JT_PLAY_SOUND_D: | |
jmp SOUND_OFF | |
JT_PLAY_SOUND_E: | |
jmp SOUND_OFF | |
JT_PLAY_SOUND_F: | |
jmp SOUND_OFF | |
;; PLAY_SOUND(a) - Play sound $0-$F | |
PLAY_SOUND: | |
anl a,#$0F | |
add a,#JO_PLAY_SOUND | |
jmpp @a | |
.CT | |
TIMER_HANDLER: | |
retr | |
;; Dead code | |
mov a,t | |
add a,r2 | |
mov t,a | |
anl a,r0 | |
movp a,@a | |
retr | |
;; Dead code | |
;; NOISE_R3(r6=off) - Return random value | |
;; *[(timer + r6) & $3F] | |
NOISE_R3: | |
mov a,t | |
add a,r6 | |
mov t,a | |
anl a,#$3F | |
movp a,@a | |
mov r3,a | |
retr | |
;; NOISE_A(r2=off) - Return random value | |
;; *[(timer + r2) & $3F] | |
NOISE_A: | |
mov a,t | |
add a,r2 | |
mov t,a | |
anl a,#$3F | |
movp a,@a | |
retr | |
SOUND_OFF: | |
mov a,#$00 | |
outl p1,a | |
jmp HALT | |
SOUND_1: | |
mov r4,#$15 ; dinit - delay initializer | |
mov r5,#$15 ; delay - 2*delay cycle delay for each sample | |
mov r6,#$00 ; vptr - voice pointer (curr idx into sample) | |
mov r7,#$10 ; bv - base voice | |
mov r2,#$01 ; lcurr - current loop count | |
mov r3,#$01 ; linit - loop initializer | |
.loop: | |
call VOICE_OUT ; jump table (r7=$10) -> jmp $2A2 | |
;; r4 += $20 | |
mov a,r4 | |
add a,#$20 | |
mov r4,a | |
mov r5,a | |
;; | |
djnz r2,.loop | |
;; lcurr = linit | |
mov a,r3 | |
mov r2,a | |
;; bvx += 1 | |
mov a,r7 | |
inc a | |
mov r7,a | |
;; | |
anl a,#$01 | |
jz HALT | |
jmp .loop | |
SOUND_2: | |
mov r4,#$20 | |
mov r5,#$20 | |
mov r6,#$00 | |
mov r7,#$00 | |
mov r2,#$02 | |
mov r3,#$02 | |
mov r1,#$02 | |
mov r0,#$20 | |
.l1: | |
call VOICE_OUT ; jump table (r7=$00) -> goto $200 | |
mov a,r4 | |
add a,#$10 | |
mov r4,a | |
mov r5,a | |
djnz r2,.l1 | |
mov a,r3 | |
mov r2,a | |
mov a,r0 | |
add a,#$04 | |
mov r0,a | |
mov r4,a | |
mov r5,a | |
djnz r1,.l1 | |
mov r1,#$02 | |
mov a,r7 | |
inc a | |
anl a,#$07 | |
mov r7,a ; r7 = (r7 + 1) & 0x7 | |
jz HALT | |
jmp .l1 | |
SOUND_3: | |
mov r4,#$0A | |
mov r5,#$0A | |
mov r6,#$00 | |
mov r7,#$00 | |
mov r2,#$02 | |
mov r3,#$02 | |
mov r1,#$02 | |
mov r0,#$0A | |
.l1: | |
call VOICE_OUT ; jump table (r7=$00) -> jmp $200 | |
mov a,r4 | |
add a,#$10 | |
mov r4,a | |
mov r5,a | |
djnz r2,.l1 | |
mov a,r3 | |
mov r2,a | |
mov a,r0 | |
add a,#$01 | |
mov r0,a | |
mov r4,a | |
mov r5,a | |
djnz r1,.l1 | |
mov r1,#$02 | |
mov a,r7 | |
inc a | |
anl a,#$07 | |
mov r7,a ; r7 = (r7 + 1) & 0x7 | |
jz HALT | |
jmp .l1 | |
.NO $100,$FF | |
.OT | |
JO_VOICE: | |
.DB JT_VOICE_00 | |
.DB JT_VOICE_01 | |
.DB JT_VOICE_02 | |
.DB JT_VOICE_03 | |
.DB JT_VOICE_04 | |
.DB JT_VOICE_05 | |
.DB JT_VOICE_06 | |
.DB JT_VOICE_07 | |
.DB JT_VOICE_08 | |
.DB JT_VOICE_09 | |
.DB JT_VOICE_0A | |
.DB JT_VOICE_0B | |
.DB JT_VOICE_0C | |
.DB JT_VOICE_0D | |
.DB JT_VOICE_0E | |
.DB JT_VOICE_0F | |
.DB JT_VOICE_10 | |
.DB JT_VOICE_11 | |
.DB JT_VOICE_12 | |
.DB JT_VOICE_13 | |
.DB JT_VOICE_14 | |
.DB JT_VOICE_15 | |
.DB JT_VOICE_16 | |
.DB JT_VOICE_17 | |
.DB JT_VOICE_18 | |
.DB JT_VOICE_19 | |
.DB JT_VOICE_1A | |
.DB JT_VOICE_1B | |
.DB JT_VOICE_1C | |
.DB JT_VOICE_1D | |
.DB JT_VOICE_1E | |
.DB JT_VOICE_1F | |
.DB JT_VOICE_20 | |
.DB JT_VOICE_21 | |
.DB JT_VOICE_22 | |
.DB JT_VOICE_23 | |
.DB JT_VOICE_24 | |
.DB JT_VOICE_25 | |
.DB JT_VOICE_26 | |
.DB JT_VOICE_27 | |
.DB JT_VOICE_28 | |
.DB JT_VOICE_29 | |
.DB JT_VOICE_2A | |
.DB JT_VOICE_2B | |
.DB JT_VOICE_2C | |
.DB JT_VOICE_2D | |
.DB JT_VOICE_2E | |
.DB JT_VOICE_2F | |
JT_VOICE_00: | |
jmp LOC_200 | |
JT_VOICE_01: | |
jmp LOC_216 | |
JT_VOICE_02: | |
jmp LOC_22A | |
JT_VOICE_03: | |
jmp LOC_23E | |
JT_VOICE_04: | |
jmp LOC_252 | |
JT_VOICE_05: | |
jmp LOC_266 | |
JT_VOICE_06: | |
jmp LOC_27A | |
JT_VOICE_07: | |
jmp LOC_28E | |
JT_VOICE_08: | |
jmp LOC_39D | |
JT_VOICE_09: | |
jmp LOC_3BA | |
JT_VOICE_0A: | |
jmp LOC_3D4 | |
JT_VOICE_0B: | |
jmp LOC_400 | |
JT_VOICE_0C: | |
jmp LOC_41D | |
JT_VOICE_0D: | |
jmp LOC_437 | |
JT_VOICE_0E: | |
jmp LOC_451 | |
JT_VOICE_0F: | |
jmp LOC_46B | |
JT_VOICE_10: | |
jmp LOC_2A2 | |
JT_VOICE_11: | |
jmp LOC_2C8 | |
JT_VOICE_12: | |
jmp LOC_22A | |
JT_VOICE_13: | |
jmp LOC_23E | |
JT_VOICE_14: | |
jmp LOC_252 | |
JT_VOICE_15: | |
jmp LOC_266 | |
JT_VOICE_16: | |
jmp LOC_27A | |
JT_VOICE_17: | |
jmp LOC_28E | |
JT_VOICE_18: | |
jmp LOC_39D | |
JT_VOICE_19: | |
jmp LOC_216 | |
JT_VOICE_1A: | |
jmp LOC_216 | |
JT_VOICE_1B: | |
jmp LOC_216 | |
JT_VOICE_1C: | |
jmp LOC_216 | |
JT_VOICE_1D: | |
jmp LOC_216 | |
JT_VOICE_1E: | |
jmp LOC_216 | |
JT_VOICE_1F: | |
jmp LOC_216 | |
JT_VOICE_20: | |
jmp LOC_500 | |
JT_VOICE_21: | |
jmp LOC_507 | |
JT_VOICE_22: | |
jmp LOC_50E | |
JT_VOICE_23: | |
jmp LOC_515 | |
JT_VOICE_24: | |
jmp LOC_51C | |
JT_VOICE_25: | |
jmp LOC_523 | |
JT_VOICE_26: | |
jmp LOC_52A | |
JT_VOICE_27: | |
jmp LOC_531 | |
JT_VOICE_28: | |
jmp LOC_538 | |
JT_VOICE_29: | |
jmp LOC_53F | |
JT_VOICE_2A: | |
jmp LOC_546 | |
JT_VOICE_2B: | |
jmp LOC_54D | |
JT_VOICE_2C: | |
jmp LOC_554 | |
JT_VOICE_2D: | |
jmp LOC_55B | |
JT_VOICE_2E: | |
jmp LOC_562 | |
JT_VOICE_2F: | |
jmp LOC_569 | |
;; VOICE_OUT(r7=voice,r6=vptr,) | |
;; Output voice | |
VOICE_OUT: | |
mov a,r7 | |
add a,#JO_VOICE | |
jmpp @a | |
;; Output 32 sample voice + 64 | |
VOICE_OUT_32_64: | |
add a,#$40 | |
;; Output 32 sample voice | |
VOICE_OUT_32: | |
outl p1,a ; sample = a | |
;; delay 2*r5 cycles | |
.delay: | |
djnz r5,.delay | |
;; delay = dinit | |
mov a,r4 | |
mov r5,a | |
;; (r6 + 1) & $1F | |
mov a,r6 | |
inc a | |
anl a,#$1F | |
mov r6,a | |
;; | |
jnz .not_done | |
retr | |
.not_done: | |
jmp VOICE_OUT | |
;; Output 16 sample voice | |
VOICE_OUT_16: | |
outl p1,a ; sample = a | |
;; delay 2*r5 cycles | |
.delay | |
djnz r5,.delay | |
;; delay = dinit | |
mov a,r4 | |
mov r5,a | |
;; vptr = (vptr + 1) & $F | |
mov a,r6 | |
inc a | |
anl a,#$0F | |
mov r6,a | |
;; | |
jnz .not_done | |
retr | |
.not_done: | |
jmp VOICE_OUT | |
.CT | |
;; Page $2 | |
.NO $200,$FF | |
.OT | |
LOC_200: | |
mov a,#DATA_206 | |
LOC_202: | |
add a,r6 | |
movp a,@a ; A = TABLE[A] | |
jmp VOICE_OUT_16 | |
DATA_206: | |
.DB $80,$80,$80,$80,$00,$60,$00,$00 | |
.DB $00,$00,$00,$00,$00,$00,$00,$00 | |
LOC_216: | |
mov a,#DATA_21A | |
jmp LOC_202 | |
DATA_21A: | |
.DB $0E,$1C,$2A,$38,$46,$54,$62,$70 | |
.DB $70,$62,$54,$46,$38,$2A,$1C,$0E | |
LOC_22A: | |
mov a,#DATA_22E | |
jmp LOC_202 | |
DATA_22E: | |
.DB $0C,$18,$24,$30,$3C,$48,$54,$60 | |
.DB $60,$54,$48,$3C,$30,$24,$18,$0C | |
LOC_23E: | |
mov a,#DATA_242 | |
jmp LOC_202 | |
DATA_242: | |
.DB $0A,$14,$1E,$28,$32,$3C,$46,$50 | |
.DB $50,$46,$3C,$32,$28,$1E,$14,$0A | |
LOC_252: | |
mov a,#DATA_256 | |
jmp LOC_202 | |
DATA_256: | |
.DB $08,$10,$18,$20,$28,$30,$38,$40 | |
.DB $40,$38,$30,$28,$20,$18,$10,$08 | |
LOC_266: | |
mov a,#DATA_26A | |
jmp LOC_202 | |
DATA_26A: | |
.DB $06,$0C,$12,$18,$1E,$24,$2A,$30 | |
.DB $30,$2A,$24,$1E,$18,$12,$0C,$06 | |
LOC_27A: | |
mov a,#DATA_27E | |
jmp LOC_202 | |
DATA_27E: | |
.DB $04,$08,$0C,$10,$14,$18,$1C,$20 | |
.DB $20,$1C,$18,$14,$10,$0C,$08,$04 | |
LOC_28E: | |
mov a,#DATA_292 | |
jmp LOC_202 | |
DATA_292: | |
.DB $02,$04,$06,$08,$0A,$0C,$0E,$10 | |
.DB $10,$0E,$0C,$0A,$08,$06,$04,$02 | |
LOC_2A2: | |
mov a,#DATA_2A8 | |
LOC_2A4: | |
add a,r6 | |
movp a,@a | |
;; | |
jmp VOICE_OUT_32_64 | |
DATA_2A8: | |
.DB $08,$10,$18,$20,$28,$30,$38,$40 | |
.DB $48,$50,$58,$60,$58,$50,$58,$60 | |
.DB $60,$58,$50,$58,$60,$58,$50,$48 | |
.DB $40,$38,$30,$28,$20,$18,$10,$08 | |
LOC_2C8: | |
mov a,#DATA_2CC | |
jmp LOC_2A4 | |
DATA_2CC: | |
.DB $04,$08,$0C,$10,$14,$18,$1C,$20 | |
.DB $24,$28,$2C,$30,$2C,$28,$2C,$30 | |
.DB $30,$2C,$28,$2C,$30,$2C,$28,$24 | |
.DB $20,$1C,$18,$14,$10,$0C,$08,$04 | |
.CT | |
;; Page $3 | |
.NO $300, $FF | |
.OT | |
SOUND_5: | |
mov r7,#$FF ; aenv - amplitude envelope | |
mov r4,#$01 | |
mov r5,#$01 | |
mov r6,#$01 | |
mov r1,#$04 | |
mov r2,#$70 | |
mov r3,#$70 | |
.sample_out: | |
call NOISE_A ; NOISE_A(r2) | |
anl a,r7 | |
outl p1,a ; sample = noise & aenv | |
;; delay 2*r5 cycles | |
.delay: | |
djnz r5,.delay | |
;; | |
mov a,r4 | |
inc a | |
anl a,#$07 | |
jz .r4_wrap | |
.r4_nowrap: | |
mov r4,a | |
mov r5,a | |
djnz r6,.sample_out | |
;; | |
mov a,r1 | |
mov r6,a | |
djnz r3,.sample_out | |
;; | |
mov a,r2 | |
mov r3,a | |
;; aenv >>= 1 | |
mov a,r7 | |
rr a | |
anl a,#$7F | |
mov r7,a | |
;; done if aenv has decayed to 0 | |
jz .done | |
add a,#$C1 | |
jz .l5 | |
jmp .sample_out | |
.r4_wrap: | |
mov a,#$04 | |
jmp .r4_nowrap | |
.l5: | |
mov a,r1 | |
add a,#$10 | |
mov r1,a | |
mov r6,a | |
jmp .sample_out | |
.done: | |
jmp HALT | |
SOUND_6: | |
mov r7,#$3F ; aenv - amplitude envelope | |
mov r4,#$01 | |
mov r5,#$01 | |
mov r6,#$01 | |
mov r2,#$70 | |
mov r3,#$70 | |
.sample_out: | |
call NOISE_A ; NOISE_A(r2) | |
anl a,r7 | |
outl p1,a ; sample = noise & aenv | |
;; delay 2*r5 cycles | |
.delay: | |
djnz r5,.delay | |
;; | |
mov a,r4 | |
inc a | |
anl a,#$03 | |
jz .r4_wrap | |
.r4_nowrap: | |
mov r4,a | |
mov r5,a | |
djnz r6,.sample_out | |
;; | |
mov r6,#$04 | |
djnz r3,.sample_out | |
;; | |
mov a,r2 | |
mov r3,a | |
;; aenv >>= 1 | |
mov a,r7 | |
rr a | |
anl a,#$7F | |
mov r7,a | |
;; done if aenv has decayed to 0 | |
jz .done | |
jmp .sample_out | |
.r4_wrap: | |
mov a,#$01 | |
jmp .r4_nowrap | |
.done: | |
jmp HALT | |
SOUND_4: | |
mov r4,#$0A | |
mov r5,#$0A | |
mov r6,#$00 | |
mov r7,#$08 | |
mov r2,#$02 | |
mov r1,#$02 | |
mov r0,#$06 | |
.loop: | |
call VOICE_OUT ; jump table (r7=$08) -> jmp $39D | |
mov a,r4 | |
add a,#$10 | |
mov r4,a | |
mov r5,a | |
djnz r2,.loop | |
mov r2,#$03 | |
mov a,r0 | |
add a,#$01 | |
mov r0,a | |
mov r4,a | |
mov r5,a | |
djnz r1,.loop | |
mov r1,#$01 | |
mov a,r7 | |
inc a | |
mov r7,a | |
anl a,#$0F | |
jz .done | |
jmp .loop | |
.done: | |
jmp HALT | |
LOC_39D: | |
call NOISE_R3 | |
mov a,r3 | |
anl a,#$7F | |
mov r3,a | |
mov a,#DATA_3AA | |
LOC_3A5: | |
add a,r6 | |
movp a,@a | |
add a,r3 | |
jmp VOICE_OUT_16 | |
DATA_3AA: | |
.DB $40,$40,$40,$40,$00,$20,$00,$00 | |
.DB $00,$00,$00,$00,$00,$00,$00,$00 | |
LOC_3BA: | |
call NOISE_R3 | |
mov a,r3 | |
anl a,#$7F | |
mov r3,a | |
mov a,#DATA_3C4 | |
jmp LOC_3A5 | |
DATA_3C4: | |
.DB $0E,$1C,$2A,$38,$46,$54,$62,$70 | |
.DB $70,$62,$54,$46,$38,$2A,$1C,$0E | |
LOC_3D4: | |
call NOISE_R3 | |
mov a,r3 | |
anl a,#$7F | |
mov r3,a | |
mov a,#DATA_3DE | |
jmp LOC_3A5 | |
DATA_3DE: | |
.DB $0C,$18,$24,$30,$3C,$48,$54,$60 | |
.DB $60,$54,$48,$3C,$30,$24,$18,$0C | |
.CT | |
;; Page $4 | |
.NO $400,$FF | |
.OT | |
LOC_400: | |
call NOISE_R3 | |
mov a,r3 | |
anl a,#$3F | |
mov r3,a | |
mov a,#DATA_40D | |
LOC_408: | |
add a,r6 | |
movp a,@a | |
add a,r3 | |
jmp VOICE_OUT_16 | |
DATA_40D: | |
.DB $0A,$14,$1E,$28,$32,$3C,$46,$50 | |
.DB $50,$46,$3C,$32,$28,$1E,$14,$0A | |
LOC_41D: | |
call NOISE_R3 | |
mov a,r3 | |
anl a,#$1F | |
mov r3,a | |
mov a,#DATA_427 | |
jmp LOC_408 | |
DATA_427: | |
.DB $08,$10,$18,$20,$28,$30,$38,$40 | |
.DB $40,$38,$30,$28,$20,$18,$10,$08 | |
LOC_437: | |
call NOISE_R3 | |
mov a,r3 | |
anl a,#$0F | |
mov r3,a | |
mov a,#DATA_441 | |
jmp LOC_408 | |
DATA_441: | |
.DB $06,$0C,$12,$18,$1E,$24,$2A,$30 | |
.DB $30,$2A,$24,$1E,$18,$12,$0C,$06 | |
LOC_451: | |
call NOISE_R3 | |
mov a,r3 | |
anl a,#$07 | |
mov r3,a | |
mov a,#DATA_45B | |
jmp LOC_408 | |
DATA_45B: | |
.DB $04,$08,$0C,$10,$14,$18,$1C,$20 | |
.DB $20,$1C,$18,$14,$10,$0C,$08,$04 | |
LOC_46B: | |
call NOISE_R3 | |
mov a,r3 | |
anl a,#$03 | |
mov r3,a | |
mov a,#DATA_475 | |
jmp LOC_408 | |
DATA_475: | |
.DB $02,$04,$06,$08,$0A,$0C,$0E,$10 | |
.DB $10,$0E,$0C,$0A,$08,$06,$04,$02 | |
SOUND_7: | |
mov r0,#$00 | |
mov r6,#$00 | |
mov r7,#$20 | |
.l1: | |
mov a,r0 | |
add a,#$F8 | |
jz .done | |
mov a,r0 | |
add a,#DATA_4B1 | |
movp a,@a | |
mov r2,a | |
mov r3,a | |
inc r0 | |
mov a,r0 | |
add a,#DATA_4B1 | |
movp a,@a | |
mov r4,a | |
mov r5,a | |
inc r0 | |
.l2: | |
call VOICE_OUT ; jump table (r7=$20) -> jmp $500 | |
djnz r3,.l2 | |
mov a,r2 | |
mov r3,a | |
mov a,r7 | |
inc a | |
mov r7,a | |
anl a,#$0F | |
jnz .l2 | |
mov r7,#$20 | |
jmp .l1 | |
.done: | |
jmp HALT | |
DATA_4B1: | |
.DB $07,$62,$07,$62,$07,$62,$07,$62 | |
.DB $0A,$33,$0A,$33,$0A,$33,$0A,$33 | |
.DB $0A,$33,$0A,$33,$0A,$33,$0A,$33 | |
.DB $0A,$33,$0A,$33,$0A,$33,$0A,$33 | |
.DB $0A,$33,$0A,$33,$0A,$33,$0A,$33 | |
.DB $0A,$33 | |
.CT | |
;; Page $5 | |
.NO $500,$FF | |
LOC_500: | |
mov a,r6 | |
add a,#$F1 | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_507: | |
mov a,r6 | |
add a,#$F0 | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_50E: | |
mov a,r6 | |
add a,#$EF | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_515: | |
mov a,r6 | |
add a,#$EE | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_51C: | |
mov a,r6 | |
add a,#$ED | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_523: | |
mov a,r6 | |
add a,#$EC | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_52A: | |
mov a,r6 | |
add a,#$EB | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_531: | |
mov a,r6 | |
add a,#$EA | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_538: | |
mov a,r6 | |
add a,#$E9 | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_53F: | |
mov a,r6 | |
add a,#$E8 | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_546: | |
mov a,r6 | |
add a,#$E7 | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_54D: | |
mov a,r6 | |
add a,#$E6 | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_554: | |
mov a,r6 | |
add a,#$E5 | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_55B: | |
mov a,r6 | |
add a,#$E4 | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_562: | |
mov a,r6 | |
add a,#$E3 | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_569: | |
mov a,r6 | |
add a,#$E2 | |
jc LOC_570 | |
jmp LOC_574 | |
LOC_570: | |
mov a,#$00 | |
jmp VOICE_OUT_32 | |
LOC_574: | |
mov a,#$40 | |
jmp VOICE_OUT_32 | |
.NO $1000,$FF |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment