2587 lines
40 KiB
Plaintext
Executable File
2587 lines
40 KiB
Plaintext
Executable File
NAM JOUST SOUND ROM STARTED 06/15/1982
|
|
SUBTTL
|
|
*COPYRIGHT WILLIAMS ELECTRONICS INC. 1982
|
|
*PROGRAMMERS: EUGENE P. JARVIS, SAM DICKER,RANDY PFEIFFER,JOHN KOTLARIK
|
|
* PAUL G. DUSSAULT,CARY W. KOLKER,TIM MURPHY
|
|
* AND A CAST OF THOUSANDS......
|
|
*
|
|
*
|
|
*SYSTEM CONSTANTS
|
|
*
|
|
ROM EQU $F000
|
|
SOUND SET $400
|
|
CKORG EQU $EF00 CHECKSUM PROG ORG
|
|
ENDRAM SET $7F
|
|
VECTOR EQU $FFF8 RESET,INT VECTORS
|
|
WVELEN EQU 72
|
|
*
|
|
* SCREAM EQUATES
|
|
*
|
|
ECHOS EQU 4
|
|
FREQ EQU 0
|
|
TIMER EQU 1
|
|
*
|
|
*GLOBALS
|
|
*
|
|
ORG 0
|
|
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
|
|
* BOMB RAM
|
|
ORG LOCRAM
|
|
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
|
|
*
|
|
*
|
|
*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
|
|
*
|
|
*
|
|
*
|
|
*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
|
|
|
|
* 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
|
|
RMB 2 FOR POINTER
|
|
*
|
|
* MAIN PROGRAM
|
|
*
|
|
ORG ROM
|
|
FCB $74 CHECKSUM BYTE
|
|
*
|
|
*
|
|
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
|
|
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
|
|
SND4 LDX #VEC04 SOUND 4
|
|
BRA THNDR1
|
|
SND5 LDX #VEC05 SOUND 5
|
|
BRA THNDR1
|
|
*
|
|
*
|
|
*
|
|
* 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
|
|
*
|
|
*
|
|
* SINGLE OSCILLATOR SOUND CALLS
|
|
*
|
|
PERK1 JSR MOVE
|
|
JSR SING
|
|
RTS
|
|
ATARI LDX #VEC02X
|
|
BRA PERK1
|
|
|
|
PERK$1 BSR PERK1
|
|
BSR ECHO
|
|
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
|
|
|
|
*
|
|
*TURBO
|
|
*
|
|
TURBO LDX #TRBO
|
|
JMP NOISLG
|
|
TRBO FCB $10,$FF,1,1,1
|
|
*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
|
|
GALMD FCB $10,$F0,$F0,1,$30
|
|
*
|
|
*MAIN GALLOP LOOP
|
|
*
|
|
MGAW LDX #GALMD
|
|
BSR NOISLD
|
|
GLP BSR GP1
|
|
BSR GP1
|
|
LDAA #$28
|
|
STAA NFRQ2
|
|
COM NFFLG
|
|
BSR NOIN
|
|
COM NFFLG
|
|
LDAA #$1E
|
|
BSR DELAY
|
|
BRA GLP
|
|
GP1 LDAA #$30
|
|
STAA NFRQ2
|
|
BSR NOIN
|
|
LDAA #2
|
|
BSR DELAY
|
|
RTS
|
|
DELAY TAB
|
|
LDX #$400
|
|
DLP1 TBA
|
|
DLP DECA
|
|
BNE DLP
|
|
DEX
|
|
CPX #0
|
|
BNE DLP1
|
|
LDAA #$F0
|
|
STAA NAMP
|
|
RTS
|
|
*
|
|
*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
|
|
*
|
|
|
|
*
|
|
*LIGHTNING
|
|
*
|
|
LITE LDAA #1
|
|
STAA DFREQ
|
|
LDAB #3
|
|
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
|
|
*
|
|
*
|
|
*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
|
|
*
|
|
*
|
|
*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
|
|
*
|
|
*
|
|
*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
|
|
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
|
|
TSTA
|
|
BEQ IRQ3
|
|
DECA
|
|
CMPA #$12+2
|
|
BHI 1$
|
|
JSR GWLD
|
|
JSR GWAVE
|
|
BRA IRQ3
|
|
*
|
|
1$ CMPA #$1D+2
|
|
BHI 3$
|
|
SUBA #$13+2
|
|
LDX #JMPTBL
|
|
ASLA
|
|
JSR ADDX
|
|
LDX ,X
|
|
JSR ,X
|
|
BRA IRQ3
|
|
|
|
3$ CMPA #$20+2
|
|
BHI 4$
|
|
SUBA #$1E+2 NOISE REQUEST
|
|
JSR JKNOIS
|
|
BRA IRQ3
|
|
|
|
4$ CMPA #$24+2
|
|
BHI IRQ3
|
|
SUBA #$21+2
|
|
JSR WALSH
|
|
|
|
IRQ3 BRA *
|
|
*
|
|
* 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 KNOCK
|
|
BRA NMI KEEP LOOPING
|
|
*
|
|
*SPECIAL ROUTINE JUMP TABLE
|
|
*
|
|
JMPTBL FDB LITE $14
|
|
FDB SND4,SND5,THNDR,ATARI 15,16,17,18
|
|
FDB PERK$$,SQRT 19,1A
|
|
FDB KNOCK,WHIST 1B,1C
|
|
FDB SETUP,WINGDN 1D,1E
|
|
*
|
|
*VARI VECTORS
|
|
*
|
|
VVECT EQU *
|
|
* NONE AS OF YET
|
|
*
|
|
*
|
|
*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
|
|
SIN3.SR FCB 36 WAVE C
|
|
FCB $7F,$B0,$D6,$E8,$E3,$C9,$A3,$7B,$5E,$54,$5E,$7B
|
|
FCB $A3,$C9,$E3,$E8,$D6,$B0,$7F,$4C,$26,$14,$19,$33
|
|
FCB $5A,$81,$9E,$A8,$9E,$81,$5A,$33,$19,$14,$26,$4C
|
|
|
|
*
|
|
*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 *
|
|
DP1V FCB $11,$05,$11,1,15,1,SWPAT-GFRTAB 1
|
|
PROTV FCB $21,$35,$11,$FF,0,13,SPNSND-GFRTAB 2
|
|
SPNRV FCB $15,$00,0,$FD,0,1,SPNR-GFRTAB 3
|
|
CLDWNV FCB $31,$11,0,1,0,3,COOLDN-GFRTAB 4
|
|
ED10 FCB $F6,$53,3,0,2,6,ED10FP-GFRTAB 5
|
|
HUNV FCB $14,$17,$00,$00,$00,14,HBTSND-GFRTAB 6
|
|
STRT FCB $13,$10,$00,$FF,$00,09,YUKSND-GFRTAB 7
|
|
BMPV FCB $F2,$19,$00,$00,$00,22,BWSSND-GFRTAB 8
|
|
SF10 FCB $41,$02,$D0,$00,$00,39,STDSND-GFRTAB 9
|
|
SV0 FCB $52,$36,$00,$00,$00,$10,HBDSND-GFRTAB A
|
|
SV1 FCB $73,$29,$03,$00,$00,$10,GVA1-GFRTAB B
|
|
SV2 FCB $11,$40,$03,$ED,$09,$09,TRBPAT-GFRTAB C
|
|
SVA FCB $16,$82,$03,$0E,$01,$0E,GV27-GFRTAB D
|
|
SVB FCB $11,$29,$00,$F0,$05,$08,GVB1-GFRTAB E
|
|
SVF FCB $63,$26,$06,$00,$00,$10,GVA1-GFRTAB F
|
|
FCB $21,$25,$00,$03,$0A,03,COOLDN-GFRTAB 10
|
|
FCB $43,$0A,$00,$04,$02,13,SPNSND-GFRTAB 11
|
|
ED17 FCB $1F,$12,$00,$FF,$10,04,SPNR-GFRTAB 12
|
|
CYNEW FCB $11,$10,$00,$0A,$00,01,YUKSND-GFRTAB 13
|
|
WIRDV FCB $21,$30,$00,$FF,$00,27,HBTSND-GFRTAB 14
|
|
WIRDV2 FCB $22,$21,$00,$FE,$00,27,HBTSND-GFRTAB 15
|
|
|
|
*GWAVE FREQ PATTERN TABLE
|
|
*
|
|
GFRTAB EQU *
|
|
*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
|
|
*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
|
|
GV27 FCB $0C
|
|
YUKSND FCB $8,$80,$10,$78,$18,$70,$20,$60,$28,$58,$30
|
|
FCB $50,$40,$48,$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
|
|
GVA1 FCB $14,$18,$20,$30,$40,$50,$40,$30
|
|
FCB $20,$10,$0C,$0A,$08,$07,$06,$05
|
|
GVB1 FCB $CC,$BB,$60,$10,$EE,$AA,$50,$00
|
|
|
|
* AND THE EVER POPULAR COPYRIGHT MESSAGE
|
|
FCC "(C)1982 WILLIAMS ELECTRONICS"
|
|
|
|
* NAM WALSH FUNCTION SOUND MACHINE V2
|
|
|
|
* T. MURPHY 11/10/81
|
|
|
|
MINPER EQU 25 6*25 = 150 MICROSECS IS MIN SAMPLE PERIOD
|
|
SOUND SET $400
|
|
|
|
WORG
|
|
ORG 0
|
|
|
|
RMB 8 GLOBALS
|
|
|
|
FCMDPT RMB 2 PTR TO CURRENT FILTER COMMAND (USER INITIALIZED)
|
|
PCMDPT RMB 2 SAME FOR PITCH PROGRAM
|
|
SMPPER RMB 2 HI BYTE * 6 IS SAMPLE DELAY
|
|
HRMTBL RMB 2 PTR TO HARMONIC FN VALUE TABLE
|
|
|
|
WAVSRT RMB 16 WAVEFORM
|
|
|
|
PERVEL RMB 2 ADDED TO SMPPER EACH WAVE (PITCH CONTROL)
|
|
GLBPRO RMB 1 GLOBAL PERIOD OFFSET
|
|
TMPPER RMB 1 = SMPPER + GLBPRO
|
|
PERACM RMB 1 USED TO CALCULATE SMALL PITCH ADJUSTS
|
|
|
|
PWVCNT EQU * #OF WAVES TO PLAY BEFORE NEXT PITCH CMD (P PROGRAM)
|
|
PSTK RMB 2 TOP OF PITCH RETURN/COUNT STACK
|
|
PWAVPT RMB 2 PTR TO CURRENT SAMPLE BEING PLAYED
|
|
PCMD RMB 1 CURRENT PITCH CMD
|
|
PTEMP RMB 2
|
|
|
|
FVECT RMB 3 JUMP TO CURRENT FILTER STATE (FILTER PGM CONTROL)
|
|
FCNT EQU * MISC CTR, WAVE DELAY IF <0
|
|
FSTK RMB 2 TOP OF FILTER RETURN/COUNT STACK
|
|
HAPTR RMB 2 PTR TO AMPLITUDE OF CURRENT HARMONIC
|
|
|
|
FWVPTR RMB 2 PTS TO WAVE PT BEING ALTERED (FILTER GUTS)
|
|
HAMP RMB 1 CURRENT HARMONIC AMPLITUDE
|
|
FMSK RMB 1 BIT MASK SELECTS HARMONIC FN VALUE
|
|
* NEXT 3 MUST BE IN ORDER
|
|
FNHI RMB 1 HOLDS CURRENT HARMONIC FN VALUES AS BITS
|
|
FNLO RMB 1 ALSO USED AS TEMPORARIES
|
|
FCMD RMB 1 CURRENT INSTRUCTION BEING EXECUTED
|
|
|
|
FBTM EQU *-3 FILTER STACK GROWS UP
|
|
ORG 95
|
|
PBTM EQU * PITCH STACK GROWS DOWN
|
|
|
|
RMB 1 ADD2HA FOR CONST WAVE
|
|
ADD2HA RMB 8 ADD ADD2HA(8-I)*HARM(I) TO WAVE
|
|
CNAMP RMB 1 CURRENT AMP OF CONST FUNCTION
|
|
CURHA RMB 8 CURHA(8-I) = <WAVE!HARM(I)>
|
|
|
|
ENDRAM SET 127
|
|
|
|
ORG WORG
|
|
|
|
SUBTTL WAVE PLAYER AND PITCH MODIFICATION
|
|
|
|
* PLAY A SAMPLE, REMAINING DELAY IN B. TOTAL DELAY = MIN (60,B*6) MICS.
|
|
|
|
NTHRVC SUBB #13 LOOP DELAY IS 78 CYCLES
|
|
PSHB
|
|
JSR FVECT (62)
|
|
PULB
|
|
|
|
NXTSMP CMPB #20 CALL HERE
|
|
BHI NTHRVC MODIFY WAVE IF WE HAVE ENOUGH TIME
|
|
|
|
NOP
|
|
LDAA PERACM
|
|
ADDA PERVEL+1
|
|
STAA PERACM
|
|
ADCB #-10 MINIMUM DELAY + FRACTION
|
|
|
|
DECB WASTE SMALL TIME
|
|
BPL *-1
|
|
|
|
LDAA PWAVPT+1 PT TO NEXT BYTE OF 16 BYTE WAVE
|
|
INCA
|
|
ANDA #15
|
|
ORAA #WAVSRT ! WAVSRT MUST BE DIVISIBLE BY 16 !
|
|
STAA PWAVPT+1
|
|
|
|
LDX PWAVPT
|
|
LDAB ,X
|
|
STAB SOUND
|
|
|
|
ANDA #15 0 IFF RESTARTING WAVE
|
|
RTS
|
|
|
|
* PLAYS WAVE AND ALTERS PITCH ACCORDING TO PITCH CMDS.
|
|
* SMPPER IS INITIAL PITCH, PCMDPT IS START PITCH PROGRAM,
|
|
* FCMDPT IS START WAVE MODIFIER (FILTER) PROGRAM.
|
|
|
|
WSM CLRA
|
|
LDX #WAVSRT
|
|
LDAB #CURHA+8-WAVSRT
|
|
1$ STAA ,X
|
|
INX
|
|
DECB
|
|
BNE 1$
|
|
LDAB #PBTM
|
|
STAB PSTK+1
|
|
LDAB #FBTM
|
|
STAB FSTK+1
|
|
LDAB #126
|
|
STAB FVECT
|
|
LDX #NXTFCM
|
|
STX FVECT+1
|
|
LDAB SMPPER
|
|
STAB TMPPER
|
|
|
|
PPLPE1 SUBB #3
|
|
PPLPE2 JSR NXTSMP
|
|
INX
|
|
|
|
PPLP LDAB TMPPER
|
|
SUBB #2 LOOP DELAY IS 18-6 = 12
|
|
JSR NTHRVC
|
|
BNE PPLP ESCAPE ON WAVE BOUNDARY
|
|
|
|
LDAB PERVEL 7 (ALL TIMES ARE SINCE RTS FROM LAST NXTSMP)
|
|
LDAA PERVEL+1
|
|
ADDA SMPPER+1 UPDATE SAMPLE RATE ONCE EACH WAVE PLAY
|
|
ADCB SMPPER
|
|
STAA SMPPER+1
|
|
STAB SMPPER 24
|
|
|
|
ADDB GLBPRO
|
|
LDAA #MINPER AVOID SYNC ERRORS BY LIMITING PITCH.
|
|
CBA MAX. PITCH ALLOWS AT LEAST 1 FILTER
|
|
BCC *+3 CALL PER SAMPLE.
|
|
FCB 129
|
|
TAB
|
|
STAB TMPPER 41
|
|
NOP
|
|
SUBB #9
|
|
JSR NXTSMP 54
|
|
|
|
LDAA FCNT COUNT WAVE PLAYS FOR FILTER
|
|
TAB (ONLY IF <0)
|
|
ASLA
|
|
ADCB #0
|
|
STAB FCNT 13
|
|
|
|
LDAB TMPPER
|
|
SUBB #5
|
|
LDAA PWVCNT
|
|
BPL PAWAKE
|
|
|
|
INC PWVCNT UPDATE DELAY COUNT IF <0
|
|
NOP
|
|
BRA PPLPE1 37
|
|
|
|
PAWAKE DECB ELSE WE ARE ALIVE
|
|
JSR NXTSMP 36
|
|
|
|
LDX PCMDPT
|
|
LDAA ,X
|
|
BPL PPLP1 MOST CMDS ARE >0
|
|
|
|
CMPA #128
|
|
BEQ STOPR 19 EXCEPT FOR END = 128
|
|
|
|
INCA
|
|
STAA PWVCNT OR A NEGATIVE NUMBER -N
|
|
INX WHICH WAITS N WAVE PLAYS
|
|
FCB -1,0,PCMDPT BEFORE FETCHING THE NEXT COMMAND
|
|
|
|
PPLP35 LDAB TMPPER
|
|
SUBB #6
|
|
JMP PPLPE1 43
|
|
|
|
PPLP1 INX
|
|
LDAB ,X GET NEXT CMD STRING BYTE ON STACK
|
|
PSHB
|
|
INX
|
|
STX PCMDPT 35
|
|
|
|
STAA PCMD
|
|
ANDA #$70
|
|
LSRA
|
|
LSRA
|
|
LSRA
|
|
CLRB
|
|
|
|
ADDA #PCMDJT!.255
|
|
ADCB #PCMDJT/256
|
|
STAA PTEMP+1
|
|
STAB PTEMP 61
|
|
|
|
LDAB TMPPER
|
|
LDAB TMPPER
|
|
SUBB #13
|
|
JSR NXTSMP 78
|
|
|
|
CLRB
|
|
LDX PTEMP EXECUTE CMD
|
|
LDX ,X
|
|
JMP ,X 16
|
|
|
|
* PITCH COMMAND ROUTINES. UNLESS OTHERWISE STATED, N IS A SIGNED 8 BIT
|
|
* NUMBER = BYTE FOLLOWING OPCODE.
|
|
|
|
* LDP N IS SMPPER := N, ADP N IS SMPPER := SMPPER + N
|
|
|
|
LDPR LDAA PCMD BIT 0 = 1 FOR LOAD
|
|
ASRA
|
|
SBCB #0
|
|
ANDB SMPPER
|
|
PULA
|
|
SBA
|
|
ADDA SMPPER
|
|
STAA SMPPER 39
|
|
INX
|
|
LDPRE LDAB TMPPER
|
|
SUBB #10
|
|
JMP PPLPE2 51
|
|
|
|
* LDO N IS GLBPRO := N, ADO N IS GLBPRO := GLBPRO + N
|
|
|
|
LDOR LDAA PCMD BIT 0 = 1 FOR LOAD
|
|
ASRA
|
|
SBCB #0
|
|
ANDB GLBPRO
|
|
PULA
|
|
SBA
|
|
ADDA GLBPRO
|
|
STAA GLBPRO
|
|
BRA LDPRE
|
|
|
|
* ESC EXECUTES MACHINE LANGUAGE IMMEDIATELY FOLLOWING
|
|
|
|
ESCR PULA
|
|
LDX PCMDPT
|
|
DEX
|
|
JMP ,X 32
|
|
|
|
* STOP EITHER REPEATS A CALL, RETURNS FROM A CALL, OR ENDS SOUND.
|
|
|
|
STOPR LDAA PSTK+1
|
|
CMPA #PBTM
|
|
BMI *+3 28
|
|
RTS
|
|
|
|
LDAB TMPPER
|
|
SUBB #7
|
|
JSR NXTSMP 42
|
|
|
|
LDX PSTK
|
|
DEC 2,X
|
|
BMI PRET 15 DONE
|
|
|
|
LDX ,X ELSE REPEAT
|
|
LDAA ,X
|
|
PSHA
|
|
INX
|
|
STX PCMDPT 39
|
|
|
|
FCB -10,0,TMPPER
|
|
SUBB #9
|
|
JSR NXTSMP 54
|
|
|
|
BRA PTORE1
|
|
|
|
PRET LDX ,X
|
|
INX
|
|
STX PCMDPT
|
|
LDAA PSTK+1
|
|
ADDA #3
|
|
STAA PSTK+1
|
|
|
|
LDAB TMPPER
|
|
SUBB #7
|
|
NOP
|
|
JMP PPLPE1 49
|
|
|
|
* LDV N IS PERVEL := N, ADV N IS PERVEL := PERVEL + N
|
|
* IN THIS CASE N IS A 12 BIT NUMBER, THE UPPER 4 BITS OF WHICH
|
|
* ARE LO 4 BITS OF THE OPCODE BYTE.
|
|
|
|
ADVR INX
|
|
BRA *+6
|
|
|
|
LDVR STAB PERVEL CLEAR PERVEL FOR LOAD
|
|
STAB PERVEL+1 24
|
|
|
|
LDAB PCMD
|
|
ANDB #15 SIGN EXTEND
|
|
ADDB #-8
|
|
EORB #-8 34
|
|
|
|
PULA
|
|
ADDA PERVEL+1
|
|
ADCB PERVEL
|
|
STAA PERVEL+1
|
|
STAB PERVEL 52
|
|
|
|
FCB -10,0,TMPPER
|
|
SUBB #9
|
|
JMP PPLPE1 61
|
|
|
|
* DO R,N CALLS RTN AT *+N R TIMES.
|
|
|
|
PDOR LDAA PSTK+1
|
|
SUBA #3
|
|
STAA PSTK+1 25
|
|
|
|
LDX PSTK
|
|
LDAA PCMDPT+1 STACK ENTRY PTS TO DISPLACEMENT
|
|
LDAB PCMDPT
|
|
ADDA #-1
|
|
ADCB #-1
|
|
STAB ,X
|
|
STAA 1,X 53
|
|
LDAB PCMD LO OPCODE BITS ARE REPEAT CNT
|
|
ANDB #15
|
|
STAB 2,X 64
|
|
|
|
LDAB TMPPER
|
|
SUBB #12
|
|
JSR NXTSMP 78
|
|
|
|
INX SYNC W/NEXT RTN
|
|
PTORE1 INX
|
|
INX
|
|
CLRB
|
|
NOP
|
|
|
|
* TO N SETS LOC TO BE *+N.
|
|
|
|
PTOR PULA 20
|
|
ASRA
|
|
ROLA
|
|
SBCB #0
|
|
ADDA PCMDPT+1
|
|
ADCB PCMDPT
|
|
STAA PCMDPT+1
|
|
FCB -9,0,PCMDPT 41
|
|
|
|
LDAB TMPPER
|
|
SUBB #7
|
|
JMP PPLPE1 49
|
|
|
|
|
|
PCMDJT FDB LDPR,LDOR,LDVR,ADVR,LDPR,ESCR,PDOR,PTOR
|
|
* 0 1 2 3 4 5 6 7
|
|
FCMDJT FDB ADHR,LDTR,ETBR,HIDR,FINR,ZTBR,FDOR,FTOR
|
|
|
|
|
|
SUBTTL WAVE MODIFICATION
|
|
|
|
* FENDR OVERLAY GETS RETURN ADDR FROM STACK.
|
|
|
|
FRTURN LDX FSTK
|
|
LDX 3,X
|
|
INX NEXT INSTR IS AFTER DISPLACEMENT BYTE
|
|
STX FCMDPT 19
|
|
JSR FCMDNX 41
|
|
INX
|
|
RTS
|
|
|
|
* REPEAT CALL.
|
|
|
|
FDOAGN LDX ,X PT TO DISPLACEMENT BYTE
|
|
STX FCMDPT 35
|
|
LDX #FTOR JUMP RTN IS NEXT
|
|
STX FVECT+1
|
|
NOP
|
|
RTS 50
|
|
|
|
* FIN DOES REPEAT CALL, RETURN TO CALLER, STOP RTN DEPENDING ON STACK.
|
|
|
|
FINR LDAA FSTK+1
|
|
CMPA #FBTM
|
|
BLS ALLDON 9 LAST END STATEMENT
|
|
|
|
LDX FSTK
|
|
DEC 2,X NO, CHECK TOP OF STACK
|
|
BPL FDOAGN 24 STILL REPEATING
|
|
|
|
SUBA #3
|
|
STAA FSTK+1
|
|
LDX #FRTURN ELSE RETURN
|
|
STX FVECT+1 38
|
|
TST ,X
|
|
RTS
|
|
|
|
ALLDON LDX #WAST50
|
|
STX FVECT+1
|
|
NOP 19
|
|
BRA WAST27
|
|
|
|
WAST50 INX
|
|
INX
|
|
NOP
|
|
WAST40 BSR WAST5
|
|
WAST27 BSR WAST5
|
|
WAST14 TST ,X
|
|
WAST7 NOP
|
|
WAST5 RTS
|
|
|
|
* CALL WITH REPEAT. REPEAT CNT 0(=1) TO 15 (=16) IS LO 4 BITS OF OPCODE.
|
|
* NEXT BYTE IS DISPLACEMENT AS IN GO INSTRUCTION. THE CTR AND RETURN
|
|
* ADDRESS ARE SAVED ON A STACK.
|
|
|
|
FDOR LDX FSTK
|
|
LDAA FCMDPT SAVE ADDR OF DISPLACEMENT BYTE
|
|
STAA 3,X
|
|
LDAA FCMDPT+1
|
|
STAA 4,X
|
|
LDAA FCMD
|
|
ANDA #15
|
|
STAA 5,X 33
|
|
|
|
INX
|
|
LDX #1$
|
|
STX FVECT+1
|
|
RTS 50
|
|
|
|
* OVERLAY FOR CALL RTN.
|
|
|
|
1$ LDAA FSTK+1
|
|
ADDA #3
|
|
STAA FSTK+1
|
|
LDX #FTOR
|
|
STX FVECT+1 17 GET READY TO JUMP
|
|
NOP
|
|
BRA WAST27
|
|
|
|
* GET NEXT FILTER COMMAND
|
|
|
|
NXTFCM TST FCNT
|
|
BNE WAST40 IN A DELAY
|
|
|
|
LDX FCMDPT
|
|
LDAA ,X
|
|
INX
|
|
STX FCMDPT
|
|
STAA FCMD
|
|
BPL 1$ 36
|
|
|
|
STAA FCNT NEGATIVE CMD IS NEG OF WAVE DELAY
|
|
LDAA ,X
|
|
RTS 50
|
|
|
|
1$ LDX #EXFCMD POSITIVE IS FROM TABLE
|
|
FCB -1,0,FVECT+1
|
|
RTS 50
|
|
|
|
|
|
EXFCMD CLRB
|
|
LDAA FCMD
|
|
ANDA #$70 B4 - B7 IS INSTRUCTION
|
|
LSRA
|
|
LSRA
|
|
LSRA
|
|
ADDA #FCMDJT!.255
|
|
ADCB #FCMDJT/256
|
|
STAB FNHI
|
|
STAA FNLO 25
|
|
|
|
LDX FNHI
|
|
LDX ,X
|
|
STX FVECT+1
|
|
STX FVECT+1
|
|
RTS 50
|
|
|
|
* SET UP FOR REPEATED TABLE ADD.
|
|
|
|
ETBR LDAA FCMD
|
|
ANDA #15
|
|
INCA
|
|
INCA
|
|
STAA FCNT
|
|
BRA FHA1 17
|
|
|
|
* LOOK FOR A NONZERO HARMONIC CHANGE AND PERFORM IT. IF ENTIRE TABLE
|
|
* IS ZERO WE HAVE FINISHED THE LAST COMMAND AND PICK UP THE NEXT ONE.
|
|
|
|
FINDHA INC HAPTR+1
|
|
LDX HAPTR
|
|
CPX #CNAMP END TABLE?
|
|
BEQ FHA1 17
|
|
|
|
LDAA ,X NO, LOOK AT CURRENT ENTRY
|
|
LDX #ADDINI
|
|
STAA HAMP
|
|
BEQ *+5
|
|
JMP *+6
|
|
LDX #FINDHA LOOK AGAIN IF 0
|
|
STX FVECT+1 SET FOR ADD IF <>0
|
|
INX
|
|
RTS
|
|
|
|
FHA1 LDAA #ADD2HA-2 RESTART TABLE
|
|
FCB $B7,0,HAPTR+1
|
|
LDX #FINDHA MAYBE REPEAT
|
|
DEC FCNT
|
|
BEQ *+5
|
|
JMP *+6
|
|
FCMDNX LDX #NXTFCM 40
|
|
STX FVECT+1
|
|
RTS
|
|
|
|
* RELATIVE JUMP.
|
|
|
|
FTOR LDX FCMDPT
|
|
CLRB
|
|
LDAA ,X
|
|
INCA DISPLACEMENT IS FROM NEXT INSTRUCTION
|
|
ASRA
|
|
ROLA
|
|
SBCB #0
|
|
ADDA FCMDPT+1
|
|
ADCB FCMDPT
|
|
STAA FCMDPT+1
|
|
STAB FCMDPT
|
|
|
|
BRA FCMDNX 37
|
|
|
|
* SET UP FOR ADD OF HAMP * HARMONIC TO WAVE.
|
|
|
|
ADDINI LDAA HAPTR+1
|
|
SUBA #ADD2HA-1
|
|
ASLA
|
|
CLRB
|
|
ADDA HRMTBL+1 GET PTR TO HARMONIC IN FNHI, FNLO
|
|
ADCB HRMTBL
|
|
STAB FNHI
|
|
STAA FNLO 23
|
|
|
|
LDAA #128
|
|
STAA FMSK
|
|
|
|
LDX #2$
|
|
STX FVECT+1 37
|
|
LDX #WAVSRT
|
|
STX FWVPTR
|
|
RTS
|
|
|
|
2$ LDX FNHI GET HARMONIC FN TO FNHI,FNLO
|
|
LDX ,X
|
|
STX FNHI
|
|
LDX #ADDLP
|
|
STX FVECT+1 23
|
|
|
|
LDX HAPTR
|
|
LDAA 9,X
|
|
ADDA HAMP
|
|
STAA 9,X 41 RECORD CHANGE
|
|
INX
|
|
RTS
|
|
|
|
* ADD HAMP * HARMONIC FN TO WAVEFORM.
|
|
|
|
ADDLP LDAA FMSK MSK PTS TO CURRENT HARMONIC VALUE
|
|
BEQ 1$ NEED NEW MASK AFTER 8 SAMPLES
|
|
|
|
LSR FMSK
|
|
LDX FWVPTR
|
|
LDAB ,X
|
|
ANDA FNHI ADD/SUBTRACT HAMP FROM SAMPLE ON
|
|
BNE 2$ 29 SIGN OF HARMONIC.
|
|
FCB -5,0,HAMP
|
|
STAB ,X
|
|
INC FWVPTR+1
|
|
RTS 50
|
|
|
|
2$ FCB -16,0,HAMP
|
|
STAB ,X
|
|
INC FWVPTR+1
|
|
RTS
|
|
|
|
1$ LDAB FWVPTR+1
|
|
CMPB #WAVSRT+16
|
|
BEQ 3$ 16 DONE
|
|
LDAB FNLO
|
|
STAB FNHI ELSE SET FOR NEXT 8 SAMPLES
|
|
LDAB #128
|
|
FCB -9,0,FMSK
|
|
BRA 16$ 34
|
|
|
|
3$ LDX #NXTFCM RETURN TO THE RIGHT PLACE
|
|
LDAB FCNT
|
|
BNE *+5 FCNT <>0 MEANS IN TABLE LOOP
|
|
JMP *+6 FCNT = 0 MEANS EXECUTING COMMANDS
|
|
LDX #FINDHA
|
|
STX FVECT+1 34
|
|
|
|
16$ TST ,X
|
|
INX
|
|
RTS
|
|
|
|
* ADH H,N LDH H,N USE SAME RTN
|
|
|
|
ADHR
|
|
LDHR LDAA FCMD
|
|
ANDA #7 HARMONIC #
|
|
ADDA #ADD2HA
|
|
STAA HAPTR+1
|
|
|
|
LDX FCMDPT
|
|
LDAA ,X
|
|
INX
|
|
STX FCMDPT
|
|
STAA HAMP 33 SAVE VALUE
|
|
|
|
LDX #1$
|
|
STX FVECT+1
|
|
INX
|
|
RTS
|
|
|
|
1$ LDX HAPTR
|
|
CLRB
|
|
LDAA FCMD
|
|
ADDA #-8 CARRY IF LD
|
|
SBCB #0
|
|
ANDB 9,X LD NEW = SUB OLD + ADD NEW
|
|
NEGB
|
|
ADDB HAMP
|
|
|
|
ADHRE STAB HAMP 27
|
|
LDX #ADDINI
|
|
STX FVECT+1
|
|
INX
|
|
INX
|
|
NOP
|
|
RTS
|
|
|
|
* HARMONIC INCREMENT OR DECREMENT
|
|
|
|
HIDR LDAB FCMD
|
|
LSRB
|
|
ANDB #7
|
|
ORAB #ADD2HA ! ADD2HA MUST BE DIVISIBLE BY 8 !
|
|
STAB HAPTR+1 PT TO THIS HARMONIC
|
|
|
|
LDAB #-1 CARRY IF INCREMENT (BIT 0 OF FCMD = 1)
|
|
ADCB #0
|
|
ADCB #0
|
|
BRA ADHRE 23
|
|
|
|
* CLEAR ADD2HA OR ALTER 0TH AMPLITUDE.
|
|
|
|
ZTBR LDAA FCMD LO BIT 0 IF ZT
|
|
ASRA
|
|
BCS ADCR
|
|
|
|
LDX #0
|
|
STX ADD2HA
|
|
STX ADD2HA+2
|
|
STX ADD2HA+4
|
|
STX ADD2HA+6 32
|
|
INX
|
|
|
|
ATBRE LDX #NXTFCM
|
|
FCB -1,0,FVECT+1
|
|
ATBRE1 RTS
|
|
|
|
ADCR BITA #2
|
|
BNE ESC1 15 BIT 2 FCMD =1 FOR ESCAPE
|
|
LDAB #ADD2HA-1
|
|
STAB HAPTR+1 21
|
|
LDX #ADCRO
|
|
ADCRE STX FVECT+1
|
|
JMP WAST14
|
|
|
|
ESC1 FCB -2,0,FCMDPT
|
|
BRA ADCRE 24
|
|
|
|
ADCRO CLRB
|
|
LDAA FCMD
|
|
ADDA #-82 CARRY IF LDH
|
|
SBCB #0
|
|
ANDB CNAMP
|
|
LDX FCMDPT
|
|
LDAA ,X
|
|
INX
|
|
STX FCMDPT 30
|
|
SBA
|
|
STAA HAMP
|
|
LDX #ADDINI
|
|
FCB -1,0,FVECT+1
|
|
RTS
|
|
|
|
* CHANGE SOME ADD2HA ENTRIES.
|
|
|
|
LDTR LDAB #ADD2HA ASSUME FIRST ENTRY IS H #8
|
|
STAB HAPTR+1
|
|
LDX FCMDPT
|
|
LDAB ,X EACH BIT INDICATES PRESENCE OF ENTRY
|
|
STAB FNHI
|
|
INX
|
|
STX FCMDPT 28
|
|
LDAB FCMD LO BIT 1 IF ENTRY FOR 0 IS PRESENT
|
|
LSRB
|
|
BCC 5$
|
|
LDX #6$
|
|
STX FVECT+1
|
|
RTS
|
|
|
|
4$ CLRB
|
|
LDAA FNLO LO BIT 0 IF REPLACE, 1 IF ADD TO CURRENT
|
|
ASRA
|
|
SBCB #0
|
|
LDX HAPTR
|
|
ANDB ,X
|
|
ABA
|
|
STAA ,X 26
|
|
INC HAPTR+1 PT TO NEXT GUY
|
|
LDAA ,X
|
|
|
|
5$ LDX #1$
|
|
STX FVECT+1
|
|
RTS
|
|
|
|
1$ ASL FNHI
|
|
BCS 2$
|
|
BEQ 3$ NO MORE IF 0
|
|
INC HAPTR+1
|
|
JMP WAST27
|
|
|
|
3$ JSR FCMDNX 36
|
|
TST ,X
|
|
NOP
|
|
RTS
|
|
|
|
6$ DEC HAPTR+1 SET FOR 0TH ENTRY
|
|
INX
|
|
|
|
2$ LDAA ,X
|
|
LDX FCMDPT
|
|
LDAA ,X
|
|
INX
|
|
STX FCMDPT 33
|
|
STAA FNLO
|
|
LDX #4$
|
|
STX FVECT+1
|
|
RTS
|
|
|
|
|
|
* FILTER TIMING
|
|
* COMMAND # OF FILTER CALLS TO EXECUTE
|
|
|
|
* LDH, ADH 24
|
|
|
|
* LDT, ADT 3+(2*N) (N = # OF ENTRIES ALTERED)
|
|
|
|
* ZT 3
|
|
|
|
* DT R 3+(R*{ 9+(22*NZH)}) WHERE
|
|
* R IS # OF TABLE REPEATS
|
|
* NZH IS # OF NONZERO ADD2HA ENTRIES
|
|
|
|
* IH, DH 23
|
|
|
|
* FIN 4 ( SAME FOR REPEAT AND RETURN)
|
|
|
|
* DO 5
|
|
|
|
* TO 3
|
|
|
|
* WAIT N 1+ (N* WAVE PERIOD)
|
|
|
|
NLIST
|
|
* MACROS FOR PITCH AND FILTER COMMANDS MAKE DULL READING.
|
|
|
|
C MACRO "C
|
|
LIST
|
|
* "C
|
|
NLIST
|
|
ENDM
|
|
|
|
LBL MACRO "L,"C
|
|
LIST
|
|
|
|
"L EQU * "C
|
|
NLIST
|
|
ENDM
|
|
|
|
ESC MACRO
|
|
LIST
|
|
FCB $55 ESC
|
|
NLIST
|
|
ENDM
|
|
|
|
WAIT MACRO "N
|
|
LIST
|
|
FCB -"N WAIT "N
|
|
NLIST
|
|
ENDM
|
|
|
|
DO MACRO "R,"A
|
|
LIST
|
|
FCB 95+"R,"A-*-2 DO "R,"A
|
|
NLIST
|
|
ENDM
|
|
|
|
TO MACRO "A
|
|
LIST
|
|
FCB 112,"A-*-2 TO "A
|
|
NLIST
|
|
ENDM
|
|
|
|
* PITCH COMMANDS
|
|
|
|
LDP MACRO "N
|
|
LIST
|
|
FCB 1,"N LDP "N
|
|
NLIST
|
|
ENDM
|
|
|
|
ADP MACRO "N
|
|
LIST
|
|
FCB 0,"N ADP "N
|
|
NLIST
|
|
ENDM
|
|
|
|
LDV MACRO "N
|
|
ZQ0 SET $2000+("N!.$FFF)
|
|
LIST
|
|
FDB ZQ0 LDV "N
|
|
NLIST
|
|
ENDM
|
|
|
|
ADV MACRO "N
|
|
ZQ0 SET $3000+("N!.$FFF)
|
|
LIST
|
|
FDB ZQ0 ADV "N
|
|
NLIST
|
|
ENDM
|
|
|
|
LDO MACRO "N
|
|
LIST
|
|
FCB 17,"N LDO "N
|
|
NLIST
|
|
ENDM
|
|
|
|
ADO MACRO "N
|
|
LIST
|
|
FCB 16,"N ADO "N
|
|
NLIST
|
|
ENDM
|
|
|
|
STOP MACRO
|
|
LIST
|
|
FCB 128 STOP
|
|
NLIST
|
|
ENDM
|
|
|
|
NOT MACRO "N
|
|
LIST
|
|
FCB "N NOT "N
|
|
NLIST
|
|
ENDM
|
|
|
|
* FILTER COMMANDS
|
|
|
|
FIN MACRO
|
|
LIST
|
|
FCB 64 FIN
|
|
NLIST
|
|
ENDM
|
|
|
|
ADH MACRO "H,"N
|
|
IFE "H
|
|
LIST
|
|
FCB 81,"N ADH 0,"N
|
|
NLIST
|
|
ELSE
|
|
LIST
|
|
FCB 8-"H,"N ADH "H,"N
|
|
NLIST
|
|
ENDIF
|
|
ENDM
|
|
|
|
LDH MACRO "H,"N
|
|
IFE "H
|
|
LIST
|
|
FCB 83,"N LDH 0,"N
|
|
NLIST
|
|
ELSE
|
|
LIST
|
|
FCB 16-"H,"N LDH "H,"N
|
|
NLIST
|
|
ENDIF
|
|
ENDM
|
|
|
|
DT MACRO "R
|
|
IFB <"R>
|
|
LIST
|
|
FCB 32 DT
|
|
NLIST
|
|
ELSE
|
|
LIST
|
|
FCB 31+"R DT "R
|
|
NLIST
|
|
ENDIF
|
|
ENDM
|
|
|
|
IH MACRO "H
|
|
LIST
|
|
FCB 65-"H-"H IH "H
|
|
NLIST
|
|
ENDM
|
|
|
|
DH MACRO "H
|
|
LIST
|
|
FCB 64-"H-"H DH "H
|
|
NLIST
|
|
ENDM
|
|
|
|
ZT MACRO
|
|
LIST
|
|
FCB 80 ZT
|
|
NLIST
|
|
ENDM
|
|
|
|
LT MACRO "C,"0,"1,"2,"3,"4,"5,"6,"7,"8
|
|
ZQ1 SET 16
|
|
ZQ2 SET 0
|
|
IRPC %I,012345678
|
|
ZB%I SET 0
|
|
ENDR
|
|
LTA 0,"0
|
|
LTA 1,"1
|
|
LTA 2,"2
|
|
LTA 3,"3
|
|
LTA 4,"4
|
|
LTA 5,"5
|
|
LTA 6,"6
|
|
LTA 7,"7
|
|
LTA 8,"8
|
|
LIST
|
|
FCB ZQ1,ZQ2 LT <"0>,<"1>,<"2>,<"3>,<"4>,<"5>,<"6>,<"7>,<"8>
|
|
NLIST
|
|
LT"C
|
|
ENDM
|
|
|
|
LTA MACRO "I,"H,"A,"P
|
|
ZQ3 SET 0
|
|
IFNB <"P>
|
|
ZQ3 SET 1
|
|
ENDIF
|
|
IFNB <"H>
|
|
IFE "H
|
|
ZQ1 SET 17
|
|
ELSE
|
|
ZQ2 SET ZQ2!+(2!^("H-1))
|
|
ENDIF
|
|
ZB"I SET "A+"A+ZQ3
|
|
ENDIF
|
|
ENDM
|
|
|
|
LT0 MACRO
|
|
LIST
|
|
FCB ZB0
|
|
NLIST
|
|
ENDM
|
|
|
|
LT1 MACRO
|
|
LIST
|
|
FCB ZB0,ZB1
|
|
NLIST
|
|
ENDM
|
|
|
|
LT2 MACRO
|
|
LIST
|
|
FCB ZB0,ZB1,ZB2
|
|
NLIST
|
|
ENDM
|
|
|
|
LT3 MACRO
|
|
LIST
|
|
FCB ZB0,ZB1,ZB2
|
|
FCB ZB3
|
|
NLIST
|
|
ENDM
|
|
|
|
LT4 MACRO
|
|
LIST
|
|
FCB ZB0,ZB1,ZB2
|
|
FCB ZB3,ZB4
|
|
NLIST
|
|
ENDM
|
|
|
|
LT5 MACRO
|
|
LIST
|
|
FCB ZB0,ZB1,ZB2
|
|
FCB ZB3,ZB4,ZB5
|
|
NLIST
|
|
ENDM
|
|
|
|
LT6 MACRO
|
|
LIST
|
|
FCB ZB0,ZB1,ZB2
|
|
FCB ZB3,ZB4,ZB5
|
|
FCB ZB6
|
|
NLIST
|
|
ENDM
|
|
|
|
LT7 MACRO
|
|
LIST
|
|
FCB ZB0,ZB1,ZB2
|
|
FCB ZB3,ZB4,ZB5
|
|
FCB ZB6,ZB7
|
|
NLIST
|
|
ENDM
|
|
|
|
LT8 MACRO
|
|
LIST
|
|
FCB ZB0,ZB1,ZB2
|
|
FCB ZB3,ZB4,ZB5
|
|
FCB ZB6,ZB7,ZB8
|
|
NLIST
|
|
ENDM
|
|
|
|
LIST
|
|
NCLIST
|
|
|
|
SUBTTL SOUND PROGRAMS
|
|
|
|
* OPCODES ( ! SEPERATES NYBBLES SPACES SEPERATE BYTES)
|
|
|
|
* COMMON
|
|
* WAIT N -N ( 1<= N<= 127)
|
|
* DO R,RTN $6!(R-1) RTN - NEXT LOC
|
|
* TO RTN $70 RTN - NEXT LOC
|
|
* ESC $55
|
|
|
|
* FREQUENCY CONTROL
|
|
* STOP $80
|
|
* LDP N $01 N
|
|
* ADP N $00 N
|
|
* LDV N $2!(N&$F00) N&255
|
|
* ADV N $3!(N&$F00) N&255
|
|
* LDO N $11 N
|
|
* ADO N $10 N
|
|
|
|
* WAVE CONTROL
|
|
* FIN $40
|
|
* ZT $50
|
|
* ADH 0,N $51 N
|
|
* LDH 0,N $53 N
|
|
* ( IN WHAT FOLLOWS 1<=H<=8 HHH = 8-H, A 3 BIT NUMBER)
|
|
* ADH H,N $0!0HHH
|
|
* LDH H,N $0!1HHH
|
|
* IH H $3!HHH1
|
|
* DH H $3!HHH0
|
|
* DT R $2!(R-1)
|
|
* LT A0,...,A8 $1!000C 8765!4321 B0,...,B8
|
|
* WHERE C=1 IF ENTRY 0 IS ALTERED
|
|
* N=1 IF ENTRY N IS ALTERED (N=1,...,8)
|
|
* BN=AN+AN+P WHERE P=1 IF AN IS TO BE ADDED TO ENTRY N
|
|
* P=0 IF AN REPLACES ENTRY N
|
|
* BN IS PRESENT ONLY IF ENTRY N IS TO BE ALTERED
|
|
|
|
* HARMONIC FUNCTIONS. EACH BIT POSITION CORRESPONDS TO A WAVEFORM
|
|
* POSITION. IF THE BIT = 0, THE VALUE IS +1 IF THE BIT = 1, THE
|
|
* VALUE IS -1.
|
|
|
|
* THE HARMONICS ARE TREATED IN ORDER OF DECREASING AVERAGE FREQUENCY.
|
|
|
|
ODDTBL
|
|
FDB %0000000000000000 0 CONSTANT IS WEIRDO FOR NOW
|
|
FDB %0101010101010101 8
|
|
FDB %1010101001010101 7
|
|
FDB %0101101001011010 6
|
|
FDB %1001011001101001 5
|
|
FDB %0110011001100110 4
|
|
FDB %1100110000110011 3
|
|
FDB %0011110000111100 2
|
|
FDB %0000111111110000 1
|
|
|
|
* WAVE PROGRAMS
|
|
|
|
NLIST
|
|
|
|
LBL SCREMW,<FPF>
|
|
LT 7,<8,1>,<7,1>,<6,1>,<5,1>,<4,1>,<3,1>,<2,1>,<1,1>
|
|
DT 16
|
|
DT 16
|
|
ZT
|
|
LT 0,<8,-1>
|
|
DT 16
|
|
LT 0,<7,-1>
|
|
DT 16
|
|
LT 1,<8,0>,<6,-1>
|
|
DT 16
|
|
LT 1,<7,0>,<5,-1>
|
|
DT 16
|
|
LT 1,<6,0>,<4,-1>
|
|
DT 16
|
|
LT 1,<5,0>,<3,-1>
|
|
DT 16
|
|
LT 1,<4,0>,<2,-1>
|
|
DT 16
|
|
LT 1,<3,0>,<1,-1>
|
|
DT 16
|
|
LT 0,<2,0>
|
|
DT 16
|
|
LT 0,<1,0>
|
|
DT 16
|
|
TO SCREMW
|
|
|
|
LBL PPLD
|
|
ADP 1
|
|
ADP -1
|
|
ADP -1
|
|
ADP 1
|
|
STOP
|
|
|
|
LBL SCREMP
|
|
NOT 60
|
|
LDV -512
|
|
WAIT 16
|
|
LDV 0
|
|
WAIT 100
|
|
LBL SCRMA
|
|
LDV 80
|
|
DO 13,PPLD
|
|
LDV 64
|
|
DO 4,PPLD
|
|
STOP
|
|
|
|
LBL SCDNP
|
|
NOT 28
|
|
TO SCRMA
|
|
|
|
LBL SKIDW
|
|
LDH 3,32
|
|
LDH 4,48
|
|
FIN
|
|
|
|
LBL PPVA
|
|
ADP 2
|
|
WAIT 1
|
|
ADP -2
|
|
WAIT 2
|
|
STOP
|
|
|
|
LBL SKIDP
|
|
NOT 48
|
|
DO 4,PPVB
|
|
LBL PPVC
|
|
LDV -32
|
|
DO 8,PPVA
|
|
STOP
|
|
|
|
LBL PPVB
|
|
ADV 2
|
|
WAIT 2
|
|
ADP -2
|
|
WAIT 2
|
|
ADP 2
|
|
WAIT 2
|
|
ADP -2
|
|
WAIT 2
|
|
ADP 2
|
|
WAIT 2
|
|
ADP -2
|
|
WAIT 2
|
|
ADP 6
|
|
WAIT 3
|
|
ADV -256
|
|
WAIT 5
|
|
ADV 256
|
|
ADP 2
|
|
STOP
|
|
|
|
LBL SKIDEP
|
|
NOT 49
|
|
LDV 6
|
|
DO 1,PPVB
|
|
TO PPVC
|
|
|
|
LIST
|
|
|
|
JNOIST FCB 13,64,-16,-1,18 $1F WING UP
|
|
FCB 8,168,24,1,8 20 CLIP
|
|
FCB 4,168,24,1,16 21 CLOP
|
|
FCB 4,32,-8,-1,32 1E WING DOWN PART 1
|
|
FCB 16,-16,16,1,1 " " 2
|
|
|
|
WINGDN LDAA #3
|
|
BSR JKNOIS
|
|
LDAA #4
|
|
|
|
JKNOIS LDX #$D939 GOOD SEED
|
|
STX HI
|
|
TAB
|
|
ASLA
|
|
ASLA
|
|
ABA
|
|
LDX #JNOIST
|
|
JSR ADDX
|
|
JMP NOISLG
|
|
|
|
WALSHT FDB SCREMW,SCREMP $22 PTERODACTYL SCREAM
|
|
FDB SCREMW,SCDNP 23 END OF ABOVE
|
|
FDB SKIDW,SKIDP 24 OSTRICH STOP
|
|
FDB SKIDW,SKIDEP 25 END SKID FOR SHORT ONES
|
|
|
|
WALSH CLRB
|
|
STAB SMPPER+1
|
|
ASLA
|
|
ASLA
|
|
ADDA #WALSHT!.255
|
|
ADCB #WALSHT/256
|
|
STAB PCMDPT
|
|
STAA PCMDPT+1
|
|
LDX PCMDPT
|
|
LDX X
|
|
STX FCMDPT
|
|
LDX PCMDPT
|
|
LDX 2,X
|
|
LDAB X
|
|
STAB SMPPER
|
|
INX
|
|
STX PCMDPT
|
|
LDX #ODDTBL
|
|
STX HRMTBL
|
|
JMP WSM
|
|
|
|
|
|
*
|
|
* VECTORS HERE
|
|
*
|
|
ORG VECTOR
|
|
IRQV FDB IRQ
|
|
SWIV FDB SETUP
|
|
NMIV FDB NMI
|
|
RESETV FDB SETUP
|
|
END CKSUM
|