mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-25 20:30:31 +00:00
275 lines
4.1 KiB
ArmAsm
275 lines
4.1 KiB
ArmAsm
;MB_VALUE = $91
|
|
;MB_FRAME = $94
|
|
;MB_PATTERN = $95
|
|
|
|
|
|
mah00 = $8000
|
|
mah01 = $8100
|
|
mah02 = $8200
|
|
mah03 = $8300
|
|
mah04 = $8400
|
|
mah05 = $8500
|
|
mah06 = $8600
|
|
mah07 = $8700
|
|
mal00 = $8800
|
|
mal01 = $8900
|
|
mal02 = $8A00
|
|
mal03 = $8B00
|
|
mal04 = $8C00
|
|
mal05 = $8D00
|
|
mal06 = $8E00
|
|
mal07 = $8F00
|
|
mbh00 = $9000
|
|
mbh01 = $9100
|
|
mbh02 = $9200
|
|
mbh03 = $9300
|
|
mbh04 = $9400
|
|
mbh05 = $9500
|
|
mbh06 = $9600
|
|
mbh07 = $9700
|
|
mbl00 = $9800
|
|
mbl01 = $9900
|
|
mbl02 = $9A00
|
|
mbl03 = $9B00
|
|
mbl04 = $9C00
|
|
mbl05 = $9D00
|
|
mbl06 = $9E00
|
|
mbl07 = $9F00
|
|
mch00 = $A000
|
|
mch01 = $A100
|
|
mch02 = $A200
|
|
mch03 = $A300
|
|
mch04 = $A400
|
|
mch05 = $A500
|
|
mch06 = $A600
|
|
mch07 = $A700
|
|
mcl00 = $A800
|
|
mcl01 = $A900
|
|
mcl02 = $AA00
|
|
mcl03 = $AB00
|
|
mcl04 = $AC00
|
|
mcl05 = $AD00
|
|
mcl06 = $AE00
|
|
mcl07 = $AF00
|
|
mnh00 = $B000
|
|
mnh01 = $B100
|
|
mnh02 = $B200
|
|
mnh03 = $B300
|
|
mnh04 = $B400
|
|
mnh05 = $B500
|
|
mnh06 = $B600
|
|
mnh07 = $B700
|
|
mnl00 = $B800
|
|
mnl01 = $B900
|
|
mnl02 = $BA00
|
|
mnl03 = $BB00
|
|
mnl04 = $BC00
|
|
mnl05 = $BD00
|
|
mnl06 = $BE00
|
|
mnl07 = $BF00
|
|
|
|
|
|
|
|
; takes
|
|
; 7 load pattern
|
|
; 76 smc
|
|
; 3 loop init
|
|
; 910 play music 80 + 82 + 88 + 80 + 82 + 88 + 80 + 82 + 88 + 80 + 80
|
|
; 21 end
|
|
;==========
|
|
; = 1017
|
|
play_music:
|
|
|
|
mute_smc:
|
|
; self-modify the code
|
|
lda MB_PATTERN ; 3
|
|
and #$07 ; 2
|
|
tay ; 2
|
|
|
|
lda mal_pattern,Y ; 4
|
|
sta mb_smc1+2 ; 4
|
|
lda mah_pattern,Y ; 4
|
|
sta mb_smc2+2 ; 4
|
|
sta mb_smc3+2 ; 4
|
|
|
|
lda mbl_pattern,Y ; 4
|
|
sta mb_smc4+2 ; 4
|
|
lda mbh_pattern,Y ; 4
|
|
sta mb_smc5+2 ; 4
|
|
sta mb_smc6+2 ; 4
|
|
|
|
; mcl and mch patterns are the same
|
|
lda mcl_pattern,Y ; 4
|
|
sta mb_smc7+2 ; 4
|
|
lda mch_pattern,Y ; 4
|
|
sta mb_smc8+2 ; 4
|
|
sta mb_smc9+2 ; 4
|
|
|
|
lda mnl_pattern,Y ; 4
|
|
sta mb_smc10+2 ; 4
|
|
lda mnh_pattern,Y ; 4
|
|
sta mb_smc11+2 ; 4
|
|
;=======
|
|
; 76
|
|
|
|
|
|
|
|
|
|
; play the code
|
|
|
|
ldy MB_FRAME ; 3
|
|
;=======
|
|
|
|
; mal
|
|
mb_smc1:
|
|
lda mal00,Y ; 4
|
|
sta MB_VALUE ; 3
|
|
ldx #0 ; 2
|
|
jsr write_ay_both ; 6+65
|
|
;=========
|
|
; 80
|
|
|
|
; mah
|
|
mb_smc2:
|
|
lda mal00,Y ; 4
|
|
and #$f ; 2
|
|
sta MB_VALUE ; 3
|
|
ldx #1 ; 2
|
|
jsr write_ay_both ; 6+65
|
|
;========
|
|
; 82
|
|
|
|
mb_smc3:
|
|
lda mal00,Y ; 4
|
|
lsr ; 2
|
|
lsr ; 2
|
|
lsr ; 2
|
|
lsr ; 2
|
|
sta MB_VALUE ; 3
|
|
ldx #8 ; 2
|
|
jsr write_ay_both ; 6+65
|
|
;=======
|
|
; 88
|
|
|
|
; mbl
|
|
mb_smc4:
|
|
lda mbl00,Y ; 4
|
|
sta MB_VALUE ; 3
|
|
ldx #2 ; 2
|
|
jsr write_ay_both ; 6+65
|
|
;=======
|
|
; 80
|
|
; mbh
|
|
mb_smc5:
|
|
lda mbh00,Y ; 4
|
|
and #$f ; 2
|
|
sta MB_VALUE ; 3
|
|
ldx #3 ; 2
|
|
jsr write_ay_both ; 6+65
|
|
;=======
|
|
; 82
|
|
|
|
mb_smc6:
|
|
lda mbh00,Y ; 4
|
|
lsr ; 2
|
|
lsr ; 2
|
|
lsr ; 2
|
|
lsr ; 2
|
|
sta MB_VALUE ; 3
|
|
ldx #9 ; 2
|
|
jsr write_ay_both ; 6+65
|
|
;======
|
|
; 88
|
|
; mcl
|
|
mb_smc7:
|
|
lda mal00,Y ; 4
|
|
sta MB_VALUE ; 3
|
|
ldx #4 ; 2
|
|
jsr write_ay_both ; 6+65
|
|
;======
|
|
; 80
|
|
|
|
; mch
|
|
mb_smc8:
|
|
lda mal00,Y ; 4
|
|
and #$f ; 2
|
|
sta MB_VALUE ; 3
|
|
ldx #5 ; 2
|
|
jsr write_ay_both ; 6+65
|
|
;=======
|
|
; 82
|
|
|
|
mb_smc9:
|
|
lda mal00,Y ; 4
|
|
lsr ; 2
|
|
lsr ; 2
|
|
lsr ; 2
|
|
lsr ; 2
|
|
sta MB_VALUE ; 3
|
|
ldx #10 ; 2
|
|
jsr write_ay_both ; 6+65
|
|
;========
|
|
; 88
|
|
; mnl
|
|
mb_smc10:
|
|
lda mal00,Y ; 4
|
|
sta MB_VALUE ; 3
|
|
ldx #6 ; 2
|
|
jsr write_ay_both ; 6+65
|
|
;=======
|
|
; 80
|
|
; mnh
|
|
mb_smc11:
|
|
lda mnh00,Y ; 4
|
|
sta MB_VALUE ; 3
|
|
ldx #7 ; 2
|
|
jsr write_ay_both ; 6+65
|
|
;=======
|
|
; 80
|
|
|
|
inc MB_FRAME ; 5
|
|
|
|
bne mb_no_change ; 3
|
|
; -1
|
|
inc MB_PATTERN ; 5
|
|
jmp mb_done_change ; 3
|
|
mb_no_change:
|
|
lda $0 ; 3
|
|
nop ; 2
|
|
nop ; 2
|
|
mb_done_change:
|
|
|
|
; restore language card
|
|
rts ; 6
|
|
;=======
|
|
; 21
|
|
play_music_end:
|
|
|
|
.assert >play_music = >play_music_end, error, "play_music crosses page"
|
|
|
|
.align $100
|
|
|
|
pattern_begin:
|
|
|
|
; patterns 8 long
|
|
mal_pattern:
|
|
.byte >mal00,>mal01,>mal02,>mal03,>mal04,>mal05,>mal06,>mal07
|
|
mah_pattern:
|
|
.byte >mah00,>mah01,>mah02,>mah03,>mah04,>mah05,>mah06,>mah07
|
|
mbl_pattern:
|
|
.byte >mbl00,>mbl01,>mbl02,>mbl03,>mbl04,>mbl05,>mbl06,>mbl07
|
|
mbh_pattern:
|
|
.byte >mbh00,>mbh01,>mbh02,>mbh03,>mbh04,>mbh05,>mbh06,>mbh07
|
|
mcl_pattern:
|
|
.byte >mcl00,>mcl01,>mcl02,>mcl03,>mcl04,>mcl05,>mcl06,>mcl07
|
|
mch_pattern:
|
|
.byte >mch00,>mch01,>mch02,>mch03,>mch04,>mch05,>mch06,>mch07
|
|
mnl_pattern:
|
|
.byte >mnl00,>mnl01,>mnl02,>mnl03,>mnl04,>mnl05,>mnl06,>mnl07
|
|
mnh_pattern:
|
|
.byte >mnh00,>mnh01,>mnh02,>mnh03,>mnh04,>mnh05,>mnh06,>mnh07
|
|
|
|
pattern_end:
|
|
|
|
.assert >pattern_begin = >pattern_end, error, "pattern crosses page"
|