;/*************************************************************************** ; * Copyright (C) 1979-2015 by Paul Lutus * ; * http://arachnoid.com/administration * ; * * ; * This program is free software; you can redistribute it and/or modify * ; * it under the terms of the GNU General Public License as published by * ; * the Free Software Foundation; either version 2 of the License, or * ; * (at your option) any later version. * ; * * ; * This program is distributed in the hope that it will be useful, * ; * but WITHOUT ANY WARRANTY; without even the implied warranty of * ; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * ; * GNU General Public License for more details. * ; * * ; * You should have received a copy of the GNU General Public License * ; * along with this program; if not, write to the * ; * Free Software Foundation, Inc., * ; * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ; ***************************************************************************/ ; ;/* Electric Duet Player Routine circa 1980 */ ; ; ;$0900> A9 01: LDA #$01 ; 2 *!* ;$0902> 85 09: STA $09 ; 3 ;$0904> 85 1D: STA $1D ; 3 ;$0906> 48: PHA ; 3 ;$0907> 48: PHA ; 3 ;$0908> 48: PHA ; 3 ;$0909> D0 15: BNE $0920 ; 4 *!* ;$090B> C8: INY ; 2 ;$090C> B1 1E: LDA ($1E),Y ; 5 *!* ;$090E> 85 09: STA $09 ; 3 ;$0910> C8: INY ; 2 ;$0911> B1 1E: LDA ($1E),Y ; 5 *!* ;$0913> 85 1D: STA $1D ; 3 ;$0915> A5 1E: LDA $1E ; 3 *!* ;$0917> 18: CLC ; 2 ;$0918> 69 03: ADC #$03 ; 2 *!* ;$091A> 85 1E: STA $1E ; 3 ;$091C> 90 02: BCC $0920 ; 4 *!* ;$091E> E6 1F: INC $1F ; 5 ;$0920> A0 00: LDY #$00 ; 2 *!* ;$0922> B1 1E: LDA ($1E),Y ; 5 *!* ;$0924> C9 01: CMP #$01 ; 2 ;$0926> F0 E3: BEQ $090B ; 4 *!* ;$0928> B0 0D: BCS $0937 ; 4 *!* ;$092A> 68: PLA ; 4 ;$092B> 68: PLA ; 4 ;$092C> 68: PLA ; 4 ;$092D> A2 49: LDX #$49 ; 2 *!* ;$092F> C8: INY ; 2 ;$0930> B1 1E: LDA ($1E),Y ; 5 *!* ;$0932> D0 02: BNE $0936 ; 4 *!* ;$0934> A2 C9: LDX #$c9 ; 2 *!* ;$0936> 60: RTS ; 6 ;$0937> 85 08: STA $08 ; 3 ;$0939> 20 2D09: JSR $092D ; 6 ;$093C> 8E 8309: STX $0983 ; 4 ;$093F> 85 06: STA $06 ; 3 ;$0941> A6 09: LDX $09 ; 3 *!* ;$0943> 4A: LSR A ; 2 ;$0944> CA: DEX ; 2 ;$0945> D0 FC: BNE $0943 ; 4 *!* ;$0947> 8D 7C09: STA $097C ; 4 ;$094A> 20 2D09: JSR $092D ; 6 ;$094D> 8E BB09: STX $09BB ; 4 ;$0950> 85 07: STA $07 ; 3 ;$0952> A6 1D: LDX $1D ; 3 *!* ;$0954> 4A: LSR A ; 2 ;$0955> CA: DEX ; 2 ;$0956> D0 FC: BNE $0954 ; 4 *!* ;$0958> 8D B409: STA $09B4 ; 4 ;$095B> 68: PLA ; 4 ;$095C> A8: TAY ; 2 ;$095D> 68: PLA ; 4 ;$095E> AA: TAX ; 2 ;$095F> 68: PLA ; 4 ;$0960> D0 03: BNE $0965 ; 4 *!* ;$0962> 2C 30C0: BIT $C030 ; 4 ;$0965> C9 00: CMP #$00 ; 2 ;$0967> 30 03: BMI $096C ; 4 *!* ;$0969> EA: NOP ; 2 ;$096A> 10 03: BPL $096F ; 4 *!* ;$096C> 2C 30C0: BIT $C030 ; 4 ;$096F> 85 4E: STA $4E ; 3 ;$0971> 2C 00C0: BIT $C000 ; 4 ;$0974> 30 C0: BMI $0936 ; 4 *!* ;$0976> 88: DEY ; 2 ;$0977> D0 02: BNE $097B ; 4 *!* ;$0979> F0 06: BEQ $0981 ; 4 *!* ;$097B> C0 00: CPY #$00 ; 2 ;$097D> F0 04: BEQ $0983 ; 4 *!* ;$097F> D0 04: BNE $0985 ; 4 *!* ;$0981> A4 06: LDY $06 ; 3 *!* ;$0983> 49 40: EOR #$40 ; 2 *!* ;$0985> 24 4E: BIT $4E ; 3 ;$0987> 50 07: BVC $0990 ; 4 *!* ;$0989> 70 00: BVS $098B ; 4 *!* ;$098B> 10 09: BPL $0996 ; 4 *!* ;$098D> EA: NOP ; 2 ;$098E> 30 09: BMI $0999 ; 4 *!* ;$0990> EA: NOP ; 2 ;$0991> 30 03: BMI $0996 ; 4 *!* ;$0993> EA: NOP ; 2 ;$0994> 10 03: BPL $0999 ; 4 *!* ;$0996> CD 30C0: CMP $C030 ; 4 ;$0999> C6 4F: DEC $4F ; 5 ;$099B> D0 11: BNE $09AE ; 4 *!* ;$099D> C6 08: DEC $08 ; 5 ;$099F> D0 0D: BNE $09AE ; 4 *!* ;$09A1> 50 03: BVC $09A6 ; 4 *!* ;$09A3> 2C 30C0: BIT $C030 ; 4 ;$09A6> 48: PHA ; 3 ;$09A7> 8A: TXA ; 2 ;$09A8> 48: PHA ; 3 ;$09A9> 98: TYA ; 2 ;$09AA> 48: PHA ; 3 ;$09AB> 4C 1509: JMP $0915 ; 3 ;$09AE> CA: DEX ; 2 ;$09AF> D0 02: BNE $09B3 ; 4 *!* ;$09B1> F0 06: BEQ $09B9 ; 4 *!* ;$09B3> E0 00: CPX #$00 ; 2 ;$09B5> F0 04: BEQ $09BB ; 4 *!* ;$09B7> D0 04: BNE $09BD ; 4 *!* ;$09B9> A6 07: LDX $07 ; 3 *!* ;$09BB> 49 80: EOR #$80 ; 2 *!* ;$09BD> 70 A3: BVS $0962 ; 4 *!* ;$09BF> EA: NOP ; 2 ;$09C0> 50 A3: BVC $0965 ; 4 *!* ; ;------------------------------------------------------------------------------ ; ElectricDuet ; play 2-voice music in Electric Duet format ; ; in: $1E/$1F points to music data ; $EE/$EF points to 0-terminated list of keys that will terminate ; out: all flags and registers clobbered ; will exit when it finishes playing (music data is 0-0-0 terminated) ; will also exit on keypress, but only if it appears in the ($EE) list ;------------------------------------------------------------------------------ !align $FF,0,0 ; align to page (essential) ElectricDuet ED0900 LDA #$01 ; 2 *!* ED0902 STA $09 ; 3 ED0904 STA $1D ; 3 ED0906 PHA ; 3 ED0907 PHA ; 3 ED0908 PHA ; 3 ED0909 BNE ED0920 ; 4 *!* ED090B INY ; 2 ED090C LDA ($1E),Y ; 5 *!* ED090E STA $09 ; 3 ED0910 INY ; 2 ED0911 LDA ($1E),Y ; 5 *!* ED0913 STA $1D ; 3 ED0915 LDA $1E ; 3 *!* ED0917 CLC ; 2 ED0918 ADC #$03 ; 2 *!* ED091A STA $1E ; 3 ED091C BCC ED0920 ; 4 *!* ED091E INC $1F ; 5 ED0920 LDY #$00 ; 2 *!* ED0922 LDA ($1E),Y ; 5 *!* ED0924 CMP #$01 ; 2 ED0926 BEQ ED090B ; 4 *!* ED0928 BCS ED0937 ; 4 *!* ED092A PLA ; 4 ED092B PLA ; 4 ED092C PLA ; 4 ED092D LDX #$49 ; 2 *!* ED092F INY ; 2 ED0930 LDA ($1E),Y ; 5 *!* ED0932 BNE ED0936 ; 4 *!* ED0934 LDX #$c9 ; 2 *!* ED0936 RTS ; 6 ED0937 STA $08 ; 3 ED0939 JSR ED092D ; 6 ED093C STX ED0983 ; 4 ED093F STA $06 ; 3 ED0941 LDX $09 ; 3 *!* ED0943 LSR ; 2 ED0944 DEX ; 2 ED0945 BNE ED0943 ; 4 *!* ED0947 STA ED097B+1 ; 4 ED094A JSR ED092D ; 6 ED094D STX ED09BB ; 4 ED0950 STA $07 ; 3 ED0952 LDX $1D ; 3 *!* ED0954 LSR ; 2 ED0955 DEX ; 2 ED0956 BNE ED0954 ; 4 *!* ED0958 STA ED09B3+1 ; 4 ED095B PLA ; 4 ED095C TAY ; 2 ED095D PLA ; 4 ED095E TAX ; 2 ED095F PLA ; 4 ED0960 BNE ED0965 ; 4 *!* ED0962 BIT $C030 ; 4 ED0965 CMP #$00 ; 2 ED0967 BMI ED096C ; 4 *!* ED0969 NOP ; 2 ED096A BPL ED096F ; 4 *!* ED096C BIT $C030 ; 4 ED096F STA $4E ; 3 ED0971 BIT $C000 ; 4 ED0974 BMI EDCHECKKEY ; 4 *!* ED0976 DEY ; 2 ED0977 BNE ED097B ; 4 *!* ED0979 BEQ ED0981 ; 4 *!* ED097B CPY #$00 ; 2 ED097D BEQ ED0983 ; 4 *!* ED097F BNE ED0985 ; 4 *!* ED0981 LDY $06 ; 3 *!* ED0983 EOR #$40 ; 2 *!* ED0985 BIT $4E ; 3 ED0987 BVC ED0990 ; 4 *!* ED0989 BVS ED098B ; 4 *!* ED098B BPL ED0996 ; 4 *!* ED098D NOP ; 2 ED098E BMI ED0999 ; 4 *!* ED0990 NOP ; 2 ED0991 BMI ED0996 ; 4 *!* ED0993 NOP ; 2 ED0994 BPL ED0999 ; 4 *!* ED0996 CMP $C030 ; 4 ED0999 DEC $4F ; 5 ED099B BNE ED09AE ; 4 *!* ED099D DEC $08 ; 5 ED099F BNE ED09AE ; 4 *!* ED09A1 BVC ED09A6 ; 4 *!* ED09A3 BIT $C030 ; 4 ED09A6 PHA ; 3 ED09A7 TXA ; 2 ED09A8 PHA ; 3 ED09A9 TYA ; 2 ED09AA PHA ; 3 ED09AB JMP ED0915 ; 3 ED09AE DEX ; 2 ED09AF BNE ED09B3 ; 4 *!* ED09B1 BEQ ED09B9 ; 4 *!* ED09B3 CPX #$00 ; 2 ED09B5 BEQ ED09BB ; 4 *!* ED09B7 BNE ED09BD ; 4 *!* ED09B9 LDX $07 ; 3 *!* ED09BB EOR #$80 ; 2 *!* ED09BD BVS ED0962 ; 4 *!* ED09BF NOP ; 2 ED09C0 BVC ED0965 ; 4 *!* EDCHECKKEY php pha tya pha ldy #0 EDCHECK lda ($EE), y beq EDCONTINUE bpl EDEXIT iny cmp $C000 bne EDCHECK EDEXIT pla pla plp rts EDCONTINUE bit $C010 pla tay pla plp jmp ED0976