Listing of file='TIM2VC.MAC;04' on disk='vmedia/taylor_8-sector.ccvf'
;******************************************************** ;* * ;* TIMER2 ROUTINE * ;* * ;* LINKED TO WHEN THE TIMER 2 GOES OFF, THIS * ;* ROUTINE MAINTAINS THE MASTER COUNTER (0-255) * ;* AND CALLS THE VOICE ROUTINE, WHICH MANIPULATES * ;* THE AY-3-8910 CHIP REGISTERS ACCORDING TO THE * ;* CALLER'S PARAMETERS IN THE "VOICE" TABLES. * ;* * ;******************************************************** ; ENTRY TIM2RTN EXTRN VOICE1,VOICE2,VOICE3 EXTRN COUNTER,TIMEVALUE EXTRN MIXERVALUE TIM2RTN: PUSH PSW PUSH B PUSH D PUSH H LDA COUNTER INR A ;INCREMENT MAIN COUNTER STA COUNTER MOV B,A ;SAVE IT JZ EXIT ;256 TIMES ONLY LDA TIMEVALUE OUT 10 ;RESTART TIMER DI ;DON'T GET INTERRUPTED MOV A,B LXI H,VOICE1 CALL SOUNDER ;DO IT FOR FIRST VOICE LXI H,VOICE2 CALL SOUNDER ;2ND LXI H,VOICE3 CALL SOUNDER ;3RD EI ;INTERRUPTS OK NOW EXIT: POP H POP D POP B POP PSW RET PAGE ;******************************************************** ;* * ;* VOICE ROUTINE * ;* * ;* THIS ROUTINE TURNS THE VOICE TABLE INTO * ;* SOUND IF THE MAIN COUNTER IS WITHIN LIMITS. * ;* * ;******************************************************** ; SOUNDER: PUSH PSW PUSH H ;SAVE BEG OF TABLE ADDR INX H INX H ;STEP OVER INITIAL VALUES CMP M ;COMPARE COUNTER TO START VAL JC ELSE ;COUNTER LESS INX H ;COMPARE TO STOP VALUE CMP M JNC ELSE ;COUNTER >= INX H MOV E,M INX H MOV D,M ;INCREMENT IN D,E INX H MOV C,M INX H MOV B,M ;COARSE, FINE VALS IN B,C INX H MOV A,M ;FINE TONE REG OUT 48 MOV A,C ;FINE TONE OUT 49 ;AND OUT MOV A,M INR A ;COARSE TONE REG OUT 48 MOV A,B ;COARSE TONE OUT 49 ;AND OUT XCHG DAD B ;H,L NOW = CRS/FINE + INCR XCHG ;D,E NOW DCX H DCX H MOV M,E INX H MOV M,D ;RESTORE ADJUSTED TONE VALUES INX H ;FOR NEXT TIME INX H MOV A,M ;NOISE VALUE TO A CPI 0 JZ NONOISE MOV B,A MVI A,6 ;NOISE REG IS 6 OUT 48 MOV A,B OUT 49 ;OUTPUT NOISE VALUE NONOISE: INX H MOV B,M ;VOLUME VALUE INX H MOV A,M ;VOLUME REGISTER OUT 48 MOV A,B OUT 49 ;OUTPUT VOLUME VALUE INX H MOV A,M ;MIXER VALUE MASK XRI 0FFH ;LET CALLER MASK BE ACTIVE HI MOV B,A LDA MIXERVALUE ANA B ;AND OUR VALUE INTO MASK STA MIXERVALUE ;AND STORE IT MOV B,A MVI A,7 OUT 48 ;PREPARE TO OUTPUT MIXER VALU MOV A,B OUT 49 ;SOUND NOW ALL DONE. THIS VOICE'S REGS ARE ALL SET. TABLES ARE ;READY FOR NEXT TIME. POP H POP PSW RET ELSE: POP H LXI D,11 ;OFFSET TO VOLUME REG IN VOICE TBL DAD D MOV A,M ;VOL REG INTO A OUT 48 XRA A ;0 --> A OUT 49 ;SHUT DOWN THIS VOICE POP PSW RET END