Listing of file='SOUND2.MAC;04' on disk='vmedia/asm_utility_routines-sideB-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; SOUNDWARE ROUTINE USING TIMER #2 ; ; BECAUSE THE SOUNDS ARE INTERRUPT DRIVEN, THE MAIN ; PROGRAM CAN CONTINUE EXECUTING. ; ; VALUES ON ENTRY: ; THE PUBLIC VARIABLES BELOW MUST BE INITIALISED FOR ; THE REQUIRED SOUND. ; ; RETURNS: ; NOTHING. FINFLG IS SET WHEN THE SOUND IS FINISHED. ; ; DESTROYS: ; ALL REGISTERS ; THE PUBLIC VARIABLES ARE ALSO DESTROYED AND MUST ; BE RELOADED BEFORE EACH CALL. (DEFAULT IS 'PING') ; ENTRY SOUND PUBLIC PITCH,DURN,NSTEPS,STEP1,STEP2 PUBLIC FINFLG EXTRN SAVE CMDREG EQU 04 TM2INT EQU 81C8H TIMER2 EQU 10 SOUND: MVI A,8 ;MASK FOR 5501 BREAK BIT STA MASK MVI A,0C3H ;SETUP JUMP TO INTERRUPT ROUTINE LXI H,PLAY STA TM2INT ; FOR TIMER #2 SHLD TM2INT+1 LDA STEP1 MOV B,A LDA STEP2 ORA A ;MAKE STEP2 = STEP1 IF IT IS ZERO JNZ OVER MOV A,B STA STEP2 OVER: XRA A ;CLEAR THE "FINISHED" FLAG STA FINFLG LHLD DURN ;MAKE COPIES OF PITCH AND DURN SHLD DURSAV LHLD PITCH SHLD PITSAV LDA MASK ;SET BREAK BIT IN 5501 OUT CMDREG MOV A,L ;START TIMER #2 OUT TIMER2 ; AND RETURN TO MAIN PROGRAM --- EI ; EVERYTHING WORKS BY INTERRUPTS NOW RET ; ; TIMER #2 INTERRUPT ROUTINE ; PLAY: CALL SAVE ;SAVE REGISTERS LHLD PITCH ;CHECK PITCH EXPIRED ... DCR H SHLD PITCH JNZ RETIME ;... NO, KEEP TICKING AWAY LHLD PITSAV ;RESTORE THE PITCH COUNTERS SHLD PITCH LDA MASK XRI 02 ;TOGGLE THE BREAK BIT STA MASK OUT CMDREG ;SEND IT TO THE 5501 CHIP LHLD DURN ;CHECK DURATION EXPIRED DCX H SHLD DURN MOV A,H ORA L LHLD PITCH JNZ RETIME ;AND REPEAT IF NOT LHLD DURSAV ;RESET THE DURATION SHLD DURN LDA NSTEPS ORA A ;SEE IF ANY STEPS LEFT TO GO JZ FINISH DCR A STA NSTEPS LHLD PITCH LDA STEP1 ;CHANGE THE PITCH MOV B,A ADD L MOV L,A SHLD PITCH SHLD PITSAV LDA STEP2 ;SWAP STEP1 AND STEP2 FOR NEXT TIME STA STEP1 MOV A,B STA STEP2 RETIME: MOV A,L ;RESTART THE TIMER FOR NEXT ONE OUT TIMER2 RET FINISH: STA STEP2 ;STORE ZEROS (TRICKY!) STA STEP1 STA NSTEPS LXI H,15 ;SET UP FOR A 'PING' SOUND SHLD DURN LXI H,0132H SHLD PITCH MVI A,0FFH ;SET THE "FINISHED" FLAG STA FINFLG RET ; ; SOUND PARAMETERS ; PITCH: DB 50,1 ;DEFAULTS FOR 'PING' SOUND PITSAV: DB 50,1 DURN: DB 15,0 DURSAV: DB 15,0 NSTEPS: DB 0 STEP1: DB 0 STEP2: DB 0 MASK: DB 8 FINFLG: DB 0 END