2075 lines
35 KiB
Plaintext
Executable File
2075 lines
35 KiB
Plaintext
Executable File
NAM ROBOTRON SOUNDS VERSION 1.0 3-8-82
|
|
*COPYRIGHT WILLIAMS ELECTRONICS INC. 2084
|
|
*PROGRAMMERS: EUGENE P. JARVIS, SAM DICKER,RANDY PFEIFFER,JOHN KOTLARIK
|
|
* PAUL G. DUSSAULT,CARY W. KOLKER,TIM MURPHY
|
|
* AND A CAST OF THOUSANDS......
|
|
*
|
|
NOGEN
|
|
*
|
|
*SYSTEM CONSTANTS
|
|
*
|
|
ROM EQU $F000
|
|
SOUND EQU $400
|
|
CKORG EQU $EF00 CHECKSUM PROG ORG
|
|
ENDRAM EQU $7F
|
|
VECTOR EQU $FFF8 RESET,INT VECTORS
|
|
WVELEN EQU 72
|
|
BG1MAX EQU 29 MAX BACKGROUND INCREMENT
|
|
HBLEN EQU 72
|
|
BG2MAX EQU 29
|
|
SP1SND EQU $0E SPINNER SOUND #1 CODE
|
|
B2SND EQU $12 BONUS SOUND #2 CODE
|
|
SP1MAX EQU 32
|
|
NIN EQU 5
|
|
FIF EQU 6
|
|
TAF EQU 34715!>1 NOTE TIMES
|
|
TA EQU 36780!>1
|
|
TBF EQU 38967!>1
|
|
TB EQU 41284!>1
|
|
TC EQU 43739!>1
|
|
TCS EQU 46340!>1
|
|
TD EQU 49096!>1
|
|
TEF EQU 52015!>1
|
|
TE EQU 55108!>1
|
|
TF EQU 58385!>1
|
|
TFS EQU 61857!>1
|
|
TG EQU 65535!>1
|
|
*
|
|
*
|
|
* SCREAM EQUATES
|
|
*
|
|
ECHOS EQU 4
|
|
FREQ EQU 0
|
|
TIMER EQU 1
|
|
*
|
|
*GLOBALS
|
|
*
|
|
ORG 0
|
|
BG1FLG RMB 1 BACKGROUND SOUND 1
|
|
BG2FLG RMB 1 BACKGROUND SOUND 2
|
|
SP1FLG RMB 1 SPINNER FLAG
|
|
B2FLG RMB 1 BONUS #2 FLAG
|
|
ORGFLG RMB 1 ORGAN FLAG
|
|
HI RMB 1 RANDOM SEED
|
|
LO RMB 1 RANDOM SEED
|
|
XDECAY RMB 2
|
|
AMP0 RMB 1
|
|
*
|
|
*
|
|
*TEMPORARIES
|
|
*
|
|
TMPRAM EQU * TEMPORARY RAM
|
|
TEMPX RMB 2 X TEMPS
|
|
XPLAY RMB 2
|
|
XPTR RMB 2
|
|
TEMPA RMB 1 ACCA TEMP
|
|
TEMPB RMB 1
|
|
LOCRAM EQU *
|
|
*
|
|
*GWAVE PARAMETERS
|
|
*
|
|
ORG LOCRAM
|
|
GECHO RMB 1 ECHO FLAG
|
|
GCCNT RMB 1 CYCLE COUNT
|
|
GECDEC RMB 1 # OF DECAYS PER ECHO
|
|
GDFINC RMB 1 DELTA FREQ INC
|
|
GDCNT RMB 1 DELTA FREQ COUNT
|
|
GWFRM RMB 2 WAVEFORM ADDRESS
|
|
*TEMPORARY OR COMPUTED PARAMETERS
|
|
PRDECA RMB 1 PRE-DECAY FACTOR
|
|
GWFRQ RMB 2 FREQ TABLE ADDR
|
|
FRQEND RMB 2 END ADDR FREQ TABLE
|
|
WVEND RMB 2 WAVE END ADDR
|
|
GPER RMB 1 PERIOD
|
|
GECNT RMB 1 # OF ECHOES COUNTER
|
|
FOFSET RMB 1 FREQUENCY OFFSET
|
|
*
|
|
*GWAVE TABLES
|
|
*
|
|
GWTAB RMB WVELEN WAVE TABLE
|
|
*
|
|
*VARIWAVE PARAMETERS
|
|
*
|
|
ORG LOCRAM
|
|
LOPER RMB 1 LO PERIOD
|
|
HIPER RMB 1 HIPERIOD
|
|
LODT RMB 1 PERIOD DELTAS
|
|
HIDT RMB 1
|
|
HIEN RMB 1 END PERIOD
|
|
SWPDT RMB 2 SWEEP PERIOD
|
|
LOMOD RMB 1 BASE FREQ MOD
|
|
VAMP RMB 1 AMPLITUDE
|
|
LOCNT RMB 1 PERIOD COUNTERS
|
|
HICNT RMB 1
|
|
* SIREN AND BOMB RAM
|
|
ORG LOCRAM
|
|
TOP RMB 2
|
|
SWEEP RMB 2
|
|
SLOPE RMB 1
|
|
END2 RMB 2
|
|
TIME RMB 1
|
|
TABLE RMB 2
|
|
FREQZ RMB 1
|
|
*
|
|
* KNOCKER RAM
|
|
*
|
|
ORG LOCRAM
|
|
PERIOD RMB 1
|
|
AMP RMB 1
|
|
SNDTMP RMB 2 INDEX TMEP
|
|
*
|
|
* FLASH LOCAL RAM
|
|
ORG LOCRAM
|
|
FREQ1 RMB 1 FREQUENCY CONSTANT 1
|
|
FREQ2 RMB 1 FREQUENCY CONSTANT 2
|
|
FREQ3 RMB 1 FREQUENCY CONSTANT 3
|
|
FREQ4 RMB 1 FREQUENCY CONSTANT 4
|
|
DELTA1 RMB 1 DELTA AMPLITUDE 1
|
|
DELTA2 RMB 1 DELTA AMPLITUDE 2
|
|
DELTA3 RMB 1 DELTA AMPLITUDE 3
|
|
DELTA4 RMB 1 DELTA AMPLITUDE 4
|
|
FREQ1$ RMB 1 FREQUENCY COUNTER 1
|
|
FREQ2$ RMB 1 FREQUENCY COUNTER 2
|
|
FREQ3$ RMB 1 FREQUENCY COUNTER 3
|
|
FREQ4$ RMB 1 FREQUENCY COUNTER 4
|
|
CYCLE1 RMB 1 CYCLE CONSTANT 1
|
|
CYCLE2 RMB 1 CYCLE CONSTANT 2
|
|
CYCLE3 RMB 1 CYCLE CONSTANT 3
|
|
CYCLE4 RMB 1 CYCLE CONSTANT 4
|
|
DFREQ1 RMB 1 DELTA FREQUENCY 1
|
|
DFREQ2 RMB 1 DELTA FREQUENCY 2
|
|
DFREQ3 RMB 1 DELTA FREQUENCY 3
|
|
DFREQ4 RMB 1 DELTA FREQUENCY 4
|
|
EFREQ1 RMB 1 END FREQUENCY 1
|
|
EFREQ2 RMB 1 END FREQUENCY 2
|
|
EFREQ3 RMB 1 END FREQUENCY 3
|
|
EFREQ4 RMB 1 END FREQUENCY 4
|
|
CYCL1$ RMB 1 CYCLE COUNTER 1
|
|
CYCL2$ RMB 1 CYCLE COUNTER 2
|
|
CYCL3$ RMB 1 CYCLE COUNTER 3
|
|
CYCL4$ RMB 1 CYCLE COUNTER 4
|
|
SNDX1 RMB 1
|
|
|
|
RANDOM EQU LO SINGLE BYTE RANDOM
|
|
ORG LOCRAM+1
|
|
FREQ$ RMB 1 START FREQUENCY
|
|
C$FRQ RMB 1 CYCLES AT FREQUENCY
|
|
D$FRQ RMB 1 DELTA FREQUENCY
|
|
E$FRQ RMB 1 END FREQUENCY
|
|
C$AMP RMB 1 CYCLES AT AMPLITUDE
|
|
D$AMP RMB 1 DELTA AMPLITUDE
|
|
C$AMP$ RMB 1 CYCLE COUNTER
|
|
C$FRQ$ RMB 1 CYCLE COUNTER
|
|
*
|
|
*NOISE/CROWD ROAR ROUTINE PARAMETERS
|
|
*
|
|
ORG LOCRAM
|
|
DECAY RMB 1
|
|
NAMP RMB 1
|
|
CYCNT RMB 1
|
|
NFRQ1 RMB 2
|
|
NFFLG RMB 1
|
|
LFREQ RMB 1
|
|
DFREQ RMB 1
|
|
GALPAM EQU *
|
|
CYCNT2 RMB 1
|
|
NAMP2 RMB 1
|
|
DECAY2 RMB 1
|
|
NFFLG2 RMB 1
|
|
NFR2 RMB 1
|
|
GALCNT RMB 1
|
|
WHIS RMB 1 CROWD ROAR AMP
|
|
WFRQ RMB 1 CROWD WHISTLE FREQ
|
|
WCNT RMB 1 WHISTLE PASSCOUNTER
|
|
PTRHI RMB 2 WHIS ADR PTR
|
|
WFRQ2 RMB 1
|
|
WCNT2 RMB 1
|
|
CURVAL RMB 1 WHISTLING NOISE OUTPUT
|
|
ATP RMB 1 INTERM NOISE VAL
|
|
MINWIS RMB 1 MIN WHISTLE FREQ
|
|
CY2 RMB 1 NOISE CYCLE COUNTER
|
|
DFRQ RMB 1 WHISTLE FREQ CHANGE
|
|
DFRQ2 RMB 1 INIT WHISTLE FREQ CHANGE
|
|
NNOIS RMB 1 NEXT NOISE VALUE
|
|
NFRQ RMB 1 NOISE FREQ
|
|
NFRQ2 RMB 1 INIT NOISE FREQ
|
|
RCNT2 RMB 1
|
|
*
|
|
*FILTERED NOISE ROUTINE PARAMETERS
|
|
*
|
|
ORG LOCRAM
|
|
FMAX RMB 1 MAXIMUM_FREQUENCY
|
|
FHI RMB 1 FREQUENCY
|
|
FLO RMB 1
|
|
LOFRQ RMB 1
|
|
SAMPC RMB 2 SAMPLE COUNT
|
|
FDFLG RMB 1 FREQUENCY DECREMENT FLAG
|
|
DSFLG RMB 1 DISTORTION FLAG
|
|
*
|
|
*SCREAM TABLES
|
|
*
|
|
ORG LOCRAM
|
|
STABLE RMB 2*ECHOS SCREAM TABLE
|
|
SRMEND EQU *
|
|
*
|
|
*ORGAN PARAMETERS
|
|
*
|
|
ORG LOCRAM
|
|
DUR RMB 2 NOTE DURATION
|
|
OSCIL RMB 1 OSCILLATORS
|
|
RDELAY RMB 60 RAM DELAY LOAD
|
|
*
|
|
* CHECKSUM CALCULATOR & RELOCATOR
|
|
*
|
|
ORG CKORG
|
|
CKSUM LDX #$FFFF INDEX TO END OF ROM
|
|
CLRB ZERO CHECKSUM
|
|
CKSUM1 ADCB 0,X ADD IN PROGRAM BYTE
|
|
DEX TO NEXT BYTE
|
|
CPX #$F000 DONE YET?
|
|
BNE CKSUM1 NOPE...
|
|
STAB 0,X SAVE CHECKSUM AT BEGINNING
|
|
WAI TURN OFF LEDS
|
|
FROM RMB 2 FOR POINTER
|
|
TO RMB 2 FOR POINTER
|
|
*
|
|
* MAIN PROGRAM
|
|
*
|
|
ORG ROM
|
|
FCB $76 CHECKSUM BYTE
|
|
*
|
|
FCC "(C)1982 WILLIAMS ELECTRONICS"
|
|
*
|
|
SETUP SEI SET INTERRUPT MASK
|
|
LDS #ENDRAM INITIALIZE STACK POINTER
|
|
LDX #SOUND INDEX TO PIA
|
|
CLR 1,X ACCESS DDRA
|
|
CLR 3,X ACCESS DDRB
|
|
LDAA #$FF PA0-PA7
|
|
STAA 0,X SET SIDE A AS OUTPUTS
|
|
CLR 2,X SET B SIDE AS INPUTS
|
|
LDAA #$37 CB2 LOW, IRQ ALLOWED
|
|
STAA 3,X PROGRAM B CONTROL REG
|
|
LDAA #$3C CA2 SET INIT HIGH, NO IRQS
|
|
STAA 1,X PROGRAM A SIDE
|
|
STAA HI START RANDOM GENERATOR
|
|
CLRA
|
|
STAA B2FLG
|
|
STAA BG1FLG
|
|
STAA BG2FLG
|
|
STAA SP1FLG
|
|
STAA ORGFLG
|
|
CLI CLEAR INTERRUPTS
|
|
BRA * WAIT FOR INTERRUPT
|
|
*
|
|
*
|
|
* THREE OSCILLATOR SOUND GENERATOR
|
|
*
|
|
PLAY STX XPLAY SAVE CURRENT INDEX
|
|
LDX #DECAYZ SET TO MAXIMUM AMPLITUDE
|
|
STX XDECAY AND SAVE
|
|
LDAA #$80 LOAD ZERO AMPLITUDE
|
|
PLAY1 LDAB FREQ4 CHECK WHITE NOISE COUNTER
|
|
BPL PLAY3 NOT IN WHITE MODE
|
|
LDAB RANDOM GET RANDOM NUMBER
|
|
LSRB REDUCE IT
|
|
LSRB
|
|
LSRB
|
|
INCB NOW NON-ZERO
|
|
PLAY2 DECB TIME OUT COUNT
|
|
BNE PLAY2
|
|
PLAY3 DEC FREQ1$ COUNT DOWN OSC. 1
|
|
BEQ PLAY7 DO AN UPDATE
|
|
DEC FREQ2$ COUNT DOWN OSC. 2
|
|
BEQ PLAY8 DO AN UPDATE
|
|
DEC FREQ3$ COUNT DOWN OSC. 3
|
|
BEQ PLAY9 DO AN UPDATE
|
|
DEC FREQ4$ COUNT DOWN WHITE NOISE
|
|
BNE PLAY1 DO THEM AGAIN
|
|
LDAB FREQ4 CHECK WHITE NOISE CONSTANT
|
|
BEQ PLAY1 FORGET IT
|
|
ANDB #$7F STRIP FLAG BIT
|
|
STAB FREQ4$ SAVE WHITE NOISE COUNT
|
|
LDAB RANDOM GET CURRENT RANDOM
|
|
ASLB DOUBLE
|
|
ADDB RANDOM TRIPLE
|
|
ADDB #$0B ADD IN 11
|
|
STAB RANDOM VOILA...NEW RANDOM NUMBER
|
|
DEC CYCL4$ COUNT DOWN DECAY
|
|
BNE PLAY6 DON'T DECAY
|
|
LDAB CYCLE4 RELOAD COUNT
|
|
STAB CYCL4$ AND SAVE
|
|
LDX XDECAY GET DECAY JUMP POINTER
|
|
DEX MOVE TO LESS AMPLITUDE
|
|
CPX #RDECAY+1 DONE?
|
|
BEQ PLAY12 YUP...BYE BYE
|
|
STX XDECAY SAVE NEW POINTER
|
|
PLAY6 LDAB RANDOM GET RANDOM AMPLITUDE
|
|
BMI PLAY6A SKIP IF NEGATIVE
|
|
ANDB DELTA4 REDUCE AMPLITUDE
|
|
ANDB #$7F STRIP SIGN BIT
|
|
BRA PLAY6B
|
|
PLAY6A ANDB DELTA4 REDUCE AMPLITUDE
|
|
ANDB #$7F REMOVE SIGN BIT
|
|
NEGB NEGATE
|
|
PLAY6B PSHA
|
|
ABA ADD WHITE NOISE
|
|
TAB
|
|
PULA
|
|
LDX XDECAY GET DECAY POINTER
|
|
JSR 0,X OUTPUT NOISE
|
|
BRA PLAY1 DO SOME MORE
|
|
PLAY7 LDX #FREQ1 INDEX TO SET 1
|
|
BRA PLAY10
|
|
PLAY8 LDX #FREQ2 INDEX TO SET 2
|
|
BRA PLAY10
|
|
PLAY9 LDX #FREQ3 INDEX TO SET 3
|
|
PLAY10 TST 24,X CHECK CYCLES AT FREQUENCY
|
|
BEQ PLAY11 ZERO, DON'T CHANGE
|
|
DEC 24,X COUNT DOWN
|
|
BNE PLAY11 NOT TIME TO CHANGE...
|
|
LDAB 12,X LOAD CYCLES AT FREQUENCY
|
|
STAB 24,X SAVE IN COUNTER
|
|
LDAB 00,X GET CURRENT FRQUENCY
|
|
ADDB 16,X ADD DELTA
|
|
CMPB 20,X COMPARE TO END
|
|
BEQ PLAY12 DONE...
|
|
STAB 00,X SAVE NEW CURRENT FREQUENCY
|
|
PLAY11 LDAB 0,X GET CURRENT FREQUENCY
|
|
STAB 8,X SAVE IN FREQUENCY COUNTER
|
|
ADDA 4,X ADD IN AMPLITUDE
|
|
NEG 4,X NEGATE AMPLITUDE
|
|
TAB SAVE DATA
|
|
LDX XDECAY INDEX TO DECAY
|
|
JSR 0,X OUTPUT SOUND
|
|
JMP PLAY1 REPEAT
|
|
PLAY12 LDX XPLAY RESTORE INDEX
|
|
RTS
|
|
*
|
|
* ECHO AND DECAY ROUTINE
|
|
*
|
|
RDECAY LSRB
|
|
LSRB
|
|
LSRB
|
|
LSRB
|
|
LSRB
|
|
LSRB
|
|
LSRB
|
|
LSRB
|
|
DECAYZ STAB SOUND
|
|
RTS
|
|
*
|
|
* 3 OSCILLATOR CALLING ROUTINES
|
|
*
|
|
THNDR LDX #VEC01 THUNDER SOUND
|
|
THNDR1 LDAB #28 NEED TO TRANSFER
|
|
JSR TRANS 28 BYTES FOR PLAY
|
|
JSR PLAY NOW PLAY IT
|
|
RTS
|
|
SND2 LDX #VEC02 SOUND 2
|
|
BRA THNDR1
|
|
SND3 LDX #VEC03 SOUND 3
|
|
BRA THNDR1
|
|
SND4 LDX #VEC04 SOUND 4
|
|
BRA THNDR1
|
|
SND5 LDX #VEC05 SOUND 5
|
|
BRA THNDR1
|
|
SND16 LDX #VEC016
|
|
BRA THNDR1
|
|
SND17 LDX #VEC017
|
|
BRA THNDR1
|
|
*
|
|
*
|
|
* PROGRESSIVE PITCH BONUS COUNTDOWN
|
|
*
|
|
BONUS$ LDX #$0060 PROGRESSIVE SINGLE FREQUENCY
|
|
LDAA 0,X GET CURRENT FREQUENCY
|
|
SUBA #$02 NOW HIGHER
|
|
STAA 0,X SAVE NEW FREQUENCY
|
|
JSR MOVE SET UP FOR SING
|
|
JMP SING PLAY IT
|
|
*
|
|
* DIVING PLANE SOUND
|
|
*
|
|
PLANE LDX #$0001 SET FOR SHORT HALF CYCLE
|
|
STX FREQ1 SAVE VALUE
|
|
LDX #$0380 SET FOR LONG HALF CYCLE
|
|
STX FREQ3 SAVE VALUE
|
|
PLANE1 CLR SOUND SEND OUT ZEROES
|
|
LDX FREQ1 GET LOW HALF CYCLE DATA
|
|
INX INCREASE HALF CYCLE
|
|
STX FREQ1 SAVE NEW VALUE
|
|
PLANE2 DEX COUNT DOWN
|
|
BNE PLANE2
|
|
COM SOUND SEND OUT ONES
|
|
LDX FREQ3 GET HIGH HALF CYCLE DATA
|
|
PLANE3 DEX COUNT DOWN
|
|
BNE PLANE3
|
|
BRA PLANE1
|
|
*
|
|
* SIREN AIR RAID
|
|
*
|
|
ZIREN LDAA #$FF
|
|
STAA TOP
|
|
LDX #$FEC0
|
|
STX SWEEP
|
|
LDAA #$20
|
|
LDX #$FFE0
|
|
BSR ZIREN0
|
|
LDAA #$1
|
|
LDX #$44
|
|
ZIREN0 STAA SLOPE
|
|
STX END2
|
|
ZIREN1 LDX #$10
|
|
ZIREN2 BSR ZIRLOP
|
|
LDAA TOP+1
|
|
ADDA SWEEP+1
|
|
STAA TOP+1
|
|
LDAA TOP
|
|
ADCA SWEEP
|
|
STAA TOP
|
|
DEX
|
|
BNE ZIREN2
|
|
LDAA SWEEP+1
|
|
ADDA SLOPE
|
|
STAA SWEEP+1
|
|
BCC ZIREN5
|
|
INC SWEEP
|
|
ZIREN5 LDX SWEEP
|
|
CPX END2
|
|
BNE ZIREN1
|
|
RTS
|
|
*FLAT TRIANGLE LOOP
|
|
ZIRLOP CLRA
|
|
ZIRLP1 STAA SOUND
|
|
ADDA #$20
|
|
BCC ZIRLP1
|
|
BSR ZIRT
|
|
LDAA #$E0
|
|
ZIRLP4 STAA SOUND
|
|
SUBA #$20
|
|
BCC ZIRLP4
|
|
ZIRT LDAB TOP
|
|
ZIRLP2 LDAA #$2
|
|
ZIRLP3 DECA
|
|
BNE ZIRLP3
|
|
DECB
|
|
BNE ZIRLP2
|
|
RTS
|
|
*
|
|
* THE BOMB OOOOOH NOOOOO!
|
|
WHIST LDAA #$80
|
|
STAA FREQZ
|
|
LDAA #SINTBL/$100
|
|
STAA TABLE
|
|
WHIST0 LDAA #$80
|
|
STAA TEMPA
|
|
WHIST1 LDAA #18
|
|
WHIST2 DECA
|
|
BNE WHIST2
|
|
LDAA TIME
|
|
ADDA FREQZ
|
|
STAA TIME
|
|
LSRA
|
|
LSRA
|
|
LSRA
|
|
ADDA #SINTBL!.$FF
|
|
STAA TABLE+1
|
|
LDX TABLE
|
|
LDAA ,X
|
|
STAA SOUND
|
|
DEC TEMPA
|
|
BNE WHIST1
|
|
DEC FREQZ
|
|
LDAA FREQZ
|
|
CMPA #$20
|
|
BNE WHIST0
|
|
RTS
|
|
* SINE TABLE
|
|
SINTBL FCB $80,$8C,$98,$A5,$B0,$BC,$C6,$D0
|
|
FCB $DA,$E2,$EA,$F0,$F5,$FA,$FD,$FE
|
|
FCB $FF,$FE,$FD,$FA,$F5,$F0,$EA,$E2
|
|
FCB $DA,$D0,$C6,$BC,$B0,$A5,$98,$8C
|
|
FCB $80,$73,$67,$5A,$4F,$43,$39,$2F
|
|
FCB $25,$1D,$15,$0F,$0A,$05,$02,$01
|
|
FCB $00,$01,$02,$05,$0A,$0F,$15,$1D
|
|
FCB $25,$2F,$39,$43,$4F,$5A,$67,$73
|
|
*
|
|
* KNOCKER ROUTINE
|
|
*
|
|
KNOCK CLR SOUND+2 FULL BLAST
|
|
LDX #KNKTAB
|
|
STX SNDTMP
|
|
SQLP LDX SNDTMP RESTORE X REG
|
|
LDAA ,X GET PERIOD
|
|
BEQ END END ON ZERO
|
|
LDAB 1,X GET AMP
|
|
ANDB #$F0
|
|
STAB AMP
|
|
LDAB 1,X
|
|
INX
|
|
INX
|
|
STX SNDTMP SAVE X
|
|
STAA PERIOD
|
|
ANDB #$F
|
|
LP0 LDAA AMP
|
|
STAA SOUND
|
|
LDAA PERIOD
|
|
LP1 LDX #5 DELAY
|
|
LP11 DEX
|
|
BNE LP11
|
|
DECA
|
|
BNE LP1
|
|
CLR SOUND
|
|
LDAA PERIOD
|
|
LP2 LDX #5 DELAY
|
|
LP22 DEX
|
|
BNE LP22
|
|
DECA
|
|
BNE LP2
|
|
DECB
|
|
BNE LP0
|
|
BRA SQLP
|
|
END LDAA #$80 OVERRIDE OFF
|
|
STAA SOUND+2
|
|
RTS
|
|
*
|
|
*
|
|
* KNOCKER PATTERN
|
|
*
|
|
KNKTAB FDB $01FC,$02FC,$03F8,$04F8,$06F8,$08F4,$0CF4
|
|
FDB $10F4,$20F2,$40F1,$60F1,$80F1,$A0F1,$C0F1,0
|
|
*
|
|
*
|
|
* FUNNY "ELECTRIC SOUND"
|
|
* SUPPOSED TO GENERATE A PHASED OUTPUT AT
|
|
* A CHANGING FREQUENCY. IT DOESN'T, AND
|
|
* I'M NOT SURE EXACTLY WHAT IT DOES DO.
|
|
* BEST LEAVE THIS ALONE.
|
|
*
|
|
BONUS DEC SNDX1
|
|
BRA SND1$
|
|
SND1 LDAB #$A0
|
|
STAB SNDX1
|
|
SND1$ LDAA #$04
|
|
STAA FREQ2
|
|
SND1$$ LDAA #$9F
|
|
LDAB SNDX1
|
|
SND1A LDX #$01C0
|
|
SND1B DEX
|
|
BEQ SND1E
|
|
FCB $F7 "STAB"
|
|
FDB FREQ1
|
|
STAA SOUND
|
|
SND1C DEX
|
|
BEQ SND1E
|
|
DEC FREQ1
|
|
BNE SND1C
|
|
DEX
|
|
BEQ SND1E
|
|
STAB FREQ1
|
|
COM SOUND
|
|
SND1D DEX
|
|
BEQ SND1E
|
|
DEC FREQ1
|
|
BNE SND1D
|
|
BRA SND1B
|
|
SND1E SUBB FREQ2
|
|
CMPB #$10
|
|
BHI SND1A
|
|
RTS
|
|
START LDAB #$11
|
|
STAB SNDX1
|
|
LDAA #$FE
|
|
STAA FREQ2
|
|
BRA SND1$$
|
|
*
|
|
* SINGLE OSCILLATOR SOUND CALLS
|
|
*
|
|
PERK LDX #VEC01X
|
|
BRA PERK$1
|
|
PERK1 JSR MOVE
|
|
JSR SING
|
|
RTS
|
|
ATARI LDX #VEC02X
|
|
BRA PERK1
|
|
SIREN LDAB #$FF
|
|
STAB AMP0
|
|
SIREN1 LDX #VEC03X
|
|
BSR PERK1
|
|
LDX #VEC04X
|
|
BSR PERK1
|
|
DECB
|
|
BNE SIREN1
|
|
RTS
|
|
ORRRR LDX #VEC05X
|
|
BRA PERK1
|
|
PERK$ LDX #VEC07X
|
|
PERK$1 BSR PERK1
|
|
BSR ECHO
|
|
BRA PERK$1
|
|
HSTD LDAA #$FF
|
|
STAA AMP0
|
|
LDX #VEC08X
|
|
BRA PERK$1
|
|
PERK$$ LDAA #$FF
|
|
STAA AMP0
|
|
LDX #VEC06X
|
|
BRA PERK$1
|
|
*
|
|
* RANDOM SQUIRTS
|
|
*
|
|
SQRT LDAB #$30
|
|
SQRT1 LDX #VEC09X
|
|
BSR MOVE
|
|
SQRT2 LDAA RANDOM
|
|
ASLA
|
|
ADDA RANDOM
|
|
ADDA #$0B
|
|
STAA RANDOM
|
|
LSRA
|
|
LSRA
|
|
ADDA #$0C
|
|
STAA FREQ$
|
|
BSR SING
|
|
DECB
|
|
BNE SQRT2
|
|
RTS
|
|
*
|
|
* ECHO FUNCTION
|
|
*
|
|
ECHO LDAA AMP0
|
|
SUBA #$08
|
|
BPL ECHO1
|
|
STAA AMP0
|
|
RTS
|
|
ECHO1 PULA
|
|
PULA
|
|
RTS
|
|
*
|
|
* MOVE PARAMETERS
|
|
*
|
|
MOVE LDAA 0,X
|
|
STAA FREQ$
|
|
LDAA 1,X
|
|
STAA C$FRQ
|
|
LDAA 2,X
|
|
STAA D$FRQ
|
|
LDAA 3,X
|
|
STAA E$FRQ
|
|
LDAA 4,X
|
|
STAA C$AMP
|
|
LDAA 5,X
|
|
STAA D$AMP
|
|
RTS
|
|
*
|
|
* DELTA F, DELTA A ROUTINE
|
|
*
|
|
SING LDAA AMP0 GET STARTING AMPLITUDE
|
|
SING$ PSHB SAVE B
|
|
LDAB C$AMP GET CYCLES AT AMPLITUDE
|
|
STAB C$AMP$ SAVE AS COUNTER
|
|
LDAB C$FRQ GET CYCLES AT FREQUENCY
|
|
STAB C$FRQ$ SAVE AS COUNTER
|
|
SING1 COMA INVERT AMPLITUDE
|
|
LDAB FREQ$ GET FREQUENCY COUNTER
|
|
STAA SOUND OUTPUT TO D/A
|
|
SING2 DECB
|
|
BNE SING2
|
|
COMA INVERT AMPLITUDE
|
|
LDAB FREQ$ GET FREQUENCY COUNTER
|
|
BRA *+2 -I
|
|
INX -I
|
|
DEX -I--- SYNC, 20 CYCLES
|
|
INX -I
|
|
DEX -I
|
|
STAA SOUND OUTPUT TO D/A
|
|
SING3 DECB
|
|
BNE SING3
|
|
DEC C$FRQ$ CHECK CYCLES AT FREQUENCY
|
|
BEQ SING4 GO CHANGE FREQUENCY
|
|
DEC C$AMP$ CHECK CYCLES AT AMPLITUDE
|
|
BNE SING1 ALL OK, GO OUTPUT
|
|
COMA INVERT AMPLITUDE
|
|
LDAB C$AMP GET CYCLES AT AMPLITUDE
|
|
STAA SOUND OUTPUT TO D/A
|
|
STAB C$AMP$ SAVE AS COUNTER
|
|
LDAB FREQ$ GET FREQUENCY COUNT
|
|
ADDA D$AMP ADD AMPLITUDE DELTA
|
|
BMI SING6 RETURN FROM SUBROUTINE
|
|
NOP SYNC, 2 CYCLES
|
|
BRA SING5
|
|
SING4 INX -I
|
|
DEX -I--- SYNC, 10 CYCLES
|
|
NOP -I
|
|
COMA INVERT AMPLITUDE
|
|
LDAB C$FRQ GET CYCLES AT FREQUENCY
|
|
STAA SOUND OUTPUT TO D/A
|
|
STAB C$FRQ$ SAVE AS COUNTER
|
|
LDAB FREQ$ GET FREQUENCY COUNT
|
|
SUBB D$FRQ SUBTRACT FREQUENCY DELTA
|
|
CMPB E$FRQ COMPARE TO END FREQUENCY
|
|
CMPB E$FRQ SYNC, 3 CYCLES
|
|
BEQ SING6 RETURN FROM SUBROUTINE
|
|
SING5 STAB FREQ$ SAVE FREQUENCY COUNT
|
|
SUBB #$05 SYNC TO FREQUENCY COUNTDOWN
|
|
BRA SING2 JUMP INTO COUNTDOWN LOOP
|
|
SING6 PULB RESTORE B
|
|
RTS
|
|
*
|
|
*
|
|
SNDTBL FCB $DA,$FF,$DA,$80,$26,$01,$26,$80
|
|
FCB $07,$0A,$07,$00,$F9,$F6,$F9,$00
|
|
NOTTBL FCB $3A,$3E,$50,$46,$33,$2C,$27,$20
|
|
FCB $25,$1C,$1A,$17,$14,$11,$10,$33
|
|
WAVFRM FCB $08,$03,$02,$01,$02,$03,$04,$05
|
|
FCB $06,$0A,$1E,$32,$70,$00
|
|
VEC01 FDB $FFFF,$FF90,$FFFF,$FFFF,$FFFF
|
|
FDB $FF90,$FFFF,$FFFF,$FFFF,$FFFF
|
|
FDB $0000,$0000,$0000,$0000
|
|
VEC02 FDB $4801,$0000,$3F3F,$0000,$4801
|
|
FDB $0000,$0108,$0000,$8101,$0000
|
|
FDB $01FF,$0000,$0108,$0000
|
|
VEC03 FDB $0110,$0000,$3F3F,$0000,$0110
|
|
FDB $0000,$0505,$0000,$0101,$0000
|
|
FDB $31FF,$0000,$0505,$0000
|
|
VEC04 FDB $3000,$0000,$7F00,$0000,$3000
|
|
FDB $0000,$0100,$0000,$7F00,$0000
|
|
FDB $0200,$0000,$0100,$0000
|
|
VEC05 FDB $0400,$0004,$7F00,$007F,$0400
|
|
FDB $0004,$FF00,$00A0,$0000,$0000
|
|
FDB $0000,$0000,$FF00,$00A0
|
|
VEC06 FDB $0C68,$6800,$071F,$0F00,$0C80
|
|
FDB $8000,$FFFF,$FF00,$0000,$0000
|
|
FDB $0000,$0000,$FFFF,$FF00
|
|
VEC016 FDB $0104,$0000,$3F7F,$0000,$0104
|
|
FDB $0000,$05FF,$0000,$0100,$0000
|
|
FDB $4800,$0000,$05FF,$0000
|
|
VEC017 FDB $0280,$0030,$0A7F,$007F,$0280
|
|
FDB $0030,$C080,$0020,$0110,$0015
|
|
FDB $C010,$0000,$C080,$0000
|
|
VEC01X FDB $FF01,$02C3,$FF00
|
|
VEC02X FDB $0103,$FF80,$FF00
|
|
VEC03X FDB $2003,$FF50,$FF00
|
|
VEC04X FDB $5003,$0120,$FF00
|
|
VEC05X FDB $FE04,$0204,$FF00
|
|
VEC06X FDB $4803,$010C,$FF00
|
|
VEC07X FDB $4802,$010C,$FF00
|
|
VEC08X FDB $E001,$0210,$FF00
|
|
VEC09X FDB $50FF,$0000,$6080
|
|
VEC10X FDB $FF02,$0106,$FF00
|
|
*
|
|
*VARI LOADER
|
|
*
|
|
VARILD TAB
|
|
ASLA X2
|
|
ASLA X4
|
|
ASLA X8
|
|
ABA X9
|
|
LDX #LOCRAM
|
|
STX XPTR SET XSFER
|
|
LDX #VVECT
|
|
JSR ADDX
|
|
LDAB #9 GET COUNT
|
|
VTRAN JMP TRANS
|
|
*
|
|
*VARIABLE DUTY CYCLE SQUARE WAVE ROUTINE
|
|
*
|
|
VARI LDAA VAMP
|
|
STAA SOUND
|
|
VAR0 LDAA LOPER
|
|
STAA LOCNT
|
|
LDAA HIPER
|
|
STAA HICNT
|
|
V0 LDX SWPDT
|
|
V0LP LDAA LOCNT LO CYCLE
|
|
COM SOUND
|
|
V1 DEX
|
|
BEQ VSWEEP
|
|
DECA
|
|
BNE V1
|
|
COM SOUND
|
|
LDAA HICNT HI CYCLE
|
|
V2 DEX
|
|
BEQ VSWEEP
|
|
DECA
|
|
BNE V2
|
|
BRA V0LP LOOP BACK
|
|
VSWEEP LDAA SOUND
|
|
BMI VS1
|
|
COMA
|
|
VS1 ADDA #0
|
|
STAA SOUND OUTPUT
|
|
LDAA LOCNT
|
|
ADDA LODT
|
|
STAA LOCNT
|
|
LDAA HICNT
|
|
ADDA HIDT
|
|
STAA HICNT
|
|
CMPA HIEN
|
|
BNE V0
|
|
LDAA LOMOD
|
|
BEQ VARX
|
|
ADDA LOPER
|
|
STAA LOPER
|
|
BNE VAR0
|
|
VARX RTS
|
|
*
|
|
*LAUNCH
|
|
*
|
|
LAUNCH LDAA #$FF
|
|
STAA DFREQ
|
|
LDAA #$60
|
|
LDAB #$FF
|
|
BRA LITEN
|
|
*
|
|
*LIGHTNING
|
|
*
|
|
LITE LDAA #1
|
|
STAA DFREQ
|
|
LDAB #3
|
|
BRA LITEN
|
|
*
|
|
*APPEAR
|
|
*
|
|
APPEAR LDAA #$FE
|
|
STAA DFREQ
|
|
LDAA #$C0
|
|
LDAB #$10
|
|
BRA LITEN
|
|
*
|
|
*LIGHTNING+APPEAR NOISE ROUTINE
|
|
*
|
|
LITEN STAA LFREQ
|
|
LDAA #$FF HIGHEST AMP
|
|
STAA SOUND
|
|
STAB CYCNT
|
|
LITE0 LDAB CYCNT
|
|
LITE1 LDAA LO GET RANDOM
|
|
LSRA
|
|
LSRA
|
|
LSRA
|
|
EORA LO
|
|
LSRA
|
|
ROR HI
|
|
ROR LO
|
|
BCC LITE2
|
|
COM SOUND
|
|
LITE2 LDAA LFREQ COUNT FREQ
|
|
LITE3 DECA
|
|
BNE LITE3
|
|
DECB COUNT CYCLES
|
|
BNE LITE1
|
|
LDAA LFREQ
|
|
ADDA DFREQ
|
|
STAA LFREQ
|
|
BNE LITE0
|
|
RTS
|
|
*
|
|
*TURBO
|
|
*
|
|
TURBO LDAA #$20
|
|
STAA CYCNT
|
|
STAA NFFLG
|
|
LDAA #$1
|
|
LDX #1
|
|
LDAB #$FF
|
|
BRA MOISE
|
|
*
|
|
*WHITE NOISE ROUTINE
|
|
*X=INIT PERIOD, ACCB=INIT AMP, ACCA DECAY RATE
|
|
*CYCNT=CYCLE COUNT, NFFLG= FREQ DECAY FLAG
|
|
*
|
|
MOISE STAA DECAY
|
|
MOISE0 STX NFRQ1
|
|
MOIS00 STAB NAMP
|
|
LDAB CYCNT
|
|
MOISE1 LDAA LO GET RANDOM BIT
|
|
LSRA
|
|
LSRA
|
|
LSRA
|
|
EORA LO
|
|
LSRA
|
|
ROR HI
|
|
ROR LO
|
|
LDAA #$0
|
|
BCC MOISE2
|
|
LDAA NAMP
|
|
MOISE2 STAA SOUND
|
|
LDX NFRQ1 INCREASING DELAY
|
|
MOISE3 DEX
|
|
BNE MOISE3
|
|
DECB FINISH CYCLE COUNT?
|
|
BNE MOISE1 NO
|
|
LDAB NAMP DECAY AMP
|
|
SUBB DECAY
|
|
BEQ MSEND
|
|
LDX NFRQ1 INC FREQ
|
|
INX
|
|
LDAA NFFLG DECAY FREQ?
|
|
BEQ MOIS00 NO
|
|
BRA MOISE0
|
|
MSEND RTS
|
|
*
|
|
*
|
|
*CROWD ROAR
|
|
CDR LDX #WS1 1ST WHISTLE PARAMS
|
|
STX PTRHI
|
|
JSR WISLD
|
|
LDX #$A500 SEED
|
|
STX HI
|
|
LDX #CR1 1ST CROWD ROAR NOISE PARAMS
|
|
JSR NOISLD
|
|
JSR NINIT
|
|
LDX #CR2
|
|
JSR NOISLD
|
|
JMP NINIT2
|
|
*WHISTLE PARAMS
|
|
WS1 FCB $90,$10,2,$14,$40
|
|
FCB $B4,$40,$FF,$14,$30
|
|
FCB $D0,$32,$2,$10,$60
|
|
FCB $EE,$20,2,8,$54
|
|
FCB $E9,$54,$FF,$20,$28
|
|
FCB $C0,$30,2,$14,$58
|
|
FCB $AC,$20,$2,$8,$58
|
|
FCB $A6,$58,$FF,$18,$22
|
|
FCB 0
|
|
CR1 FCB $30,$10,$FC,0,1
|
|
CR2 FCB $30,$FC,1,0,1
|
|
*
|
|
*
|
|
*WHITE NOISE ROUTINE
|
|
*NFRQ=INIT PERIOD, NAMP=INIT AMP, DECAY AMPLITUDE RATE
|
|
*CYCNT=CYCLE COUNT, NFFLG= FREQ DECAY FLAG
|
|
*NFFLG=0 NO FREQ CHANGE;=POS DECAY;=MINUS INC FREQ
|
|
*NOISE LOAD PROG-ENTER WITH XREG POINTING TO DATA
|
|
*
|
|
NOISLD LDAA X
|
|
STAA CY2
|
|
LDAA 1,X
|
|
STAA NAMP
|
|
LDAA 2,X
|
|
STAA DECAY
|
|
LDAA 3,X
|
|
STAA NFFLG
|
|
LDAA 4,X
|
|
STAA NFRQ2
|
|
NEND RTS
|
|
*
|
|
*LOAD NOISE AND GO
|
|
*
|
|
NOISLG BSR NOISLD
|
|
*
|
|
*NOISE INIT
|
|
*
|
|
NOIN BSR NSUB CY2&NFRQ2 TO CYCNT&NFRQ
|
|
*
|
|
*NOISE LOOP
|
|
*
|
|
NO1 BSR RNT FREQ CHECK
|
|
LDAA NFRQ FREQ REINITED?
|
|
CMPA NFRQ2
|
|
BNE NO1 IF NOT KEEEP DELAYING
|
|
ROLB RESTORE MAX AMPLITUDE TO NOISE
|
|
STAB SOUND OUTPUT TO DAC
|
|
BSR NOISE1 PREPARE NEXT RAND NO
|
|
BSR NOISE2
|
|
BSR RNA AMPLITUDE &CYCL3 COUNT CECK
|
|
TST NAMP SEE IF DONE
|
|
BEQ NEND RTS IF FINISHED
|
|
TST CYCNT SEE IF NEXT FREQ
|
|
BNE NO1 IF NOT GO FREQ DELAY LOOP
|
|
TST NFFLG SEE IF SWEEP MODE
|
|
BEQ NO1 IF NO SWEEP GO DELAY
|
|
BMI NO3 SWEEP DOWN
|
|
INC NFRQ2
|
|
BRA NO1
|
|
NO3 DEC NFRQ2
|
|
DEC NFRQ
|
|
BRA NO1
|
|
NSUB CLR CYCNT
|
|
LDAA NFRQ2
|
|
STAA NFRQ NOISE FREQ
|
|
CLR NNOIS
|
|
RTS
|
|
* 23 CYCLES FOR EACH SUBROUTINE PLUS CALLING OVERHEAD
|
|
*
|
|
*
|
|
NOISE1 LDAA LO GET RANDOM BIT
|
|
LSRA
|
|
LSRA
|
|
LSRA
|
|
EORA LO
|
|
STAA ATP INTERMED RAND NO
|
|
INX
|
|
ANDA #$7 FOR 3 BIT RANDOM NO
|
|
*
|
|
RTS
|
|
*
|
|
NOISE2 LDAA ATP
|
|
LSRA
|
|
ROR HI
|
|
ROR LO
|
|
LDAA #$0
|
|
BCC NOISE3
|
|
LDAA NAMP
|
|
NOISE3 STAA NNOIS NEXT NOISE VALUE
|
|
*
|
|
RTS
|
|
*
|
|
RNT LDAA NFRQ2 NOISE FREQ
|
|
DEC NFRQ
|
|
BEQ NW0
|
|
INX
|
|
DEX TEQ
|
|
BRA NNW1
|
|
NW0 STAA NFRQ REINIT FREQ
|
|
LDAB NNOIS SAVE NEXT NOISE VAL IN B REG
|
|
LSRB HALF AMPLITUDE
|
|
INC CYCNT NOISE CYCLE COUNT AT NAMP
|
|
*
|
|
NNW1 RTS
|
|
*
|
|
RNA LDAA CY2 NOISE AMPL CHANGE
|
|
CMPA CYCNT
|
|
BEQ NW2
|
|
INX
|
|
DEX
|
|
BRA NW3 TEQ
|
|
NW2 CLR CYCNT
|
|
LDAA NAMP
|
|
SUBA DECAY
|
|
STAA NAMP
|
|
*
|
|
NW3 RTS
|
|
*
|
|
* NOISE WITH WHISTLE MAIN LOOP
|
|
NINIT CLR WFRQ
|
|
CLR DFRQ
|
|
LDAA #$E CYCLE OFFSET FOR WHISTLE
|
|
STAA WCNT
|
|
CLR CURVAL CLR WHISTLE VALUES
|
|
NINIT2 BSR NSUB CLR CYCNT AND INIT FREQ
|
|
WIN BSR NOISE1
|
|
JSR TRIDR
|
|
BSR NOISE2
|
|
JSR TRIDR
|
|
BSR RNT
|
|
BSR TRIDR
|
|
BSR RNA
|
|
BSR TRIDR
|
|
BSR TRICNT
|
|
BSR TRIDR
|
|
BSR TRIFRQ
|
|
BSR TRIDR
|
|
BSR NNW
|
|
BRA WIN
|
|
*
|
|
TRICNT LDAA WCNT2 #CYCLES AT WHISTLE FREQ
|
|
DEC WCNT
|
|
BEQ NW4
|
|
FCB $B6 LDAA EXTENDED
|
|
FDB NAMP
|
|
BNE NW5 TEQ
|
|
BRA NSEND END NOISE
|
|
NW4 STAA WCNT
|
|
LDAA WFRQ
|
|
ADDA DFRQ
|
|
STAA WFRQ
|
|
*
|
|
NW5 RTS
|
|
*
|
|
TRIFRQ LDAA WFRQ WHISTLE END TEST
|
|
CMPA MINWIS
|
|
BEQ NW6
|
|
INX TEQ
|
|
LDAA NAMP END TEST
|
|
BNE NW7 TEQ
|
|
BRA PEND END NOISE
|
|
NW6 CLR WFRQ TURN OFF WHISTLE
|
|
CLR DFRQ
|
|
CLR CURVAL
|
|
LDX PTRHI SET UP FOR NEXT WHISTLE
|
|
WISLD LDAA X
|
|
STAA WHIS
|
|
BEQ NW7
|
|
LDAA 1,X
|
|
STAA WFRQ2
|
|
LDAA 2,X
|
|
STAA DFRQ2
|
|
LDAA 3,X
|
|
STAA WCNT2
|
|
LDAA 4,X
|
|
STAA MINWIS
|
|
LDAA #5
|
|
JSR ADDX
|
|
STX PTRHI
|
|
*
|
|
NW7 RTS
|
|
PEND PULA
|
|
PULA STACK ADJ
|
|
RTS
|
|
*
|
|
NNW LDAA WHIS WHISTLE INIT
|
|
BEQ NW8 ALREADY INITED
|
|
CMPA NAMP
|
|
BNE NW9
|
|
BRA WINIT GO INIT WHISTLE
|
|
NW8 INX
|
|
DEX TEQ
|
|
NW9 RTS
|
|
WINIT CLR WHIS
|
|
LDAA WFRQ2
|
|
STAA WFRQ
|
|
LDAA DFRQ2
|
|
STAA DFRQ
|
|
RTS
|
|
******************
|
|
TRIDR LDAA CURVAL
|
|
ADDA WFRQ
|
|
STAA CURVAL
|
|
BPL GO
|
|
COMA
|
|
GO ABA
|
|
STAA SOUND
|
|
NSEND RTS
|
|
*
|
|
*
|
|
*BACKGROUND 1 ROUTINE
|
|
*
|
|
BG1 LDAB #1
|
|
STAB BG1FLG
|
|
LDX #BG1TB
|
|
BRA FNLOAD
|
|
*
|
|
*THRUST
|
|
*
|
|
THRUST LDX #THTB
|
|
BRA FNLOAD
|
|
*
|
|
*CANNON
|
|
*
|
|
CANNON LDX #CANTB
|
|
BRA FNLOAD
|
|
*
|
|
FNTAB EQU *
|
|
BG1TB FCB 0,0,0,$01,0,00
|
|
THTB FCB 0,0,0,3,00,00
|
|
CANTB FCB 1,0,1,$FF,3,$E8 DEFENDER SND #$17
|
|
HBMBTB FCB 1,1,1,$40,$10,00
|
|
RAIN FCB 1,$80,1,$40,$FF
|
|
*
|
|
HBOMB LDX #HBMBTB
|
|
*
|
|
*LOADER
|
|
*
|
|
FNLOAD LDAA ,X
|
|
STAA DSFLG DISTORTION FLAG
|
|
LDAA 1,X
|
|
STAA LOFRQ
|
|
LDAA 2,X FREQ DECAY FLAG
|
|
LDAB 3,X INIT MAX FREQ
|
|
LDX 4,X SAMPLE COUNT
|
|
*
|
|
*FILTERED NOISE ROUTINE
|
|
*X=SAMPLE COUNT, ACCB=INITIAL MAX FREQ
|
|
*ACCA=FREQ DECAY FLAG ,DSFLG=DISTORTION FLAG
|
|
*
|
|
FNOISE STAA FDFLG
|
|
STAB FMAX
|
|
STX SAMPC
|
|
CLR FLO
|
|
FNOIS0 LDX SAMPC
|
|
LDAA SOUND
|
|
FNOIS1 TAB NEXT RANDOM NUMBER
|
|
LSRB
|
|
LSRB
|
|
LSRB
|
|
EORB LO
|
|
LSRB
|
|
ROR HI
|
|
ROR LO
|
|
LDAB FMAX SET FREQ
|
|
TST DSFLG
|
|
BEQ FNOIS2
|
|
ANDB HI DISTORT FREQUENCY
|
|
ADDB LOFRQ LO FREQ MIN
|
|
FNOIS2 STAB FHI
|
|
LDAB FLO
|
|
CMPA LO
|
|
BHI FNOIS4
|
|
FNOIS3 DEX SLOPE UP
|
|
BEQ FNOIS6
|
|
STAA SOUND
|
|
ADDB FLO
|
|
ADCA FHI
|
|
BCS FNOIS5
|
|
CMPA LO
|
|
BLS FNOIS3
|
|
BRA FNOIS5
|
|
FNOIS4 DEX SLOPE DOWN
|
|
BEQ FNOIS6
|
|
STAA SOUND
|
|
SUBB FLO
|
|
SBCA FHI
|
|
BCS FNOIS5
|
|
CMPA LO
|
|
BHI FNOIS4
|
|
FNOIS5 LDAA LO
|
|
STAA SOUND
|
|
BRA FNOIS1
|
|
FNOIS6 LDAB FDFLG
|
|
BEQ FNOIS1
|
|
LDAA FMAX DECAY MAX FREQ
|
|
LDAB FLO
|
|
LSRA
|
|
RORB
|
|
LSRA
|
|
RORB
|
|
LSRA
|
|
RORB
|
|
COMA
|
|
NEGB
|
|
SBCA #-1
|
|
ADDB FLO
|
|
ADCA FMAX
|
|
STAB FLO
|
|
STAA FMAX
|
|
BNE FNOIS0
|
|
CMPB #7
|
|
BNE FNOIS0
|
|
RTS
|
|
*
|
|
*RADIO
|
|
*
|
|
RADIO LDAA #RADSND/$100 SOUND TABLE
|
|
STAA XPTR
|
|
LDX #100 STARTING FREQ
|
|
STX TEMPX
|
|
RADIO1 ADDB TEMPX+1 ADD FREQ TO TIMER
|
|
LDAA TEMPA
|
|
ADCA TEMPX
|
|
STAA TEMPA
|
|
LDX TEMPX
|
|
BCS RADIO2
|
|
BRA *+2 EQUALIZE TIME
|
|
BRA RADIO3
|
|
RADIO2 INX CARRY?, RAISE FREQ
|
|
BEQ RADIO4 DONE?
|
|
RADIO3 STX TEMPX
|
|
ANDA #$F SET POINTER
|
|
ADDA #RADSND!.$FF
|
|
STAA XPTR+1
|
|
LDX XPTR
|
|
LDAA ,X
|
|
STAA SOUND PLAY SOUND
|
|
BRA RADIO1
|
|
RADIO4 RTS
|
|
*
|
|
*HYPER
|
|
*
|
|
HYPER CLRA
|
|
STAA SOUND
|
|
STAA TEMPA ZERO PHASE
|
|
HYPER1 CLRA ZERO TIME COUNTER
|
|
HYPER2 CMPA TEMPA
|
|
BNE HYPER3
|
|
COM SOUND PHASE EDGE?, COMPLEMENT SOUND
|
|
HYPER3 LDAB #18 DELAY
|
|
HYPER4 DECB
|
|
BNE HYPER4
|
|
INCA ADVANCE TIME COUNTER
|
|
BPL HYPER2
|
|
COM SOUND CYCLE DONE?, CYCLE EDGE
|
|
INC TEMPA NEXT PHASE
|
|
BPL HYPER1 DONE?
|
|
RTS
|
|
*
|
|
*SCREAM
|
|
*
|
|
SCREAM LDX #STABLE ZERO FREQS AND TIMES
|
|
SCREM1 CLR ,X
|
|
INX
|
|
CPX #SRMEND
|
|
BNE SCREM1
|
|
LDAA #$40 START FIRST ECHO
|
|
STAA STABLE+FREQ
|
|
SCREM2 LDX #STABLE INITIALIZE COUNTER
|
|
LDAA #$80 INITIALIZE AMPLITUDE
|
|
STAA TEMPA
|
|
CLRB ZERO OUTPUT BUFFER
|
|
SCREM3 LDAA TIMER,X ADD FREQ TO TIMER
|
|
ADDA FREQ,X
|
|
STAA TIMER,X
|
|
BPL SCREM4 ADD AMPLITUDE IF MINUS
|
|
ADDB TEMPA
|
|
SCREM4 LSR TEMPA DECAY AMPLITUDE
|
|
INX NEXT ECHO
|
|
INX
|
|
CPX #SRMEND LAST ECHO?
|
|
BNE SCREM3
|
|
STAB SOUND OUTPUT SOUND
|
|
INC TEMPB ADVANCE TIMER
|
|
BNE SCREM2
|
|
LDX #STABLE LOWER NON-ZERO FREQUENCIES
|
|
CLRB ALL ZERO NOT FLAG
|
|
SCREM5 LDAA FREQ,X
|
|
BEQ SCREM7
|
|
CMPA #$37
|
|
BNE SCREM6
|
|
LDAB #$41 START NEXT ECHO
|
|
STAB FREQ+2,X
|
|
SCREM6 DEC FREQ,X
|
|
INCB SET FLAG
|
|
SCREM7 INX
|
|
INX
|
|
CPX #SRMEND
|
|
BNE SCREM5
|
|
TSTB DONE?
|
|
BNE SCREM2
|
|
RTS
|
|
*
|
|
*ORGAN TUNE
|
|
*
|
|
ORGANT DEC ORGFLG MINUS ORGAN FLAG
|
|
RTS
|
|
ORGNT1 BSR ORGASM
|
|
JMP IRQ3
|
|
ORGASM CLR ORGFLG
|
|
STAA TEMPA TUNE NUMBER
|
|
LDX #ORGTAB
|
|
ORGNT2 LDAA ,X TUNE TABLE LENGTH
|
|
BEQ ORGNT5 INVALID TUNE
|
|
DEC TEMPA
|
|
BEQ ORGNT3
|
|
INCA
|
|
JSR ADDX
|
|
BRA ORGNT2
|
|
ORGNT3 INX
|
|
STX XPTR NOTE POINTER
|
|
JSR ADDX
|
|
STX XPLAY TUNE END
|
|
LDX XPTR
|
|
ORGNT4 LDAA ,X TUNE LOOP
|
|
STAA OSCIL
|
|
LDAA 1,X
|
|
LDX 2,X
|
|
STX DUR
|
|
BSR ORGANL
|
|
LDX XPTR
|
|
INX
|
|
INX
|
|
INX
|
|
INX
|
|
STX XPTR
|
|
CPX XPLAY
|
|
BNE ORGNT4
|
|
ORGNT5 RTS
|
|
*
|
|
*ORGAN NOTE
|
|
*4 BYTES(MODE,OSCILLATOR MASK HI+1,LO+1,NOTE#)
|
|
ORGANN RTS
|
|
*
|
|
*ORGAN LOADER
|
|
*OSCIL=OSCILLATOR MASK, ACCA=DELAY, DUR=DURATION
|
|
*
|
|
ORGANL LDX #RDELAY
|
|
SUBA #2
|
|
LDLP BLS LD1
|
|
CMPA #3
|
|
BEQ LD2
|
|
LDAB #1 NOP
|
|
STAB ,X
|
|
INX
|
|
SUBA #2
|
|
BRA LDLP
|
|
LD2 LDAB #$91 CMPA 0
|
|
STAB ,X
|
|
CLR 1,X
|
|
INX
|
|
INX
|
|
LD1 LDAB #$7E JMP START2
|
|
STAB ,X
|
|
LDAB #ORGAN1!>8 MSB
|
|
STAB 1,X
|
|
LDAB #ORGAN1!.$FF LSB
|
|
STAB 2,X
|
|
*
|
|
*ORGAN ROUTINE
|
|
*DUR=DURATION, OSCILLATOR MASK
|
|
*
|
|
ORGAN LDX DUR
|
|
ORGAN1 CLRA
|
|
FCB $F6 LOAD B EXTND TEMPB
|
|
FDB TEMPB
|
|
INCB
|
|
STAB TEMPB
|
|
ANDB OSCIL MASK OSCILLATORS
|
|
LSRB
|
|
ADCA #0
|
|
LSRB
|
|
ADCA #0
|
|
LSRB
|
|
ADCA #0
|
|
LSRB
|
|
ADCA #0
|
|
LSRB
|
|
ADCA #0
|
|
LSRB
|
|
ADCA #0
|
|
LSRB
|
|
ADCA #0
|
|
ABA
|
|
ASLA
|
|
ASLA
|
|
ASLA
|
|
ASLA
|
|
ASLA
|
|
STAA SOUND
|
|
DEX
|
|
BEQ ORGAN2 NOTE OVER?
|
|
JMP RDELAY
|
|
ORGAN2 RTS
|
|
*
|
|
*PARAMETER TRANSFER
|
|
*
|
|
TRANS PSHA
|
|
TRANS1 LDAA 0,X
|
|
STX XPLAY
|
|
LDX XPTR
|
|
STAA 0,X
|
|
INX
|
|
STX XPTR
|
|
LDX XPLAY
|
|
INX
|
|
DECB
|
|
BNE TRANS1
|
|
PULA
|
|
RTS
|
|
*
|
|
*BACKGROUND END ROUTINE
|
|
*
|
|
BGEND CLRA
|
|
STAA BG1FLG
|
|
STAA BG2FLG
|
|
RTS
|
|
*
|
|
*BACKGROUND SOUND #2 INCREMENT
|
|
*
|
|
BG2INC CLR BG1FLG KILL BG1
|
|
LDAA BG2FLG ACTIVATE BG2
|
|
ANDA #$7F REMOVE OVERRIDE
|
|
CMPA #BG2MAX
|
|
BNE BG2I0
|
|
CLRA
|
|
BG2I0 INCA
|
|
STAA BG2FLG
|
|
RTS
|
|
*
|
|
*BACKGROUND 2 ROUTINE
|
|
*
|
|
BG2 LDAA #(TRBV-SVTAB)/7 GET SOUND#
|
|
JSR GWLD
|
|
LDAA BG2FLG
|
|
ASLA
|
|
ASLA
|
|
COMA
|
|
JSR GEND60
|
|
BG2LP INC GDCNT
|
|
JSR GEND61
|
|
BRA BG2LP
|
|
*
|
|
*
|
|
*
|
|
*
|
|
*SPINNER #1 SOUND
|
|
*
|
|
SP1 LDAA #(CABSHK-VVECT)/9
|
|
JSR VARILD
|
|
LDAB SP1FLG
|
|
CMPB #SP1MAX-1
|
|
BNE SP1A
|
|
CLRB
|
|
SP1A INCB
|
|
STAB SP1FLG
|
|
LDAA #SP1MAX
|
|
SBA
|
|
CLRB
|
|
SP11 CMPA #20
|
|
BLS SP12
|
|
ADDB #14
|
|
DECA
|
|
BRA SP11
|
|
SP12 ADDB #5
|
|
DECA
|
|
BNE SP12
|
|
STAB LOPER
|
|
SP1LP JSR VARI DO IT
|
|
BRA SP1LP
|
|
*
|
|
*LASER BALL BONUS #2
|
|
*
|
|
BON2 LDAA B2FLG
|
|
BNE BON21
|
|
INC B2FLG
|
|
LDAA #(BONV-SVTAB)/7
|
|
BSR GWLD
|
|
BRA GWAVE
|
|
BON21 JMP GEND50
|
|
*
|
|
*GWAVE LOADER
|
|
*
|
|
GWLD TAB MULKT BY 7
|
|
ASLB
|
|
ABA
|
|
ABA
|
|
ABA
|
|
LDX #SVTAB SOUND VECTOR TABLE
|
|
JSR ADDX
|
|
LDAA ,X
|
|
TAB
|
|
ANDA #$F
|
|
STAA GCCNT GET CYCLE COUNT
|
|
LSRB
|
|
LSRB
|
|
LSRB
|
|
LSRB
|
|
STAB GECHO GET #ECHOS
|
|
LDAA 1,X
|
|
TAB
|
|
LSRB
|
|
LSRB
|
|
LSRB
|
|
LSRB
|
|
STAB GECDEC
|
|
ANDA #$F WAVE #
|
|
STAA TEMPA SAVE
|
|
STX TEMPX SAVE INDEX
|
|
LDX #GWVTAB CALC WAVEFORM ADDR
|
|
GWLD2 DEC TEMPA WAVE FORM #
|
|
BMI GWLD3 FINIS
|
|
LDAA ,X
|
|
INCA
|
|
JSR ADDX
|
|
BRA GWLD2
|
|
GWLD3 STX GWFRM
|
|
JSR WVTRAN XSFER WAVE TO RAM
|
|
LDX TEMPX RESTORE INDEX
|
|
LDAA 2,X GET PREDECAY
|
|
STAA PRDECA
|
|
JSR WVDECA DECAY IT
|
|
LDX TEMPX
|
|
LDAA 3,X GET FREQ INC
|
|
STAA GDFINC
|
|
LDAA 4,X GET DELTA FREQ COUNT
|
|
STAA GDCNT
|
|
LDAA 5,X GET PATTERN COUNT
|
|
TAB SAVE
|
|
LDAA 6,X PATTERN OFFSET
|
|
LDX #GFRTAB
|
|
JSR ADDX
|
|
TBA GET PATTERN LENGTH
|
|
STX GWFRQ FREQ TABLE ADDR
|
|
CLR FOFSET
|
|
JSR ADDX
|
|
STX FRQEND
|
|
RTS
|
|
*
|
|
*GWAVE ROUTINE
|
|
*ACCA= FREQ PATTERN LENGTH, X= FREQ PAT ADDR
|
|
*
|
|
GWAVE LDAA GECHO
|
|
STAA GECNT
|
|
GWT4 LDX GWFRQ
|
|
STX XPLAY
|
|
GPLAY LDX XPLAY GET NEW PERIOD
|
|
LDAA ,X
|
|
ADDA FOFSET
|
|
STAA GPER
|
|
CPX FRQEND
|
|
BEQ GEND FINISH ON ZERO
|
|
LDAB GCCNT CYCLE COUNT
|
|
INX
|
|
STX XPLAY
|
|
GOUT LDX #GWTAB SETUP WAVEFORM POINTER
|
|
GOUTLP LDAA GPER
|
|
GPRLP DECA WAIT FOR PERIOD
|
|
BNE GPRLP
|
|
LDAA ,X OUTPUT SOUND
|
|
STAA SOUND
|
|
GPR1 INX
|
|
CPX WVEND END OF WAVE?
|
|
BNE GOUTLP
|
|
DECB
|
|
BEQ GPLAY
|
|
INX
|
|
DEX
|
|
INX
|
|
DEX
|
|
INX
|
|
DEX
|
|
INX
|
|
DEX
|
|
NOP
|
|
NOP
|
|
BRA GOUT SYNC 36
|
|
GEND LDAA GECDEC
|
|
BSR WVDECA
|
|
GEND40 DEC GECNT ECHO ON?
|
|
BNE GWT4 YES
|
|
LDAA B2FLG STOP BONUS
|
|
BNE GEND1
|
|
GEND50 LDAA GDFINC CONTINUE FOR FREQ MOD SOUNDS
|
|
BEQ GEND1 NO
|
|
DEC GDCNT DELTA FREQ OVER?
|
|
BEQ GEND1 YES...
|
|
ADDA FOFSET UPDATE FREQ OFFSET
|
|
GEND60 STAA FOFSET
|
|
GEND61 LDX GWFRQ GET INDEX
|
|
CLRB START FOUND FLAG INIT CLEAR
|
|
GW0 LDAA FOFSET INC OR DEC?
|
|
TST GDFINC
|
|
BMI GW1 DEC
|
|
ADDA ,X INC
|
|
BCS GW2 CARRY=OVERFLOW
|
|
BRA GW2A
|
|
GW1 ADDA ,X DEC
|
|
BEQ GW2 OVERFLOW ON EQ
|
|
BCS GW2A OVERFLOW IF CARRY CLEAR
|
|
GW2 TSTB FOUND START YET?
|
|
BEQ GW2B NO
|
|
BRA GW3 YES, THIS IS THE END
|
|
GW2A TSTB
|
|
BNE GW2B ALREADY FOUND START
|
|
STX GWFRQ FOUND START
|
|
INCB
|
|
GW2B INX
|
|
CPX FRQEND
|
|
BNE GW0 NOT OVER YET
|
|
TSTB FOUND START?
|
|
BNE GW3 YES
|
|
RTS ALL OVER
|
|
GW3 STX FRQEND
|
|
LDAA GECDEC RE:XSFER WAVE?
|
|
BEQ GEND0 NO
|
|
BSR WVTRAN XSFER WAVE
|
|
LDAA PRDECA
|
|
BSR WVDECA
|
|
GEND0 JMP GWAVE
|
|
GEND1 RTS TERMINATE
|
|
*
|
|
*WAVE TRANSFER ROUTINE
|
|
*
|
|
WVTRAN LDX #GWTAB
|
|
STX XPTR
|
|
LDX GWFRM
|
|
LDAB ,X GET WAVE LENGTH
|
|
INX
|
|
JSR TRANS
|
|
LDX XPTR
|
|
STX WVEND GET END ADDR
|
|
RTS
|
|
*
|
|
*WAVE DECAY ROUTINE/ DECAY AMOUNT IN ACCA(1/16 PER DECAY)
|
|
*
|
|
WVDECA TSTA
|
|
BEQ WVDCX NO DECAY
|
|
LDX GWFRM ROM WAVE INDEX
|
|
STX XPLAY
|
|
LDX #GWTAB
|
|
STAA TEMPB DECAY FACTOR
|
|
WVDLP STX XPTR
|
|
LDX XPLAY
|
|
LDAB TEMPB
|
|
STAB TEMPA DECAY FACTOR TEMP
|
|
LDAB 1,X OFFSET FOR WAVE LENGTH
|
|
LSRB
|
|
LSRB
|
|
LSRB
|
|
LSRB CALC 1/16TH
|
|
INX
|
|
STX XPLAY
|
|
LDX XPTR
|
|
LDAA ,X
|
|
WVDLP1 SBA DECAY
|
|
DEC TEMPA
|
|
BNE WVDLP1
|
|
STAA ,X
|
|
INX
|
|
CPX WVEND END OF WAVE?
|
|
BNE WVDLP NO
|
|
WVDCX RTS
|
|
*
|
|
* INTERRUPT PROCESSING
|
|
*
|
|
IRQ LDS #ENDRAM RE-INITIALIZE STACK
|
|
LDAA SOUND+2 GET INPUT TRIGGER
|
|
LDX #DECAYZ RANDY'S BRAIN DAMAGE
|
|
STX XDECAY
|
|
LDX #FREQ1
|
|
STX XPTR
|
|
LDAB #$AF
|
|
STAB AMP0
|
|
CLI NOW ALLOW IRQS
|
|
COMA INVERT INPUT
|
|
ANDA #$3F MASK GARB
|
|
LDAB ORGFLG
|
|
BEQ IRQ00
|
|
JSR ORGNT1 ORGAN TUNE
|
|
IRQ00 CLRB
|
|
CMPA #SP1SND
|
|
BEQ IRQ00A
|
|
STAB SP1FLG
|
|
IRQ00A CMPA #B2SND
|
|
BEQ IRQ000
|
|
STAB B2FLG
|
|
IRQ000 TSTA
|
|
BEQ IRQ3 INVALID INPUT
|
|
DECA REMOVE OFFSET
|
|
CMPA #$1F
|
|
BLT IRQ001
|
|
CMPA #$3D
|
|
BGT IRQ00C
|
|
CMPA #$2A
|
|
BHI IRQ00B
|
|
SUBA #$10
|
|
BRA IRQ002
|
|
IRQ00C SUBA #$39
|
|
BRA IRQ21
|
|
IRQ00B SUBA #$1C
|
|
BRA IRQ2
|
|
IRQ001 CMPA #$0C
|
|
BHI IRQ10
|
|
IRQ002 JSR GWLD GWAVE SOUNDS
|
|
JSR GWAVE
|
|
BRA IRQ3
|
|
IRQ10 CMPA #$1B SPECIAL SOUND?
|
|
BHI IRQ20 VARI SOUND
|
|
SUBA #$D SUB OFFSET
|
|
IRQ2 ASLA DOUBLE FOR ADDRESSING
|
|
LDX #JMPTBL INDEX TO JUMP TABLE
|
|
BSR ADDX GET CORRECT INDEX
|
|
LDX 0,X GET ADDRESS TO INDEX
|
|
JSR 0,X PERFORM IT
|
|
BRA IRQ3
|
|
IRQ20 SUBA #$1C
|
|
IRQ21 JSR VARILD
|
|
JSR VARI
|
|
IRQ3 LDAA BG1FLG BGROUND ACTIVE?
|
|
ORAA BG2FLG
|
|
BEQ * NOPE
|
|
CLRA
|
|
STAA B2FLG KILL BONUSES
|
|
LDAA BG1FLG
|
|
BEQ IRQXX
|
|
JMP BG1
|
|
IRQXX JMP BG2
|
|
*
|
|
* ADD A TO INDEX REGISTER
|
|
*
|
|
ADDX STX XPLAY
|
|
ADDA XPLAY+1
|
|
STAA XPLAY+1
|
|
BCC ADDX1
|
|
INC XPLAY
|
|
ADDX1 LDX XPLAY
|
|
RTS
|
|
*
|
|
* DIAGNOSTIC PROCESSING HERE
|
|
*
|
|
NMI SEI
|
|
LDS #ENDRAM RESET THE STACK
|
|
LDX #$FFFF
|
|
CLRB
|
|
NMI1 ADCB 0,X
|
|
DEX
|
|
CPX #$F000
|
|
BNE NMI1
|
|
CMPB 0,X
|
|
BEQ NMI2
|
|
WAI
|
|
NMI2 JSR HBOMB
|
|
LDAA #2
|
|
JSR ORGASM
|
|
LDAA #1
|
|
JSR ORGASM
|
|
BRA NMI KEEP LOOPING
|
|
*
|
|
*SPECIAL ROUTINE JUMP TABLE
|
|
*
|
|
JMPTBL FDB SP1,BG1,BG2INC,LITE
|
|
FDB BON2,BGEND,TURBO,APPEAR
|
|
FDB THRUST,CANNON,RADIO,HYPER
|
|
FDB SCREAM,ORGANT,ORGANN
|
|
*
|
|
JMPTB1 FDB SND2,SND5,THNDR,HSTD,ATARI
|
|
FDB SIREN,ORRRR,PERK$$,SQRT,START
|
|
FDB PLANE,SND16,SND17,LAUNCH,CDR
|
|
FDB KNOCK,ZIREN,WHIST,HBOMB
|
|
*
|
|
*VARI VECTORS
|
|
*
|
|
VVECT EQU *
|
|
SAW FCB $40,$01,$00,$10,$E1,$00,$80,$FF,$FF
|
|
FOSHIT FCB $28,$01,$00,$08,$81,$02,$00,$FF,$FF
|
|
QUASAR FCB $28,$81,$00,$FC,$01,$02,$00,$FC,$FF
|
|
CABSHK FCB $FF,$01,$00,$18,$41,$04,$80,$00,$FF
|
|
CSCALE FCB $00,$FF,$08,$FF,$68,$04,$80,$00,$FF
|
|
MOSQTO FCB $28,$81,$00,$FC,$01,$02,$00,$FC,$FF
|
|
VARBG1 FCB $60,$01,$57,$08,$E1,$02,$00,$FE,$80
|
|
*
|
|
*RADIO SOUND WAVEFORM
|
|
*
|
|
RADSND FCB $8C,$5B,$B6,$40,$BF,$49,$A4,$73
|
|
FCB $73,$A4,$49,$BF,$40,$B6,$5B,$8C
|
|
*
|
|
* NOTE DEFINITIONS AND ALL THAT JAZZ
|
|
*
|
|
AF1 EQU $F847
|
|
A1 EQU $F83F
|
|
BF1 EQU $F837
|
|
B1 EQU $F830
|
|
C1 EQU $F829
|
|
CS1 EQU $F823
|
|
D1 EQU $F81D
|
|
EF1 EQU $F817
|
|
E1 EQU $F812
|
|
F1 EQU $F80D
|
|
FS1 EQU $F808
|
|
G2 EQU $F804
|
|
AF2 EQU $7C47
|
|
A2 EQU $7C3F
|
|
BF2 EQU $7C37
|
|
B2 EQU $7C30
|
|
C2 EQU $7C29
|
|
CS2 EQU $7C23
|
|
D2 EQU $7C1D
|
|
EF2 EQU $7C17
|
|
E2 EQU $7C12
|
|
F2 EQU $7C0D
|
|
FS2 EQU $7C08
|
|
G3 EQU $7C04
|
|
AF3 EQU $3E47
|
|
A3 EQU $3E3F
|
|
BF3 EQU $3E37
|
|
B3 EQU $3E30
|
|
C3 EQU $3E29
|
|
CS3 EQU $3E23
|
|
D3 EQU $3E1D
|
|
EF3 EQU $3E17
|
|
E3 EQU $3E12
|
|
F3 EQU $3E0D
|
|
FS3 EQU $3E08
|
|
G4 EQU $3E04
|
|
AF4 EQU $1F47
|
|
A4 EQU $1F3F
|
|
BF4 EQU $1F37
|
|
B4 EQU $1F30
|
|
C4 EQU $1F29
|
|
CS4 EQU $1F23
|
|
D4 EQU $1F1D
|
|
EF4 EQU $1F17
|
|
E4 EQU $1F12
|
|
F4 EQU $1F0D
|
|
FS4 EQU $1F08
|
|
RS EQU $0004
|
|
TR EQU TG
|
|
*
|
|
*ORGAN TUNE TABLE
|
|
*OSCILLATOR MASK(1),DELAY(1),DURATION(2)
|
|
*
|
|
ORGTAB EQU *
|
|
FCB NINTH-FIFTH-1
|
|
FIFTH EQU *
|
|
FDB G2,TG/FIF/4
|
|
FDB RS,TR/FIF/4
|
|
FDB G2,TG/FIF/4
|
|
FDB RS,TR/FIF/4
|
|
FDB G2,TG/FIF/4
|
|
FDB RS,TR/FIF/4
|
|
FDB EF1,TEF/FIF/2*7
|
|
FCB TUNEND-NINTH
|
|
NINTH EQU *
|
|
FDB D4,TD/NIN/4
|
|
FDB RS,TR/NIN/4
|
|
FDB D3,TD/NIN/4
|
|
FDB RS,TR/NIN/4*5
|
|
FDB A3,TA/NIN/4
|
|
FDB RS,TR/NIN/4
|
|
FDB A2,TA/NIN/4
|
|
FDB RS,TR/NIN/4*5
|
|
FDB D2,TD/NIN/4
|
|
FDB RS,TR/NIN/4
|
|
FDB D1,TD/NIN/4
|
|
FDB RS,TR/NIN/4
|
|
FDB A2,TA/NIN/4
|
|
FDB RS,TR/NIN/4
|
|
FDB A1,TA/NIN/4
|
|
FDB RS,TR/NIN/4*7
|
|
FDB A2,TA/NIN/4
|
|
FDB D2,TD/NIN/4
|
|
FDB E2,TE/NIN/4
|
|
FDB F2,TF/NIN/4
|
|
FDB E2,TE/NIN/4
|
|
FDB F2,TF/NIN/4
|
|
FDB G3,TG/NIN/4
|
|
FDB F2,TF/NIN/4
|
|
FDB E2,TE/NIN/4
|
|
FDB D2,TD/NIN/4
|
|
FDB BF3,TBF/NIN/4
|
|
FDB A3,TA/NIN/4
|
|
FDB G3,TG/NIN/4
|
|
FDB F2,TF/NIN/4
|
|
FDB E2,TE/NIN/4
|
|
FDB D2,TD/NIN/4
|
|
FDB CS2,TCS/NIN/4
|
|
FDB D2,TD/NIN/4
|
|
FDB E2,TE/NIN/4
|
|
FDB D3,TD/NIN/4
|
|
FDB RS,TR/NIN/4
|
|
FDB D2,TD/NIN/4
|
|
FDB RS,TR/NIN/4
|
|
FDB A3,TA/NIN/4
|
|
FDB RS,TR/NIN/4
|
|
FDB A2,TA/NIN/4
|
|
FDB RS,TR/NIN/4*5
|
|
FDB D1,TD/NIN/2*5
|
|
TUNEND FCB 0 LAST TUNE
|
|
*
|
|
*ORGAN NOTE TABLE
|
|
*SCALE AF A BF B C CS
|
|
NOTTAB FCB $47,$3F,$37,$30,$29,$23
|
|
* D EF E F FS G
|
|
FCB $1D,$17,$12,$0D,$08,$04
|
|
*
|
|
*WAVE TABLE
|
|
*1ST BYTE= WAVELENGTH
|
|
*
|
|
GWVTAB EQU *
|
|
GS2 FCB 8,127,217,255,217,127,36,0,36
|
|
GSSQ2 FCB 8,0,64,128,0,255,0,128,64
|
|
GS1 FCB 16,127,176,217,245,255,245,217,176
|
|
FCB 127,78,36,9,0,9,36,78
|
|
GS12 FCB 16,127,197,236,231,191,141,109,106
|
|
FCB 127,148,146,113,64,23,18,57
|
|
GSQ22 FCB 16,$FF,$FF,$FF,$FF,0,0,0,0
|
|
FCB $FF,$FF,$FF,$FF,0,0,0,0
|
|
GS72 FCB 72,138,149,160,171,181,191,200,209
|
|
FCB 218,225,232,238,243,247,251,253,254,255
|
|
FCB 254,253,251,247,243,238,232,225,218
|
|
FCB 209,200,191,181,171,160,149,138,127
|
|
FCB 117,106,95,84,74,64,55,46,37,30,23,17,12
|
|
FCB 8,4,2,1,0
|
|
FCB 1,2,4,8,12,17,23,30,37,46,55,64,74,84
|
|
FCB 95,106,117,127
|
|
GS1.7 FCB 16,89,123,152,172,179,172,152,123
|
|
FCB 89,55,25,6,0,6,25,55
|
|
*****************************************************
|
|
GSQ2 FCB 8,$FF,$FF,$FF,$FF,$00,$00,$00,$00
|
|
GS1234 FCB 16,118,255,184,208,157,230,106,130
|
|
FCB 118,234,129,134,78,156,50,99
|
|
MW1 FCB 16,0,$F4,0,$E8,0,$DC,0,$E2
|
|
FCB 0,$DC,0,$E8,0,$F4,0,0
|
|
HBPAT2 FCB 72,69,75,80,86,91,96,100,105
|
|
FCB 109,113,116,119,122,124,126,127,127,128
|
|
FCB 127,127,126,124,122,119,116,113,109
|
|
FCB 105,100,96,91,86,80,75,69,64
|
|
FCB 59,53,48,42,37,32,28,23,19,15,12,9,6
|
|
FCB 4,2,1,1,0
|
|
FCB 1,1,2,4,6,9,12,15,19,23,28,32,37,42
|
|
FCB 48,53,59,64
|
|
*
|
|
*GWAVE SOUND VECTOR TABLE
|
|
*VECTOR FORMAT
|
|
*BYTE 0: GECHO,GCCNT
|
|
*BYTE 1: GECDEC,WAVE#
|
|
*BYTE 2: PREDECAY FACTOR
|
|
*BYTE 3: GDFINC
|
|
*BYTE 4: VARIABLE FREQ COUNT
|
|
*BYTE 5: FREQ PATTERN LENGTH
|
|
*BYTE 6: FREQ PATTERN OFFSET
|
|
*
|
|
SVTAB EQU *
|
|
HBDV FCB $81,$24,0,0,0,22,HBDSND-GFRTAB 1
|
|
STDV FCB $12,$05,$1A,$FF,0,39,STDSND-GFRTAB 2
|
|
DP1V FCB $11,$05,$11,1,15,1,SWPAT-GFRTAB 3
|
|
XBV FCB $11,$31,0,1,0,13,SPNSND-GFRTAB 4
|
|
BBSV FCB $F4,$12,$0,0,0,20,BBSND-GFRTAB 5
|
|
HBEV FCB $41,$45,0,0,0,15,HBESND-GFRTAB 6
|
|
PROTV FCB $21,$35,$11,$FF,0,13,SPNSND-GFRTAB 7
|
|
SPNRV FCB $15,$00,0,$FD,0,1,SPNR-GFRTAB 8
|
|
CLDWNV FCB $31,$11,0,1,0,3,COOLDN-GFRTAB 9
|
|
SV3 FCB $01,$15,1,1,1,1,BBSND-GFRTAB 10
|
|
ED10 FCB $F6,$53,3,0,2,6,ED10FP-GFRTAB 11
|
|
ED12 FCB $6A,$10,2,0,2,6,ED13FP-GFRTAB 12
|
|
ED17 FCB $1F,$12,0,$FF,$10,4,SPNR-GFRTAB 13
|
|
BONV FCB $31,$11,0,$FF,0,13,BONSND-GFRTAB
|
|
TRBV FCB $12,$06,$0,$FF,1,9,TRBPAT-GFRTAB
|
|
****************************************************
|
|
HUNV FCB $14,$17,$00,$00,$00,14,HBTSND-GFRTAB
|
|
SPD FCB $F4,$11,$00,$00,$00,14,HBTSND-GFRTAB
|
|
SPNV FCB $21,$30,$00,$01,$00,13,SPNSND-GFRTAB
|
|
STRT FCB $13,$10,$00,$FF,$00,09,YUKSND-GFRTAB
|
|
SP1V FCB $F4,$18,$00,$00,$00,18,SP2SND-GFRTAB
|
|
SSPV FCB $82,$22,$00,$00,$00,24,SSPSND-GFRTAB
|
|
BMPV FCB $F2,$19,$00,$00,$00,22,BWSSND-GFRTAB
|
|
WIRDV FCB $21,$30,$00,$FF,$00,27,$0D
|
|
GDYUKV FCB $F1,$19,$00,$00,$00,14,YUKSND-GFRTAB
|
|
BK8 FCB $31,$19,$00,$01,$00,03,COOLDN-GFRTAB
|
|
SF10 FCB $41,$02,$D0,$00,$00,39,STDSND-GFRTAB
|
|
BIL30 FCB $03,$15,$11,$FF,$00,13,SPNSND-GFRTAB
|
|
*GWAVE FREQ PATTERN TABLE
|
|
*
|
|
GFRTAB EQU *
|
|
*BONUS SOUND
|
|
BONSND FCB $A0,$98,$90,$88,$80,$78,$70,$68
|
|
FCB $60,$58,$50,$44,$40
|
|
*HUNDRED POINT SOUND
|
|
HBTSND FCB 1,1,2,2,4,4,8,8,$10,$10,$30,$60,$C0,$E0
|
|
*SPINNER SOUND
|
|
SPNSND FCB 1,1,2,2,3,4,5,6,7,8,9,$A,$C
|
|
*TURBINE START UP
|
|
TRBPAT FCB $80,$7C,$78,$74,$70,$74,$78,$7C,$80
|
|
*HEARTBEAT DISTORTO
|
|
HBDSND FCB 1,1,2,2,4,4,8,8,$10,$20,$28
|
|
FCB $30,$38,$40,$48,$50,$60,$70,$80,$A0,$B0,$C0
|
|
*SWEEP PATTERN
|
|
SWPAT EQU *
|
|
*BIGBEN SOUNDS
|
|
BBSND FCB 8,64,8,64,8,64,8,64,8,64
|
|
FCB 8,64,8,64,8,64,8,64,8,64
|
|
*HEARTBEAT ECHO
|
|
HBESND FCB 1,2,4,8,9,$A,$B,$C,$E,$F,$10
|
|
FCB $12,$14,$16
|
|
*SPINNER SOUND "DRIP"
|
|
SPNR FCB $40
|
|
*COOL DOWNER
|
|
COOLDN FCB $10,8,1
|
|
*START DISTORTO SOUND
|
|
STDSND FCB 1,1,1,1,2,2,3,3,4,4,5,6,8,$A,$C,$10
|
|
FCB $14,$18,$20,$30,$40,$50,$40,$30
|
|
FCB $20,$10,$C,$A,8,7,6,5,4,3,2,2,1,1,1
|
|
*ED'S SOUND 10
|
|
ED10FP FCB 7,8,9,$A,$C,8
|
|
*ED'S SOUND 13
|
|
ED13FP FCB $17,$18,$19,$1A,$1B,$1C
|
|
FCB 0,0,0,0 FILLER
|
|
****************************************************
|
|
YUKSND FCB $8,$80,$10,$78,$18,$70,$20,$60,$28,$58,$30
|
|
FCB $50,$40,$48,$00
|
|
SP2SND FCB $01,$08,$10,$01,$08,$10,$01,$08,$10
|
|
FCB $01,$08,$10,$01,$08,$10,$01,$08,$10,$00
|
|
SSPSND FCB $10,$20,$40,$10,$20,$40,$10,$20,$40,$10,$20,$40
|
|
FCB $10,$20,$40,$10,$20,$40,$10,$20,$40,$10,$20,$40,$00
|
|
BWSSND FCB $01,$40,$02,$42,$3,$43,$4,$44,$5,$45,$6,$46,$7,$47
|
|
FCB $8,$48,$9,$49,$A,$4A,$B,$4B,$00
|
|
*
|
|
* VECTORS HERE
|
|
*
|
|
ORG VECTOR
|
|
IRQV FDB IRQ
|
|
SWIV FDB SETUP
|
|
NMIV FDB NMI
|
|
RESETV FDB SETUP
|
|
END CKSUM
|