.PREL .IDENT MUSIC .INSERT HVG.LIB .INSERT MACRO.LIB .INSERT MUSIC.LIB .INSERT BBEQU.ASM .RELOC ; DEVICE VARIABLE TO PLAY NOTE WITHOUT PRINTING PUTMU:: TSTC '=',LQWHAT RSTEXP MOV A,L CALL PNOTE# RSTFIN LQWHAT: JMP QWHAT# ; SUBROUTINE TO PLAY A NOTE PNOTLA:: PUSH H PUSH D PUSH PSW MOV H,A ; WAIT FOR PREVIOUS PARAMETERS TO BE EATEN PRWAIT: LDA NEWTMR# ANA A JRNZ PRWAIT ; LOOP MOV A,H CPI 63H ; DIVIDE? JRZ PNOTDV CPI 62H ; MULTIPLY? JRZ PNOTML CPI '+' JRZ PNOTPL CPI '-' JRZ PNOTMN CPI '0' JRZ PNOTZ LXI H,NOTES-CR HOOKIN: INDEXB INR A ; CLICK? JRZ PNOTCL INR A ; AINSWORTH NUMBA? JRZ PNOTNO DCR A DCR A STA MUZTON# LDA DEVTEM# STA NEWTMR# PNOTCL: XRA A PSHARP: STA SHARPF# PNOTC1: POP PSW POP D POP H RET PNOTDV: MVI A,OA1 PNOTD1: STA MUZMO# JMPR PNOTC1 PNOTML: MVI A,OA3 JMPR PNOTD1 PNOTPL: MVI A,1 .BYTE 11H ; OPCODE TO MUNCH NEXT TWO BYTES INTO DE PNOTMN: MVI A,2 JMPR PSHARP PNOTZ: LXI H,MUZTMR# LDA DEVTEM# DI ADD M MOV M,A EI JMPR PNOTC1 ; PLAY AINSWORTH NOTE PNOTNO: LDA SHARPF# ; RESTORE CHARACTER INDEXW 1 .WORD DICKY XCHG POP PSW PUSH PSW SUI '1' JMPR HOOKIN ; MUSIC TABLES DICKY: .WORD MUZNOR .WORD MUZMAX .WORD MUZMIN MUZMIN: .BYTE B1 .BYTE CS2 .BYTE DS2 .BYTE E2 .BYTE FS2 .BYTE GS2 .BYTE AS2 MUZNOR: .BYTE C2 .BYTE D2 .BYTE E2 .BYTE F2 .BYTE G2 .BYTE A2 .BYTE B2 ; TONE GENERATION TABLE - ORDERED BY ASCII CHARACTER CLICK == 0FFH NUMBA == 0FEH NOTES:: .BYTE CLICK ; CR ; IRRELEVANT STUFF TO EAT TABLE SPACE .WORD 0,0,0,0,0 MUZMAX: .BYTE CS2 .BYTE DS2 .BYTE F2 .BYTE FS2 .BYTE GS2 .BYTE AS2 .BYTE C3 ; AND THE TABLE CONTINUES .BYTE CLICK .BYTE 0 .BYTE A0 .BYTE AS0 .BYTE B0 .BYTE C1 .BYTE CS1 .BYTE D1 .BYTE DS1 .BYTE E1 .BYTE F1 .BYTE FS1 .BYTE CLICK .BYTE GS1 .BYTE CLICK .BYTE AS1 .BYTE B1 .BYTE CLICK .BYTE NUMBA .BYTE NUMBA .BYTE NUMBA .BYTE NUMBA .BYTE NUMBA .BYTE NUMBA .BYTE NUMBA .BYTE C3 .BYTE CS3 .BYTE D3 .BYTE DS3 .BYTE E3 .BYTE F3 .BYTE FS3 .BYTE G3 .BYTE GS3 .BYTE A3 .BYTE AS3 .BYTE B3 .BYTE C4 .BYTE CS4 .BYTE D4 .BYTE DS4 .BYTE E4 .BYTE F4 .BYTE FS4 .BYTE G4 .BYTE GS4 .BYTE A4 .BYTE C5 .BYTE CS5 .BYTE DS5 .BYTE F5 .BYTE G5 .BYTE A5 .BYTE C6 .BYTE DS6 .BYTE G6 .BYTE C7 .BYTE G7 .BYTE B1 .BYTE C2 .BYTE CS2 .BYTE D2 .BYTE DS2 .BYTE E2 .BYTE F2 .BYTE FS2 .BYTE G2 .BYTE CLICK .BYTE CLICK .END