Cybernoid/Cybernoid2/Cybernoid2.a

1261 lines
26 KiB
Plaintext

;ACME 0.85
!cpu 6502 ; Compatible with all Apple2's
!to "Cybernoid2", plain
!sl "Cybernoid2.labels"
*=$6000
;------------------------------------------------------------------------------
!source "..\Common\Z80-Macros.a"
!source "..\Common\ZP-Macros.a"
!source "..\Common\AppleDefs.a"
!source "..\Common\MockingboardDefs.a"
!source "..\Common\MB-Macros.a"
;------------------------------------------------------------------------------
!zone code
;--------------------------------------
NUM_SONGS = 16
INIT:
; Pre: A = Song# [0..NUM_SONGS-1]
;
+MB_Init1 RegA
+PUSH16 RegA ;RegAF
jsr lf3fa
+POP16 RegA ;RegAF
jsr lf398
+MB_Init2
rts
;--------------------------------------
lf398: ; Called by INIT
+LD RegE, RegA
lf399: ; Re-init: Called by Cmd_01..08
+LD RegC, RegA
jsr lf415
+LD_REG_INDIRECT RegA, RegHL
cmp #$09
bcs lf3a5
+LD RegC, RegA
+INCW RegHL
+LD_REG_INDIRECT RegA, RegHL
lf3a5:
cmp #$f4
php ; New
+LD_REG_IMM RegB, $0a
plp ; New
bne lf3ae
+INCW RegHL
+LD_REG_INDIRECT RegB, RegHL
+INCW RegHL
lf3ae:
+LDW RegIX, lf690
dec RegC
beq lf3d1
+LDW RegIX, lf6b3
dec RegC
beq lf3d1
+LDW RegIX, lf6d6
dec RegC
beq lf3d1
+LD_REG_INDIRECT_ABS RegA, lf6a0
; ora RegA ; Superfluous
+LDW RegIX, lf690
beq lf3d1
+LDW RegIX, lf6b3
lf3d1:
+LD RegA, RegB
+CP_INDIRECT_OFFSET RegIX, $10
+RET_C
+LD_REG_IMM RegA, 0 ; xor a
+LD_INDIRECT_OFFSET RegIX, $10, RegA
+LD_INDIRECT_OFFSET RegIX, $12, RegL
+LD_INDIRECT_OFFSET RegIX, $13, RegH
+LD_INDIRECT_OFFSET RegIX, $14, RegL
+LD_INDIRECT_OFFSET RegIX, $15, RegH
+LD_INDIRECT_OFFSET RegIX, $16, RegL
+LD_INDIRECT_OFFSET RegIX, $17, RegH
+LD_INDIRECT_OFFSET_IMM RegIX, $11, $01
+LD_INDIRECT_OFFSET RegIX, $18, RegA
+LD_INDIRECT_OFFSET RegIX, $20, RegA
+LD_INDIRECT_OFFSET RegIX, $10, RegB
rts
lf3fa:
+LD_REG_IMM RegA, 0 ; xor a
+LD_INDIRECT_ABS lf6a0, RegA
+LD_INDIRECT_ABS lf6c3, RegA
+LD_INDIRECT_ABS lf6e6, RegA
+LD_INDIRECT_ABS lf67a, RegA
+LD_INDIRECT_ABS lf67b, RegA
+LD_INDIRECT_ABS lf67c, RegA
+LD_REG_IMM RegA, $3f
+LD_INDIRECT_ABS lf679, RegA
jmp lf46c
;--------------------------------------
lf415:
; +LD RegA, RegE
; lda RegA
; asl
; sta RegA
;
; clc ; CARRY OK
; lda RegA
; adc #$<lf818
; sta RegA
; +LD RegL, RegA
; lda RegA
; adc #$>lf818
; sta RegA
;
; sbc RegL ; CARRY possibly wrong
; +LD RegH, RegA
; +LD_REG_INDIRECT RegE, RegHL
; +INCW RegHL
; +LD_REG_INDIRECT RegD, RegHL
; +LDW RegHL, lf700
; +ADDW RegHL, RegDE
lda RegE
cmp #58
bcc .lt1
brk
.lt1
lda #<lf818
sta TmpHL ; LSB
lda #>lf818
sta TmpHL+1 ; MSB
+LD RegA, RegE
asl ; =lsl
tay
clc
lda (TmpHL),y ; LSB
adc #<lf700
sta RegL
iny
lda (TmpHL),y ; MSB
adc #>lf700
sta RegH
rts
;--------------------------------------
lf426:
; +LD RegA, RegE
; lda RegA
; asl
; sta RegA
;
; clc ; CARRY OK
; lda RegA
; adc #$c8
; sta RegA
; +LD RegE, RegA
; lda RegA
; adc #$f7
; sta RegA
;
; sbc RegE ; CARRY possibly wrong
; +LD RegD, RegA
; +LD_REG_INDIRECT RegA, RegDE
; clc ; CARRY possibly wrong
; lda RegA
; adc #$00
; sta RegA
; +LD RegC, RegA
; +INCW RegDE
; +LD_REG_INDIRECT RegA, RegDE
; lda RegA
; adc #$f7
; sta RegA
; +LD RegB, RegA
lda RegE
cmp #40
bcc .lt2
brk
.lt2
lda #<lf7c8
sta TmpHL ; LSB
lda #>lf7c8
sta TmpHL+1 ; MSB
+LD RegA, RegE
asl ; =lsl
tay
clc
lda (TmpHL),y ; LSB
adc #<lf700
sta RegC
iny
lda (TmpHL),y ; MSB
adc #>lf700
sta RegB
rts
;--------------------------------------
Interrupt:
+MB_ISR lf439
;--------------------------------------
lf439:
inc nFrameNum+2
lda nFrameNum+2
cmp #50
bne .fnum_ok
lda #0
sta nFrameNum+2
inc nFrameNum+1
lda nFrameNum+1
cmp #60
bne .fnum_ok
lda #0
sta nFrameNum+1
inc nFrameNum+0
.fnum_ok:
;
+LDW RegIX, lf690 ; IX = &VoiceA
+LDW_INDIRECT RegHL, lf672 ; HL = AYREGS.PeriodA
jsr lf483
+LDW_INDIRECT RegHL, lf680
+LDW_INDIRECT lf672, RegHL ; AYREGS.PeriodA = (lf680)
+LDW_INDIRECT RegHL, lf674 ; HL = AYREGS.PeriodB
+LDW RegIX, lf6b3 ; IX = &VoiceB
jsr lf483
+LDW_INDIRECT RegHL, lf680
+LDW_INDIRECT lf674, RegHL ; AYREGS.PeriodB = (lf680)
+LDW_INDIRECT RegHL, lf676 ; HL = AYREGS.PeriodC
+LDW RegIX, lf6d6 ; IX = &VoiceC
jsr lf483
+LDW_INDIRECT RegHL, lf680
+LDW_INDIRECT lf676, RegHL ; AYREGS.PeriodC = (lf680)
jsr lf62e
;
lf46c:
; Copy [lf67f..lf672] -> AY registers
+MB_WriteAYRegs lf672
rts
;--------------------------------------
lf483:
+LDW_INDIRECT lf680, RegHL ; Init 'Tone period'
+LD_REG_INDIRECT_OFFSET RegA, RegIX, $10
; ora RegA ; Superfluous
+RET_Z
+DEC_INDIRECT_OFFSET RegIX, $11
+JP_NZ lf5dd
+LD_REG_IMM RegA, $14
+LD_INDIRECT_ABS lf49d_SMC+1, RegA ; Self mod'ing code
+LD_REG_INDIRECT_OFFSET RegH, RegIX, $13
+LD_REG_INDIRECT_OFFSET RegL, RegIX, $12
lf49c:
; +LD_REG_IMM RegA, $12 ; SMC-target
lf49d_SMC:
lda #$12
sta RegA
;
dec RegA
+LD_INDIRECT_ABS lf49d_SMC+1, RegA ; Self mod'ing code
+RET_Z
+LD_REG_INDIRECT RegA, RegHL ; Cmd
+INCW RegHL
+LD_REG_INDIRECT RegE, RegHL ; Param
+INCW RegHL
lda RegA
+JP_Z lf588
cmp #$09
+JP_C lf4f9 ; jp if a = {1..8}
cmp #$65
+JP_C lf583 ; jp if a = {09h..64h}
cmp #$7f
+JP_C lf504 ; jp if a = {65h..7Eh} (Diff)
cmp #$df
+JP_C lf578 ; jp if a = {7Fh..DEh} (Diff)
cmp #$e3
+JP_Z lf581
cmp #$e1
+JP_Z lf4ec
cmp #$e9
+JP_Z lf517
cmp #$e8
+JP_Z lf523
cmp #$ea
+JP_Z lf52f
cmp #$e2
+JP_Z lf55e
cmp #$e5
+JP_Z lf539
cmp #$e6
+JP_Z lf511
cmp #$f0
+JP_Z lf558
cmp #$ff
+JP_Z lf545
jmp lf49c
;--------------------------------------
lf4ec: ; Cmd_E1
+LD_INDIRECT_OFFSET_IMM RegIX, $10, $00
+LD_REG_INDIRECT_OFFSET RegH, RegIX, $1d ; HL = &AYREGS[VolX]
+LD_REG_INDIRECT_OFFSET RegL, RegIX, $1c
+LD_INDIRECT_IMM RegHL, $00
rts
;--------------------------------------
lf4f9: ; Cmd_01..08
+PUSH16 RegHL ; Diff
+PUSH16 RegIX
jsr lf399 ; Re-init
+POP16 RegIX ; Diff
+POP16 RegHL
jmp lf49c
;--------------------------------------
lf504: ; Cmd_66..7F (Diff)
sec ; CARRY OK
sbc #$66 ; A = [0..$19]
sta RegA ; New
+LD_INDIRECT_ABS lf678, RegA ; Noise
+LD_INDIRECT_OFFSET_IMM RegIX, $19, $01
+DECW RegHL
jmp lf49c
;--------------------------------------
lf511: ; Cmd_E6
+LD_INDIRECT_OFFSET RegIX, $18, RegE
jmp lf49c
;--------------------------------------
lf517: ; Cmd_E9
jsr lf426
+LD_INDIRECT_OFFSET RegIX, $0e, RegC
+LD_INDIRECT_OFFSET RegIX, $0f, RegB
jmp lf49c
;--------------------------------------
lf523: ; Cmd_E8
jsr lf426
+LD_INDIRECT_OFFSET RegIX, $0c, RegC
+LD_INDIRECT_OFFSET RegIX, $0d, RegB
jmp lf49c
;--------------------------------------
lf52f: ; Cmd_EA
jsr lf426
+LDW_INDIRECT lf68e, RegBC
jmp lf49c
;--------------------------------------
lf539: ; Cmd_E5
+LD_INDIRECT_OFFSET RegIX, $15, RegH
+LD_INDIRECT_OFFSET RegIX, $14, RegL
jsr lf415
jmp lf49c
;--------------------------------------
lf545: ; Cmd_FF
+LD_REG_INDIRECT_OFFSET RegH, RegIX, $15
+LD_REG_INDIRECT_OFFSET RegL, RegIX, $14
+LD_REG_INDIRECT RegA, RegHL
inc RegA
bne lf555
+LD_REG_INDIRECT_OFFSET RegH, RegIX, $17
+LD_REG_INDIRECT_OFFSET RegL, RegIX, $16
lf555:
jmp lf49c
;--------------------------------------
lf558: ; Cmd_F0
+LD_INDIRECT_OFFSET RegIX, $20, RegE
jmp lf49c
;--------------------------------------
lf55e: ; Cmd_E2
; Pseudo random number generator
+PUSH16 RegHL
; +LDW RegHL, $da52 ; SMC-target
lf560_SMC_l:
lda #<$da52 ; LSB
sta RegL
lf560_SMC_h:
lda #>$da52 ; MSB
sta RegH
+LD RegC, RegL
+LD RegB, RegH
+ADDW RegHL, RegHL
+ADDW RegHL, RegHL
+ADDW RegHL, RegBC
+ADDW RegHL, RegHL
+ADDW RegHL, RegHL
+ADDW RegHL, RegHL
+ADDW RegHL, RegBC
; +LDW_INDIRECT lf560, RegHL ; Self modifying code
lda RegL
sta lf560_SMC_l+1 ; Self modifying code
lda RegH
sta lf560_SMC_h+1 ; Self modifying code
;
+LD RegA, RegH
and RegE
sta RegA ; New
inc RegA
; +LD_INDIRECT_ABS lf582, RegA ; Self modifying code
lda RegA
sta lf582_SMC+1 ; Self modifying code
+POP16 RegHL
jmp lf49c
;--------------------------------------
lf578: ; Cmd_80..DF (Diff)
and #$7f ; A = [0..$5f]
sta RegA ; New
+DECW RegHL
+LD_REG_INDIRECT_OFFSET RegE, RegIX, $1f
jmp lf583
;--------------------------------------
lf581: ; Cmd_E3
; +LD_REG_IMM RegA, $1b ; SMC-target
lf582_SMC:
lda #$1b
sta RegA
;--------------------------------------
lf583: ; Cmd_09..64
clc ; CARRY OK
ldy #$18
lda RegA ; Req'd: lf578 jmp's with A=RegE
adc (RegIX),y
sta RegA ; Superfluous
sec ; CARRY possibly wrong ; Diff
sbc #$0c ; Diff
sta RegA ; New ; Diff
;--------------------------------------
lf588: ; Cmd_00
+LD_INDIRECT_OFFSET RegIX, $11, RegE
+LD_INDIRECT_OFFSET RegIX, $21, RegA
+LD_INDIRECT_OFFSET RegIX, $1f, RegE ; Diff
+LD_INDIRECT_OFFSET RegIX, $13, RegH ; Diff
+LD_INDIRECT_OFFSET RegIX, $12, RegL ; Diff
jsr lf61e
+LD_REG_INDIRECT_OFFSET RegH, RegIX, $1d ; HL = &AYREGS[VolX]
+LD_REG_INDIRECT_OFFSET RegL, RegIX, $1c
+LD_INDIRECT_IMM RegHL, $00 ; AYREGS[VolX] = $00
+PUSH16 RegIX
+POP16 RegDE ; DE = &VoiceX[0]
+LDW RegHL, $008
+ADDW RegHL, RegDE ; HL = &VoiceX[8]
+LDI
+LDI
+LDI
+LDI
+LDI
+LDI
+LDI
+LDI ; memcpy(&VoiceX[0], &VoiceX[8], 8)
+DEC_INDIRECT_OFFSET RegIX, $19
php ; New: Save flags
+LD_INDIRECT_OFFSET_IMM RegIX, $19, $00
+LD_REG_INDIRECT_OFFSET RegL, RegIX, $1a
plp ; New: Restore flags
bne lf5d1
+LDW_INDIRECT RegHL, $f68e
+LDW_INDIRECT lf686, RegHL
+LDW RegHL, $0000
+LDW_INDIRECT lf682, RegHL
lf5d1:
+LD_REG_INDIRECT_ABS RegA, lf679 ; Enable
ldy #$1b
and (RegIX),y
ora RegL
and #$3f
sta RegA ; New
+LD_INDIRECT_ABS lf679, RegA ; Enable
lf5dd:
jsr lf646
+LD_REG_INDIRECT_OFFSET RegH, RegIX, $1d
+LD_REG_INDIRECT_OFFSET RegL, RegIX, $1c
+LD_REG_INDIRECT RegA, RegHL
clc
lda RegA ; Superfluous
adc RegC
sta RegA ; Superfluous
sec ; CARRY OK
sbc #$80
sta RegA ; New
+LD_INDIRECT RegHL, RegA
+LDW_INDIRECT RegHL, lf680
+LD RegA, RegH
ora RegL
sta RegA ; New
+RET_Z
;
+LD_REG_INDIRECT_OFFSET RegA, RegIX, $20
; ora RegA ; Superfluous
bne lf60f
+INCW RegIX
+INCW RegIX
jsr lf646
Portamento:
+LDW_INDIRECT RegHL, lf680 ; HL = TonePeriod
+LD_REG_IMM RegB, $00
+ADDW RegHL, RegBC
+ADDW RegHL, RegBC ; Diff ; HL += 2*RegC
+LD_REG_IMM RegC, $80
+INVERT_CARRY
+SBCW RegHL, RegBC
+SBCW RegHL, RegBC ; Diff ; HL -= ($100 + C)
+LDW_INDIRECT lf680, RegHL ; TonePeriod = HL
rts
;--------------------------------------
lf60f:
+DEC_INDIRECT_OFFSET RegIX, $22
php ; New: Save flags
+LD_REG_INDIRECT_OFFSET RegA, RegIX, $21
plp ; New: Restore flags
beq lf61e
clc ; CARRY OK
ldy #$20
lda RegA ; Superfluous
adc (RegIX),y
sta RegA
+LD_INDIRECT_OFFSET_IMM RegIX, $22, $01
lf61e:
lda RegA
cmp #101 ; Tune#2 uses value of 100(!)
bcc .lt3
brk
.lt3
; lda RegA
; asl
; sta RegA ; Superfluous
; clc ; CARRY OK
; lda RegA
; adc #$00
; sta RegA
; +LD RegL, RegA
; lda RegA
; adc #$f7
; sta RegA
; sbc RegL ; CARRY possibly wrong
; +LD RegH, RegA
lda RegA
asl ; A = 2*RegA
clc
adc #<lf700 ; LSB
sta RegL
lda #0
adc #>lf700 ; MSB
sta RegH ; LDI src: RegHL
+LDW RegDE, lf680
+LDI
+LDI ; memcpy(&lf680, HL, 2) : Set new TonePeriod
rts
;--------------------------------------
lf62e:
+LDW RegIX, lf682
jsr lf646
+LDW RegHL, lf678 ; &(Noise period)
+LD_REG_INDIRECT RegA, RegHL
clc
lda RegA ; Superfluous
adc RegC
sta RegA ; Superfluous
sec ; CARRY OK
sbc #$80
sta RegA ; New
+LD_INDIRECT RegHL, RegA
cmp #$11
+RET_C
+INCW RegHL
+LD_REG_INDIRECT RegA, RegHL
ora #$38
sta RegA ; New
+LD_INDIRECT RegHL, RegA
rts
;--------------------------------------
lf646:
+PUSH16 RegIX
+POP16 RegHL
+LD_REG_INDIRECT_OFFSET RegD, RegIX, $05
+LD_REG_INDIRECT_OFFSET RegE, RegIX, $04
+INC_INDIRECT RegHL
+LD_REG_INDIRECT RegA, RegDE
+SUB_INDIRECT RegHL ; RegA -= (HL)
php ; New
+LD_REG_IMM RegC, $80
plp ; New
+RET_NZ
+LD_INDIRECT RegHL, RegA
+INCW RegDE
+LD_REG_INDIRECT RegA, RegDE
+LD RegC, RegA
+INCW RegDE
+INCW RegHL
+INC_INDIRECT RegHL
+LD_REG_INDIRECT RegA, RegDE
+SUB_INDIRECT RegHL
+RET_NZ
+LD_INDIRECT RegHL, RegA
+INCW RegDE
+LD_REG_INDIRECT RegA, RegDE
inc RegA
bne lf66b
+LD_REG_INDIRECT_OFFSET RegD, RegIX, $0d
+LD_REG_INDIRECT_OFFSET RegE, RegIX, $0c
lf66b:
+LD_INDIRECT_OFFSET RegIX, $05, RegD
+LD_INDIRECT_OFFSET RegIX, $04, RegE
rts
;------------------------------------------------------------------------------
; Skyfox MB detection routine:
SF_GetMBSlot:
; Pre:
; Post:
; Z = 0 (NE) : MB detected
; X = HI(MB base address)
; (MBBase) = MB slot address
;
jsr SF_Detect
.Loop: stx TmpL
jsr SF_Detect
cpx TmpL
bne .Loop
cpx #$C8
rts
;--------------------------------------
SF_Detect:
lda #0
sta MBBaseL
lda #$c1
sta MBBaseH
ldx #7
.SlotNext:
ldy #$00+SY6522_TIMER1L_COUNTER
jsr SF_GetTimerL
bne .SlotLoop
ldy #$80+SY6522_TIMER1L_COUNTER
jsr SF_GetTimerL
beq .SlotDone
.SlotLoop:
inc MBBaseH
dex
bne .SlotNext
.SlotDone:
ldx MBBaseH
rts
;--------------------------------------
SF_GetTimerL:
lda (MBBase),y
cmp MBBaseL
sbc (MBBase),y
cmp #$08
rts
;------------------------------------------------------------------------------
!zone data
ZPBlock: !fill ZPSize,0
Z80Block: !fill ZPSize,0
nMBBaseHi: !byte 0
;--------------------------------------
; Song Hi/Lo reg values:
SongTbl: !byte 01 ; 0: (AY: Title/In-game)
!byte 34 ; 1: (AY: Game over)
!byte 40 ; 2: (AY: Hall of fame)
!byte 00 ; 3: (Beeper: Title)
!byte 32 ; 4: (AY: SFX 01)
!byte 33 ; 5: (AY: SFX 02)
!byte 26 ; 6: (AY: SFX 03)
!byte 24 ; 7: (AY: SFX 04)
!byte 31 ; 8: (AY: SFX 05)
!byte 22 ; 9: (AY: SFX 06)
!byte 28 ; 10: (AY: SFX 07)
!byte 29 ; 11: (AY: SFX 08)
!byte 23 ; 12: (AY: SFX 09)
!byte 27 ; 13: (AY: SFX 10)
!byte 37 ; 14: (AY: SFX 11)
!byte 25 ; 15: (AY: SFX 12)
;--------------------------------------
; AY regs [0..$D]
AYRegValues:
lf672: !word 0 ; A period
lf674: !word 0 ; B period
lf676: !word 0 ; C period
lf678: !byte 0 ; Noise period
lf679: !byte 0 ; Enable
lf67a: !byte 0 ; A volume
lf67b: !byte 0 ; B volume
lf67c: !byte 0 ; C volume
lf67d: !word 0 ; Envelope period
lf67f: !byte 0 ; Envelope shape
;--------------------------------------
lf680: !word 0 ; Tone period
lf682: !word 0
!word 0
;--------------------------------------
lf686: !word 0
!word 0
!word 0
!word 0
lf68e: !word 0 ; Cmd_EA: Set to RegBC
;--------------------------------------
; Voice-A struct
lf690: !byte 0 ; $00
!byte 0 ; $01
!byte 0 ; $02
!byte 0 ; $03
!word 0 ; $04/05
!word 0 ; $06/07
!byte 0 ; $08
!byte 0 ; $09
!byte 0 ; $0a
!byte 0 ; $0b
!word 0 ; $0c/0d : Cmd_E8: Set to RegC/B
!word 0 ; $0e/0f : Cmd_E9: Set to RegC/B
lf6a0: !byte 0 ; $10 : Cmd_E1: Set to $00 : $00 = Tune complete
!byte 0 ; $11 : Cmd_00: Set to RegE
!word 0 ; $12/13 : Cmd_00: Set to RegL/H : Next Cmd & Param
!word 0 ; $14/15 : Cmd_E5: Set to RegL/H
!word 0 ; $16/17
!byte 0 ; $18 : Cmd_E6: Set to RegE
!byte 0 ; $19 : Cmd_66: Set to $01
!byte $08 ; $1a - 001000 - Disable A (Noise)
!byte $36 ; $1b - 110110 - Enable A (Noise & Tone)
!word lf67a ; $1c/1d - &VolA
!byte 0 ; $1e
!byte 0 ; $1f : Cmd_00: Set to RegE
!byte 0 ; $20 : Cmd_F0: Set to RegE
!byte 0 ; $21 : Cmd_00: Set to RegA
!byte 0 ; $22
;--------------------------------------
; Voice-B struct
lf6b3: !byte 0
!byte 0
!byte 0
!byte 0
!word 0
!word 0
!byte 0
!byte 0
!byte 0
!byte 0
!word 0
!word 0
lf6c3: !byte 0
!byte 0
!word 0
!word 0
!word 0
!byte 0
!byte 0
!byte $10 ; 010000 - Disable B (Noise)
!byte $2d ; 101101 - Enable B (Noise & Tone)
!word lf67b ; &VolB
!byte 0
!byte 0
!byte 0
!byte 0
!byte 0
;--------------------------------------
; Voice-C struct
lf6d6: !byte 0
!byte 0
!byte 0
!byte 0
!word 0
!word 0
!byte 0
!byte 0
!byte 0
!byte 0
!word 0
!word 0
lf6e6: !byte 0
!byte 0
!word 0
!word 0
!word 0
!byte 0
!byte 0
!byte $20 ; 100000 - Disable C (Noise)
!byte $1b ; 011011 - Enable C (Noise & Tone)
!word lf67c ; &VolC
!byte 0
!byte 0
!byte 0
!byte 0
!byte 0
;--------------------------------------
;lf6f9:
!byte $2A,$00,$00,$00,$00,$00,$00 ; Padding
;--------------------------------------
lf700:
; Table size = WORD[100]
; . Period for each note
; . ZX Spectrum's CLK for AY8912 = 1.77345MHz
; . Envelopes are not used, so no E-Periods to convert
!macro ZX2MB .period {
!word .period*10227/17734
}
+ZX2MB $0000
+ZX2MB $150C
+ZX2MB $13DD
+ZX2MB $12C0
+ZX2MB $11B2
+ZX2MB $10B4
+ZX2MB $0FC4
+ZX2MB $0EE2
+ZX2MB $0E0C
+ZX2MB $0D42
+ZX2MB $0C84
+ZX2MB $0BD0
+ZX2MB $0B26
+ZX2MB $0A86
+ZX2MB $09EF
+ZX2MB $0960
+ZX2MB $08D9
+ZX2MB $085A
+ZX2MB $07E2
+ZX2MB $0771
+ZX2MB $0706
+ZX2MB $06A1
+ZX2MB $0642
+ZX2MB $05E8
+ZX2MB $0593
+ZX2MB $0543
+ZX2MB $04F7
+ZX2MB $04B0
+ZX2MB $046D
+ZX2MB $042D
+ZX2MB $03F1
+ZX2MB $03B8
+ZX2MB $0383
+ZX2MB $0350
+ZX2MB $0321
+ZX2MB $02F4
+ZX2MB $02CA
+ZX2MB $02A1
+ZX2MB $027C
+ZX2MB $0258
+ZX2MB $0236
+ZX2MB $0217
+ZX2MB $01F9
+ZX2MB $01DC
+ZX2MB $01C1
+ZX2MB $01A8
+ZX2MB $0190
+ZX2MB $017A
+ZX2MB $0165
+ZX2MB $0151
+ZX2MB $013E
+ZX2MB $012C
+ZX2MB $011B
+ZX2MB $010B
+ZX2MB $00FC
+ZX2MB $00EE
+ZX2MB $00E1
+ZX2MB $00D4
+ZX2MB $00C8
+ZX2MB $00BD
+ZX2MB $00B2
+ZX2MB $00A8
+ZX2MB $009F
+ZX2MB $0096
+ZX2MB $008E
+ZX2MB $0086
+ZX2MB $007E
+ZX2MB $0077
+ZX2MB $0070
+ZX2MB $006A
+ZX2MB $0064
+ZX2MB $005E
+ZX2MB $0059
+ZX2MB $0054
+ZX2MB $004F
+ZX2MB $004B
+ZX2MB $0047
+ZX2MB $0043
+ZX2MB $003F
+ZX2MB $003C
+ZX2MB $0038
+ZX2MB $0035
+ZX2MB $0032
+ZX2MB $002F
+ZX2MB $002D
+ZX2MB $002A
+ZX2MB $0028
+ZX2MB $0025
+ZX2MB $0023
+ZX2MB $0021
+ZX2MB $0020
+ZX2MB $001E
+ZX2MB $001C
+ZX2MB $001B
+ZX2MB $0019
+ZX2MB $0018
+ZX2MB $0016
+ZX2MB $0015
+ZX2MB $0014
+ZX2MB $0000
;--------------------------------------
; Ref'ed by func @ f426
lf7c8:
; Table size = WORD[40]
!word $018C ; lf700 + $18c = lf88c (addr of music data)
!word $0190
!word $019A
!word $01A4
!word $01B4
!word $01BE
!word $01CB
!word $01D8
!word $01E5
!word $01F5
!word $01FF
!word $0209
!word $0213
!word $021D
!word $021E
!word $021F
!word $0220
!word $022A
!word $022B
!word $0241
!word $0242
!word $0246
!word $0250
!word $025D
!word $026A
!word $027A
!word $0281
!word $0288
!word $0295
!word $0299
!word $02A6
!word $02AD
!word $02BA
!word $02C1
!word $02C2
!word $02CC
!word $02E5
!word $02FE
!word $030E
!word $0000
;--------------------------------------
; Ref'ed by func @ f415
lf818:
; Table size = WORD[58]
!word $031A
!word $0439
!word $04E5
!word $04E8
!word $04F3
!word $0541
!word $0553
!word $0563
!word $05A5
!word $05E7
!word $05F2
!word $0613
!word $0628
!word $062D
!word $0643
!word $0662
!word $0662
!word $0686
!word $0687
!word $0000
;lf840:
!word $0000
;lf842:
!word $0000
!word $031F
!word $032B
!word $033A
!word $0346
!word $0352
!word $0361
!word $0370
!word $037C
!word $038C
!word $039B
!word $03A7
!word $03B8
!word $03C9
!word $03D7
!word $03E2
!word $03E2
!word $03F1
!word $03FF
!word $0403
!word $0415
!word $0420
!word $0000
;lf870:
!word $0000
!word $0000
!word $0000
!word $0000
;lf878:
!word $0000
!word $0686
!word $068F
!word $069C
!word $06A7
!word $06B2
!word $06BF
!word $06C8
!word $06D3
!word $06DC
;--------------------------------------
; Music data
;lf88c:
; Table size = BYTE[1385]
!byte $C8,$80,$C8,$FF,$01,$81,$0D,$09,$7F,$09,$C8,$80,$C8,$FF,$01,$8D
!byte $01,$01,$7F,$04,$01,$77,$01,$FF,$01,$8A,$01,$02,$82,$01,$02,$7F
!byte $07,$0C,$7F,$06,$C8,$80,$C8,$FF,$01,$81,$0A,$09,$7F,$06,$C8,$80
!byte $C8,$FF,$01,$8C,$01,$0A,$7F,$08,$14,$7F,$04,$C8,$80,$C8,$FF,$01
!byte $8D,$01,$02,$7F,$07,$0C,$7F,$06,$C8,$80,$C8,$FF,$01,$8D,$01,$01
!byte $7F,$0B,$09,$7F,$02,$C8,$80,$C8,$FF,$01,$8B,$01,$08,$7F,$01,$02
!byte $7F,$01,$07,$7F,$03,$16,$7F,$07,$FF,$01,$83,$03,$11,$7F,$05,$C8
!byte $80,$C8,$FF,$01,$89,$01,$01,$7D,$03,$C8,$80,$C8,$FF,$01,$77,$01
!byte $01,$83,$03,$C8,$80,$C8,$FF,$01,$81,$02,$02,$7F,$03,$03,$81,$01
!byte $FF,$FF,$FF,$FF,$01,$87,$03,$01,$79,$06,$01,$87,$03,$FF,$FF,$01
!byte $93,$01,$01,$6D,$01,$01,$7F,$02,$01,$81,$04,$01,$7F,$04,$01,$81
!byte $02,$C8,$80,$C8,$FF,$FF,$02,$7F,$C8,$FF,$01,$80,$01,$01,$B4,$01
!byte $C8,$80,$C8,$FF,$01,$80,$01,$01,$7E,$01,$02,$E3,$01,$C8,$80,$C8
!byte $FF,$01,$8A,$01,$01,$7E,$01,$02,$7F,$03,$C8,$80,$C8,$FF,$01,$85
!byte $03,$01,$71,$01,$01,$80,$01,$01,$8F,$01,$01,$7B,$03,$FF,$01,$85
!byte $03,$01,$71,$01,$FF,$01,$96,$01,$02,$79,$02,$FF,$01,$86,$01,$01
!byte $85,$01,$01,$7F,$03,$C8,$80,$C8,$FF,$01,$A1,$C8,$FF,$01,$85,$03
!byte $09,$7D,$04,$0E,$7F,$03,$C8,$80,$C8,$FF,$01,$84,$01,$01,$7F,$01
!byte $FF,$01,$8B,$01,$01,$7E,$01,$02,$7F,$03,$C8,$80,$C8,$FF,$01,$83
!byte $05,$01,$71,$01,$FF,$FF,$02,$8D,$01,$02,$67,$01,$C8,$80,$C8,$FF
!byte $01,$8F,$01,$08,$80,$01,$02,$7F,$01,$04,$7F,$01,$07,$7F,$02,$0C
!byte $7F,$04,$16,$7F,$07,$C8,$80,$C8,$FF,$01,$79,$01,$01,$8B,$01,$01
!byte $6F,$01,$01,$9B,$01,$01,$5B,$01,$01,$AF,$01,$01,$47,$01,$01,$C3
!byte $01,$FF,$01,$8F,$01,$01,$7A,$01,$01,$86,$01,$01,$7F,$09,$08,$7F
!byte $06,$FF,$01,$99,$03,$01,$79,$07,$0A,$7E,$C8,$FF,$00,$00,$F4,$63
!byte $E1,$FF,$FF,$04,$F4,$0F,$E8,$19,$E9,$18,$5D,$48,$EA,$16,$E1,$04
!byte $F4,$0F,$E8,$01,$F0,$3C,$EA,$05,$67,$24,$4F,$EA,$16,$E1,$04,$F4
!byte $0F,$E8,$1D,$E9,$1E,$4F,$4D,$EA,$16,$E1,$03,$F4,$0F,$E8,$06,$E9
!byte $19,$53,$0F,$EA,$16,$E1,$03,$F4,$0F,$E8,$07,$E9,$01,$EA,$01,$6C
!byte $5E,$10,$EA,$16,$E1,$03,$F4,$0F,$E8,$05,$E9,$1C,$EA,$27,$68,$4F
!byte $14,$EA,$16,$E1,$03,$F4,$0F,$E8,$15,$E9,$10,$43,$14,$EA,$16,$E1
!byte $03,$F4,$0F,$E2,$0F,$E8,$25,$E9,$26,$E6,$3E,$E3,$19,$EA,$16,$E1
!byte $04,$F4,$0F,$E8,$23,$E9,$24,$EA,$00,$73,$56,$63,$EA,$16,$E1,$03
!byte $F4,$0F,$E8,$12,$E9,$24,$61,$12,$EA,$16,$E1,$03,$F4,$0F,$E8,$1D
!byte $E9,$1A,$EA,$0B,$71,$39,$40,$E9,$0C,$EA,$16,$E1,$03,$F4,$0F,$E8
!byte $06,$E9,$22,$EA,$00,$73,$5E,$02,$5E,$10,$EA,$16,$E1,$01,$F4,$0F
!byte $02,$23,$00,$0C,$03,$23,$00,$12,$E5,$23,$E1,$F4,$0F,$E8,$01,$E9
!byte $1A,$5B,$12,$4F,$69,$E1,$04,$F4,$0F,$E8,$01,$E9,$20,$EA,$14,$70
!byte $49,$2A,$EA,$16,$E1,$04,$F4,$0F,$E8,$02,$E9,$1C,$58,$16,$D8,$D8
!byte $EA,$16,$E1,$E1,$00,$00,$00,$01,$F4,$0F,$02,$29,$03,$2A,$E8,$00
!byte $00,$32,$E5,$2A,$00,$6E,$E5,$2A,$FF,$E6,$30,$E8,$1E,$E9,$00,$E2
!byte $3F,$E3,$03,$FF,$E9,$14,$E6,$30,$E8,$04,$EA,$01,$E3,$1E,$EA,$00
!byte $E8,$08,$73,$E3,$46,$E8,$04,$EA,$01,$66,$E3,$3C,$FF,$01,$F4,$0F
!byte $03,$00,$02,$03,$E6,$00,$F0,$00,$E9,$0C,$E8,$03,$E5,$05,$E5,$05
!byte $E5,$05,$E5,$05,$03,$03,$02,$31,$E5,$04,$E5,$05,$03,$03,$02,$33
!byte $E5,$04,$E5,$06,$02,$0D,$03,$09,$E5,$07,$02,$0E,$E5,$08,$02,$34
!byte $03,$03,$E5,$04,$E6,$0A,$E5,$05,$03,$0C,$02,$35,$E6,$05,$E5,$04
!byte $E5,$05,$02,$00,$E5,$05,$02,$37,$E5,$06,$E5,$04,$03,$09,$02,$0D
!byte $E6,$00,$E5,$07,$02,$0E,$E5,$08,$03,$03,$02,$38,$E5,$04,$02,$32
!byte $E5,$05,$02,$34,$03,$03,$E5,$04,$02,$39,$E5,$05,$E5,$05,$E5,$05
!byte $02,$34,$E5,$05,$02,$39,$E5,$05,$E5,$05,$E5,$05,$02,$34,$E5,$05
!byte $03,$00,$E6,$09,$F0,$13,$E8,$1F,$02,$00,$E5,$05,$E5,$05,$E5,$06
!byte $E5,$06,$E5,$05,$E5,$05,$E5,$06,$E5,$06,$E6,$0E,$02,$36,$E5,$05
!byte $E5,$05,$E5,$05,$02,$00,$E5,$02,$FF,$00,$38,$FF,$E6,$1F,$E8,$17
!byte $F0,$0C,$E5,$04,$E5,$05,$FF,$EA,$16,$E9,$12,$66,$21,$07,$A1,$66
!byte $AD,$A1,$6B,$AB,$66,$9F,$66,$9F,$66,$AB,$66,$9D,$9D,$66,$A9,$9D
!byte $6B,$B5,$66,$9D,$66,$9C,$66,$A9,$66,$9D,$9D,$66,$A9,$9D,$6B,$A8
!byte $66,$9C,$66,$9C,$66,$A8,$66,$9A,$66,$9A,$66,$A6,$66,$9A,$6B,$B2
!byte $66,$9A,$66,$98,$66,$A6,$66,$9F,$9F,$66,$AB,$9F,$6B,$B7,$66,$9F
!byte $66,$9F,$66,$AB,$FF,$66,$15,$07,$66,$A1,$66,$AB,$66,$AD,$6B,$AD
!byte $66,$A1,$66,$9F,$66,$A1,$FF,$66,$1E,$07,$AA,$66,$9E,$A8,$6B,$B6
!byte $66,$AA,$66,$A8,$66,$AA,$FF,$66,$1F,$07,$66,$9F,$66,$AB,$66,$AB
!byte $6A,$AF,$66,$AF,$66,$A3,$66,$AF,$66,$A4,$66,$A4,$66,$9C,$66,$9F
!byte $6A,$B0,$66,$A4,$66,$9C,$66,$9F,$66,$A4,$66,$98,$66,$9C,$66,$9F
!byte $6A,$B0,$66,$A4,$66,$9C,$66,$9F,$66,$A3,$66,$A3,$66,$A8,$66,$AA
!byte $6A,$AF,$66,$A3,$66,$A8,$66,$AA,$FF,$66,$23,$07,$66,$A3,$66,$A7
!byte $66,$AF,$6A,$AD,$66,$AD,$66,$A1,$66,$AD,$66,$9C,$66,$9C,$66,$A8
!byte $66,$A8,$6A,$B4,$66,$A8,$66,$9C,$66,$A8,$66,$9A,$66,$9A,$66,$A6
!byte $66,$9A,$6A,$B2,$66,$9A,$66,$A6,$66,$9A,$66,$A5,$66,$A5,$66,$B1
!byte $66,$A5,$6A,$A3,$66,$A3,$66,$AF,$66,$A3,$FF,$E6,$1F,$E8,$17,$E9
!byte $00,$E5,$07,$E5,$08,$FF,$00,$07,$A1,$9C,$A4,$A6,$A8,$A6,$A4,$A3
!byte $21,$23,$15,$07,$97,$15,$0E,$1F,$07,$A1,$1F,$0E,$1D,$07,$9F,$1D
!byte $2A,$1C,$07,$9B,$1C,$1C,$FF,$00,$0E,$48,$07,$CA,$C8,$C5,$C0,$C7
!byte $45,$54,$43,$1C,$41,$2A,$40,$07,$BF,$40,$1C,$FF,$E8,$17,$E5,$04
!byte $FF,$E6,$18,$E8,$1B,$F0,$0C,$00,$0E,$23,$07,$A4,$A6,$A3,$A4,$A6
!byte $28,$54,$28,$1C,$28,$38,$FF,$E6,$18,$E8,$1B,$F0,$0C,$27,$0E,$27
!byte $07,$A8,$AA,$A7,$A8,$AA,$2C,$2A,$1C,$07,$9E,$20,$0E,$28,$07,$AA
!byte $2C,$0E,$AF,$2D,$38,$FF,$21,$0E,$A4,$A3,$A6,$24,$07,$A6,$A8,$A9
!byte $A8,$A6,$A4,$A3,$21,$0E,$95,$A3,$1F,$07,$21,$23,$1A,$07,$9D,$9C
!byte $95,$9A,$9D,$9C,$95,$9F,$9D,$9C,$95,$FF,$E8,$09,$E9,$0C,$E5,$0B
!byte $E5,$32,$E1,$E6,$24,$E8,$09,$E9,$0A,$23,$0E,$E9,$0C,$21,$46,$E1
!byte $E6,$24,$E8,$09,$E9,$0C,$E5,$0A,$E5,$32,$E1,$E6,$24,$E8,$1B,$F0
!byte $18,$E5,$0A,$23,$1C,$E1,$E6,$1D,$E8,$1F,$F0,$0C,$E5,$10,$E5,$05
!byte $E5,$05,$FF,$E6,$1D,$E8,$1F,$F0,$0C,$E5,$05,$FF,$E6,$1D,$E8,$09
!byte $F0,$0C,$E5,$10,$1A,$38,$E1,$E8,$1B,$F0,$18,$E5,$0B,$E5,$32,$E1
!byte $E8,$1F,$F0,$18,$00,$0E,$3C,$07,$BB,$BC,$00,$07,$B9,$00,$07,$FF
!byte $00,$1A,$18,$00,$0E,$3C,$07,$BB,$BC
;lfdf5: