361 lines
4.3 KiB
ArmAsm
Executable File
361 lines
4.3 KiB
ArmAsm
Executable File
* sound
|
|
org = $ea00
|
|
lst off
|
|
*-------------------------------
|
|
*
|
|
* S O U N D
|
|
*
|
|
*-------------------------------
|
|
org org
|
|
|
|
jmp PLAYBACK
|
|
|
|
*-------------------------------
|
|
savex ds 1
|
|
|
|
spkr = $c030
|
|
|
|
*-------------------------------
|
|
put soundnames
|
|
put gameeq
|
|
put eq
|
|
|
|
*-------------------------------
|
|
*
|
|
* L O O K U P
|
|
*
|
|
* Sound routine lookup table
|
|
*
|
|
*-------------------------------
|
|
lookup
|
|
|
|
:0 dw DoPlateDown
|
|
:1 dw DoPlateUp
|
|
:2 dw DoGateDown
|
|
:3 dw DoSpecialKey1
|
|
:4 dw DoSpecialKey2
|
|
:5 dw DoSplat
|
|
:6 dw DoMirrorCrack
|
|
:7 dw DoLooseCrash
|
|
:8 dw DoGotKey
|
|
:9 dw DoFootstep
|
|
:10 dw DoRaisingExit
|
|
:11 dw DoRaisingGate
|
|
:12 dw DoLowerGate
|
|
:13 dw DoSmackWall
|
|
:14 dw DoImpaled
|
|
:15 dw DoGateSlam
|
|
:16 dw DoFlashMsg
|
|
:17 dw DoSwordClash1
|
|
:18 dw DoSwordClash2
|
|
:19 dw DoJawsClash
|
|
|
|
endlook
|
|
|
|
maxaddr = endlook-lookup
|
|
|
|
*-------------------------------
|
|
*
|
|
* Z E R O S O U N D
|
|
*
|
|
* Zero sound table
|
|
*
|
|
*-------------------------------
|
|
ZEROSOUND
|
|
lda #0 ;# sounds in table
|
|
sta soundtable
|
|
rts
|
|
|
|
*-------------------------------
|
|
*
|
|
* A D D S O U N D
|
|
*
|
|
* Add sound to sound table
|
|
* (preserve registers)
|
|
*
|
|
* In: A = sound #
|
|
*
|
|
*-------------------------------
|
|
ADDSOUND
|
|
stx savex
|
|
|
|
ldx soundtable
|
|
cpx #maxsfx
|
|
bcs :rts ;sound table full
|
|
|
|
inx
|
|
sta soundtable,x
|
|
stx soundtable ;# sounds in table
|
|
|
|
:rts ldx savex
|
|
rts
|
|
|
|
*-------------------------------
|
|
*
|
|
* P L A Y B A C K
|
|
*
|
|
* Playback all sounds listed in sound table
|
|
*
|
|
*-------------------------------
|
|
PLAYBACK
|
|
lda soundon
|
|
beq :rts ;sound switched off?
|
|
|
|
ldx soundtable
|
|
beq :rts ;sound table empty?
|
|
|
|
:loop lda soundtable,x
|
|
|
|
stx savex
|
|
|
|
jsr makesound ;make sound #A
|
|
;(may destroy registers)
|
|
ldx savex
|
|
|
|
dex
|
|
bne :loop
|
|
|
|
:rts rts
|
|
|
|
*-------------------------------
|
|
*
|
|
* M A K E S O U N D
|
|
*
|
|
* In: A = sound # (0-127)
|
|
*
|
|
*-------------------------------
|
|
makesound
|
|
asl
|
|
cmp #maxaddr
|
|
bcs :rts ;don't exceed lookup table
|
|
|
|
tax
|
|
lda lookup,x
|
|
sta :sm+1
|
|
lda lookup+1,x
|
|
sta :sm+2
|
|
|
|
:sm jmp $ffff ;self-modifying code
|
|
|
|
:rts rts
|
|
|
|
*-------------------------------
|
|
*
|
|
* S O U N D R O U T I N E S
|
|
*
|
|
*-------------------------------
|
|
* Kid steps on pressplate
|
|
|
|
DoPlateDown
|
|
ldy #70
|
|
ldx #0
|
|
lda #4
|
|
jmp tone
|
|
|
|
*-------------------------------
|
|
* Pressplate pops back up
|
|
|
|
DoPlateUp
|
|
ldy #90
|
|
ldx #0
|
|
lda #4
|
|
jmp tone
|
|
|
|
*-------------------------------
|
|
* Gate hits stone floor with an ominous CLANG
|
|
|
|
DoGateDown
|
|
ldy #70
|
|
ldx #0
|
|
lda #4
|
|
jmp tone
|
|
|
|
*-------------------------------
|
|
* Jaws clash
|
|
|
|
DoJawsClash
|
|
ldy #10
|
|
ldx #0
|
|
lda #50
|
|
jmp tone
|
|
|
|
*-------------------------------
|
|
* Acknowledge special keypress
|
|
|
|
SK1Pitch = 15
|
|
SK1Dur = 50
|
|
|
|
SK2Pitch = 40
|
|
SK2Dur = 50
|
|
|
|
DoSpecialKey1
|
|
DoSwordClash1
|
|
DoSwordClash2
|
|
ldy #SK1Pitch
|
|
ldx #>SK1Pitch
|
|
lda #SK1Dur
|
|
jmp tone
|
|
|
|
DoSpecialKey2
|
|
ldy #SK2Pitch
|
|
ldx #>SK2Pitch
|
|
lda #SK2Dur
|
|
jmp tone
|
|
|
|
*-------------------------------
|
|
* Splat
|
|
|
|
SplatPitch = 1000
|
|
SplatDur = 3
|
|
|
|
DoSplat
|
|
ldy #SplatPitch
|
|
ldx #>SplatPitch
|
|
lda #SplatDur
|
|
jmp tone
|
|
|
|
*-------------------------------
|
|
* Mirror Crack
|
|
|
|
DoMirrorCrack
|
|
jmp DoSplat
|
|
rts
|
|
|
|
*-------------------------------
|
|
* Loose Floor Crash
|
|
|
|
DoLooseCrash
|
|
jmp DoSplat
|
|
|
|
*-------------------------------
|
|
* Flash message
|
|
|
|
]HiPitch = 100
|
|
]HiDur = 25
|
|
]LoPitch = 500
|
|
]LoDur = 15
|
|
|
|
DoGotKey
|
|
DoFlashMsg
|
|
lda #2
|
|
:loop pha
|
|
|
|
ldy #]LoPitch
|
|
ldx #>]LoPitch
|
|
lda #]LoDur
|
|
jsr tone
|
|
|
|
ldy #]HiPitch
|
|
ldx #>]HiPitch
|
|
lda #]HiDur
|
|
jsr tone
|
|
|
|
pla
|
|
sec
|
|
sbc #1
|
|
bne :loop
|
|
|
|
rts
|
|
|
|
*-------------------------------
|
|
* Footstep
|
|
|
|
DoFootstep
|
|
ldy #35
|
|
ldx #0
|
|
lda #3
|
|
jmp tone
|
|
|
|
*-------------------------------
|
|
* Raising Exit
|
|
|
|
DoRaisingExit
|
|
ldy #40
|
|
ldx #0
|
|
lda #6
|
|
jmp tone
|
|
|
|
*-------------------------------
|
|
* Raising Gate
|
|
|
|
DoRaisingGate
|
|
ldy #20
|
|
ldx #0
|
|
lda #2
|
|
jmp tone
|
|
|
|
*-------------------------------
|
|
* Lowering Gate
|
|
|
|
DoLowerGate
|
|
ldy #7
|
|
ldx #0
|
|
lda #8
|
|
jmp tone
|
|
|
|
*-------------------------------
|
|
* Smack Wall
|
|
|
|
SWPitch = 1000
|
|
SWDur = 3
|
|
|
|
DoSmackWall
|
|
ldy #SWPitch
|
|
ldx #>SWPitch
|
|
lda #SWDur
|
|
jmp tone
|
|
|
|
]rts rts
|
|
|
|
*-------------------------------
|
|
* Impaled
|
|
|
|
DoImpaled
|
|
jmp DoSmackWall
|
|
|
|
*-------------------------------
|
|
* Gate Slam
|
|
|
|
DoGateSlam
|
|
jmp DoSmackWall
|
|
|
|
|
|
*-------------------------------
|
|
*
|
|
* T O N E
|
|
*
|
|
* In: y-x = pitch lo-hi
|
|
* a = duration
|
|
*
|
|
*-------------------------------
|
|
tone
|
|
sty :pitch
|
|
stx :pitch+1
|
|
|
|
:outloop bit spkr
|
|
|
|
ldx #0
|
|
:midloop ldy #0
|
|
|
|
:inloop iny
|
|
cpy :pitch
|
|
bcc :inloop
|
|
|
|
inx
|
|
cpx :pitch+1
|
|
bcc :midloop
|
|
|
|
sec
|
|
sbc #1
|
|
bne :outloop
|
|
|
|
rts
|
|
|
|
:pitch ds 2
|
|
|
|
*-------------------------------
|
|
lst
|
|
eof ds 1
|
|
usr $a9,20,$e00,*-org
|
|
lst off
|