Listing of file='SNDCHP.MAC;01' on disk='vmedia/asm_utility_routines-sideA-sector.ccvf'
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; SOUNDWARE ROUTINE (A LA CAP ELECTRONICS) ; ; MODIFIED TO TREAT STEPS AS 16-BIT VALUES ; I.E. ALLOWS A MUCH LARGER DYNAMIC RANGE. ; ; COMPATIBLE WITH THE AY-3-8910 SOUND CHIP ALSO. ; ; ; VALUES ON ENTRY: ; THE PUBLIC VARIABLES BELOW MUST BE INITIALISED FOR ; THE REQUIRED SOUND. ; ; RETURNS: ; NOTHING ; ; DESTROYS: ; ALL REGISTERS ; THE PUBLIC VARIABLES ARE ALSO DESTROYED AND MUST ; BE RELOADED BEFORE EACH CALL. (DEFAULT IS 'PING') ; SNDADR EQU 30H ;ADDRESS REGISTER ON AY-3-8910, ; AND READ FROM CHIP SNDDAT EQU 31H ;LOAD (WRITE) DATA INTO AY-3-8910 ENTRY SOUND PUBLIC PITCH,DURN,NSTEPS,STEP1,STEP2 SOUND: MVI C,8 ;MASK FOR 5501 DI ;INTERRUPTS MUST BE DISABLED ; ;*** CODE FOR THE SOUND CHIP (INDICATED BY ***) ; MVI A,8 OUT SNDADR XRA A OUT SNDDAT MVI A,7 OUT SNDADR IN SNDADR ORI 62 OUT SNDDAT ;*** LDA STEP1 MOV B,A LDA STEP2 ORA A ;MAKE STEP2 = STEP1 IF IT IS ZERO JNZ LOOP MOV A,B STA STEP2 ;*** CALL SND ;*** LOOP: LHLD DURN ;OUTER LOOP - DURATION AND NO. STEPS XCHG SND10: LHLD PITCH WAIT: DCX H ;INNER LOOP - GENERATE THE SOUND MOV A,H ORA L ;CHECK HL (PITCH) EMPTY JNZ WAIT ;AND WAIT IF NOT MOV A,C XRI 02 ;TOGGLE THE BREAK BIT OUT 04 ;SEND IT TO THE 5501 CHIP MOV C,A DCX D MOV A,D ORA E ;CHECK IF DURATION EXPIRED JNZ SND10 ;END OF INNER LOOP FOR ONE STEP LDA NSTEPS ORA A ;SEE IF ANY STEPS LEFT TO GO JZ FINISH DCR A STA NSTEPS PUSH B ;CALCULATE NEW PITCH PUSH H MOV C,B ;PITCH IS A 16-BIT VALUE, SO MAKE THE MVI B,0 ; STEP INTO 16 BITS ALSO MOV A,C ORA A JP SND20 MVI B,0FFH ;SIGN EXTEND THE STEP SIZE IF NEEDED SND20: LHLD PITCH DAD B SHLD PITCH POP H POP B ;*** CALL SND ;*** LDA STEP2 ;SWAP STEP1 AND STEP2 MOV H,A MOV A,B STA STEP2 MOV B,H JMP LOOP ;REPEAT MAIN OUTER LOOP FINISH: ; ;*** SOUND CHIP MOD ; MVI A,8 OUT SNDADR XRA A OUT SNDDAT ;*** STA STEP2 ;STORE ZEROS (TRICKY!) STA STEP1 STA NSTEPS LXI H,000FH ;SET UP FOR A 'PING' SOUND SHLD DURN LXI H,0032H SHLD PITCH EI ;RE-ENABLE INTERRUPTS AT LAST, RET ; REAL-TIME CLOCK WILL HAVE LOST TIME ; ; SOUND PARAMETERS ; PITCH: DB 50,0 ;DEFAULTS FOR 'PING' SOUND DURN: DB 15,0 NSTEPS: DB 0 STEP1: DB 0 STEP2: DB 0 ; ; SOUND ROUTINE FOR THE AY-3-8910 ; SND: LHLD PITCH MOV D,H MOV E,L DAD D DAD D MVI A,1 OUT SNDADR MOV A,H OUT SNDDAT XRA A OUT SNDADR MOV A,L OUT SNDDAT MVI A,8 OUT SNDADR MVI A,15 OUT SNDDAT RET END