;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 ; ; 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+1 ; MSB +LD RegA, RegE asl ; =lsl tay clc lda (TmpHL),y ; LSB 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+1 ; MSB +LD RegA, RegE asl ; =lsl tay clc lda (TmpHL),y ; LSB 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 ; 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: