* LISTING 2 PART A * DUO VOCE 10/20/87 * * AUTHOR: LAWREN SMITHLINE * DURL EQU 0 ;DURATION DURH EQU 1 V1S EQU 2 ;DELAY FOR VOICE 1 V2L EQU 3 ;COUNTER FOR VOICE 2 V2LS EQU 4 ;DELAY FOR VOICE 2 V2H EQU 5 V2HS EQU 6 TONE EQU $FE ;ADDRESS IN NOTE TABLE SPKR EQU $C030 ;SPEAKER TOGGLE ADDRESS ORG $D000 V1TST00 DEX ;COUNT DOWN FOR V1 BEQ V1CLK00 CPX #$FF ;IS V1 RESTING? BNE NREST00 INX BEQ YREST00 NREST00 CLC SEC YREST00 INC $FD BCS V2TST00 V1CLK00 STA SPKR STA SPKR ;DELAY BETWEEN SPKR CLC ;REFERENCES MAKES CLC ;CREST LONGER AND CLC ;VOLUME LOUDER LDX V1S ;RESET V1 COUNTER V2TST00 DEY ;DEC V2 COUNTER BNE RESTQ00 DEC V2H BMI V2CLK00 NOP BPL SCHLF00 GDDEC00 DEC $FD SCHLF00 CLC CLC UNDEC00 PHA PLA CLC BCC ENDCK00 RESTQ00 CPY #$FF BNE GDDEC00 LDA V2H BEQ SCHLF00 INY BEQ UNDEC00 V2CLK00 STA SPKR STA SPKR LDY V2LS LDA V2HS STA V2H CLC ENDCK00 DEC DURL ;DEC DURATION BNE GOBCK00 ;COUNTER DEC DURH AGAIN00 BNE V1TST00 ;IS NOTE FINISHED? JMP NXTTONE ;IF YES, THEN PLAY NEXT NOTE GOBCK00 NOP BNE AGAIN00 * * THE PREVIOUS SUBROUTINE IS REPEATED * 25 TIMES FOR EACH OF THE DIFFERENT * VOLUME LEVELS (5 FOR EACH VOICE) * ONLY THE FIRST AND LAST ARE LISTED * THE CODE IS CAREFULLY CONSTRUCTED * SO THAT THE LOOP TAKES THE SAME AMOUNT * OF TIME NO MATTER WHICH PATH IS TAKEN LST OFF LST ON V1TST44 DEX BEQ V1CLK44 CPX #$FF BNE NREST44 INX BEQ YREST44 NREST44 CLC SEC YREST44 INC $FD BCS V2TST44 V1CLK44 STA SPKR CLC CLC CLC LDX V1S STA SPKR V2TST44 DEY BNE RESTQ44 DEC V2H BMI V2CLK44 NOP BPL SCHLF44 GDDEC44 DEC $FD SCHLF44 CLC CLC UNDEC44 PHA PLA CLC BCC ENDCK44 RESTQ44 CPY #$FF BNE GDDEC44 LDA V2H BEQ SCHLF44 INY BEQ UNDEC44 V2CLK44 STA SPKR LDY V2LS LDA V2HS STA V2H CLC STA SPKR ENDCK44 DEC DURL BNE GOBCK44 DEC DURH AGAIN44 BNE V1TST44 JMP NXTTONE GOBCK44 NOP BNE AGAIN44 * * READ NEXT NOTE FROM (TONE) * IF CTRL-C WAS PRESSED, THEN * DON'T PLAY THE NOTE; JUST GO * ON TO THE NEXT ONE. CHECK FOR * END OF SONG. NXTTONE LDY #$0 STY V2H STY V2HS LDA (TONE),Y STA DURL INY LDA (TONE),Y STA DURH INY LDA (TONE),Y TAX INY LDA (TONE),Y STA V1S INY LDA (TONE),Y STA V2L INY LDA (TONE),Y STA V2LS INY LDA (TONE),Y LSR A ROL V2H LSR A ROL V2HS ASL A STA JUMP2+1 LDA TONE ADC #$7 STA TONE BCC SAMEPG INC TONE+1 JUMP LDY V2L LDA $C000 CMP #$83 BEQ QEXIT PHA PLA PHA PLA JUMP2 JMP (TABLE) SAMEPG CLC BCC JUMP QEXIT LDA JUMP2+1 CMP #$7E BNE NXTTONE EXIT LDA $C010 RTS * DS $55 * TABLE DW V1TST00 DW V1TST01 DW V1TST02 DW V1TST03 DW V1TST04 DW V1TST10 DW V1TST11 DW V1TST12 DW V1TST13 DW V1TST14 DW V1TST20 DW V1TST21 DW V1TST22 DW V1TST23 DW V1TST24 DW V1TST30 DW V1TST31 DW V1TST32 DW V1TST33 DW V1TST34 DW V1TST40 DW V1TST41 DW V1TST42 DW V1TST43 DW V1TST44 DS 76 DW EXIT * ORG $300 STA $C083 STA $C083 JSR NXTTONE STA $C081 RTS LST OFF