Add the segment, spider and extra life sounds. Add some more information about the mysterious crash.

This commit is contained in:
Jeremy Rand 2020-12-18 00:50:01 -05:00
parent ec1eb7cc0e
commit 32aee75462
10 changed files with 227 additions and 14 deletions

View File

@ -7,6 +7,9 @@ This is a list of the software bugs (as opposed to the bugs in the game that you
* I am thinking this is the same crash as the one which follows. I tried to reproduce this on real HW again with that debug in place but could not.
* I reproduced a crash on GSPlus after dying and starting a new game. From the stack, it was clear it was trying to draw a body segment but the jump instruction was set to garbage. I am hoping this is the same crash as the one saw on real HW.
* I have added some debug code to detect this. I am validating that the offset into the draw table for head and body segments is "sane" and if not brk.
* I reproduced it and ended up at brk $4 with y set to $2270 which is much larger than the max of 156. Also odd is that X is 1 but I think it needs to be an even number.
* In order to get the wrong value in Y, I noticed that the segmentSpriteOffset was overwritten with the pattern 70 02 70 02, etc.
* Something is trashing memory.
* A spider moving left to right went off screen and left garbage on the RHS as it exited. I have only seen this once. I think it coincided with the player dying.
* Sometimes when the player dies, the "you can shoot" indicator is left behind as garbage on-screen.

View File

@ -46,6 +46,7 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
9D0DC8EF258C715E00DE9E87 /* extralife.raw */ = {isa = PBXFileReference; lastKnownFileType = text; path = extralife.raw; sourceTree = "<group>"; };
9D1553DE257ACA1800657188 /* ACKNOWLEDGEMENTS.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = ACKNOWLEDGEMENTS.md; sourceTree = "<group>"; };
9D1553E9257F3E5200657188 /* fire.raw */ = {isa = PBXFileReference; lastKnownFileType = file; path = fire.raw; sourceTree = "<group>"; };
9D1553EA257F3E5200657188 /* bonus.raw */ = {isa = PBXFileReference; lastKnownFileType = file; path = bonus.raw; sourceTree = "<group>"; };
@ -123,6 +124,7 @@
isa = PBXGroup;
children = (
9D1553EA257F3E5200657188 /* bonus.raw */,
9D0DC8EF258C715E00DE9E87 /* extralife.raw */,
9D1553EB257F3E5200657188 /* death.raw */,
9D1553E9257F3E5200657188 /* fire.raw */,
9D1553EC257F3E5200657188 /* kill.raw */,

View File

@ -71,7 +71,7 @@ playerAddLife entry
lda #TILE_PLAYER
sta tileType,x
_dirtyNonGameTile
rtl
jmp playExtraLifeSound
updatePlayer entry

View File

@ -27,7 +27,12 @@ SOUND_HALTED equ 1
SOUND_STARTED equ 0
SPIDER_SOUND_ADDR equ $0000
SPIDER_SOUND_SIZE equ 6
SPIDER_OSC_NUM equ 8
SPIDER_FREQ_HIGH equ 0
SPIDER_FREQ_LOW equ 214
SPIDER_VOLUME equ 255
SPIDER_CONTROL equ 6
SPIDER_SIZE equ $36
DEATH_SOUND_ADDR equ $4000
DEATH_OSC_NUM equ 5
@ -38,9 +43,22 @@ DEATH_CONTROL equ 2
DEATH_SIZE equ $36
SEGMENTS_SOUND_ADDR equ $7000
SEGMENTS_SOUND_SIZE equ 4
SEGMENTS_OSC_NUM equ 6
SEGMENTS_FREQ_HIGH equ 0
SEGMENTS_FREQ_LOW equ 214
SEGMENTS_VOLUME equ 255
SEGMENTS_CONTROL equ 6
SEGMENTS_SIZE equ $24
BONUS_SOUND_ADDR equ $8000
EXTRA_LIFE_SOUND_ADDR equ $8000
EXTRA_LIFE_OSC_NUM equ 10
EXTRA_LIFE_FREQ_HIGH equ 0
EXTRA_LIFE_FREQ_LOW equ 107
EXTRA_LIFE_VOLUME equ 255
EXTRA_LIFE_CONTROL equ 2
EXTRA_LIFE_SIZE equ $36
BONUS_SOUND_ADDR equ $b000
BONUS_OSC_NUM equ 0
BONUS_FREQ_HIGH equ 0
BONUS_FREQ_LOW equ 214
@ -48,7 +66,7 @@ BONUS_VOLUME equ 255
BONUS_CONTROL equ 2
BONUS_SIZE equ $24
KILL_SOUND_ADDR equ $9000
KILL_SOUND_ADDR equ $c000
KILL_OSC_NUM equ 4
KILL_FREQ_HIGH equ 0
KILL_FREQ_LOW equ 214
@ -56,7 +74,7 @@ KILL_VOLUME equ 255
KILL_CONTROL equ 2
KILL_SIZE equ $24
FIRE_SOUND_ADDR equ $a000
FIRE_SOUND_ADDR equ $d000
FIRE_OSC_NUM equ 3
FIRE_FREQ_HIGH equ 0
FIRE_FREQ_LOW equ 214
@ -135,6 +153,54 @@ soundInit_writeRegLow anop
; Spider sound
pea SPIDER_SOUND_ADDR
jsl loadSpiderSound
lda #SPIDER_FREQ_LOW
ldx #SOUND_REG_FREQ_LOW+SPIDER_OSC_NUM
jsl writeSoundReg
lda #SPIDER_FREQ_HIGH
ldx #SOUND_REG_FREQ_HIGH+SPIDER_OSC_NUM
jsl writeSoundReg
lda #SPIDER_VOLUME
ldx #SOUND_REG_VOLUME+SPIDER_OSC_NUM
jsl writeSoundReg
lda #SPIDER_SIZE
ldx #SOUND_REG_SIZE+SPIDER_OSC_NUM
jsl writeSoundReg
lda #SPIDER_SOUND_ADDR/256
ldx #SOUND_REG_POINTER+SPIDER_OSC_NUM
jsl writeSoundReg
lda #SPIDER_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+SPIDER_OSC_NUM
jsl writeSoundReg
lda #SPIDER_FREQ_LOW
ldx #SOUND_REG_FREQ_LOW+SPIDER_OSC_NUM+1
jsl writeSoundReg
lda #SPIDER_FREQ_HIGH
ldx #SOUND_REG_FREQ_HIGH+SPIDER_OSC_NUM+1
jsl writeSoundReg
lda #SPIDER_VOLUME
ldx #SOUND_REG_VOLUME+SPIDER_OSC_NUM+1
jsl writeSoundReg
lda #SPIDER_SIZE
ldx #SOUND_REG_SIZE+SPIDER_OSC_NUM+1
jsl writeSoundReg
lda #SPIDER_SOUND_ADDR/256
ldx #SOUND_REG_POINTER+SPIDER_OSC_NUM+1
jsl writeSoundReg
lda #SPIDER_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+SPIDER_OSC_NUM+1
jsl writeSoundReg
; Death sound
@ -169,6 +235,54 @@ soundInit_writeRegLow anop
; Segments sound
pea SEGMENTS_SOUND_ADDR
jsl loadSegmentsSound
lda #SEGMENTS_FREQ_LOW
ldx #SOUND_REG_FREQ_LOW+SEGMENTS_OSC_NUM
jsl writeSoundReg
lda #SEGMENTS_FREQ_HIGH
ldx #SOUND_REG_FREQ_HIGH+SEGMENTS_OSC_NUM
jsl writeSoundReg
lda #SEGMENTS_VOLUME
ldx #SOUND_REG_VOLUME+SEGMENTS_OSC_NUM
jsl writeSoundReg
lda #SEGMENTS_SIZE
ldx #SOUND_REG_SIZE+SEGMENTS_OSC_NUM
jsl writeSoundReg
lda #SEGMENTS_SOUND_ADDR/256
ldx #SOUND_REG_POINTER+SEGMENTS_OSC_NUM
jsl writeSoundReg
lda #SEGMENTS_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+SEGMENTS_OSC_NUM
jsl writeSoundReg
lda #SEGMENTS_FREQ_LOW
ldx #SOUND_REG_FREQ_LOW+SEGMENTS_OSC_NUM+1
jsl writeSoundReg
lda #SEGMENTS_FREQ_HIGH
ldx #SOUND_REG_FREQ_HIGH+SEGMENTS_OSC_NUM+1
jsl writeSoundReg
lda #SEGMENTS_VOLUME
ldx #SOUND_REG_VOLUME+SEGMENTS_OSC_NUM+1
jsl writeSoundReg
lda #SEGMENTS_SIZE
ldx #SOUND_REG_SIZE+SEGMENTS_OSC_NUM+1
jsl writeSoundReg
lda #SEGMENTS_SOUND_ADDR/256
ldx #SOUND_REG_POINTER+SEGMENTS_OSC_NUM+1
jsl writeSoundReg
lda #SEGMENTS_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+SEGMENTS_OSC_NUM+1
jsl writeSoundReg
; Bonus sound
@ -303,7 +417,35 @@ soundInit_writeRegLow anop
lda #FIRE_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+FIRE_OSC_NUM
jsl writeSoundReg
; Extra life sound
pea EXTRA_LIFE_SOUND_ADDR
jsl loadExtraLifeSound
lda #EXTRA_LIFE_FREQ_LOW
ldx #SOUND_REG_FREQ_LOW+EXTRA_LIFE_OSC_NUM
jsl writeSoundReg
lda #EXTRA_LIFE_FREQ_HIGH
ldx #SOUND_REG_FREQ_HIGH+EXTRA_LIFE_OSC_NUM
jsl writeSoundReg
lda #EXTRA_LIFE_VOLUME
ldx #SOUND_REG_VOLUME+EXTRA_LIFE_OSC_NUM
jsl writeSoundReg
lda #EXTRA_LIFE_SIZE
ldx #SOUND_REG_SIZE+EXTRA_LIFE_OSC_NUM
jsl writeSoundReg
lda #EXTRA_LIFE_SOUND_ADDR/256
ldx #SOUND_REG_POINTER+EXTRA_LIFE_OSC_NUM
jsl writeSoundReg
lda #EXTRA_LIFE_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+EXTRA_LIFE_OSC_NUM
jsl writeSoundReg
rtl
@ -332,6 +474,11 @@ playBonusSound_noWrap anop
playDeathSound entry
jsl stopSpiderSound
jsl stopFleaSound
jsl stopScorpionSound
jsl stopSegmentSound
lda #DEATH_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+DEATH_OSC_NUM
jsl writeSoundReg
@ -353,11 +500,6 @@ playKillSound entry
rtl
playExtraLifeSound entry
; Write this code...
rtl
playFireSound entry
lda #FIRE_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+FIRE_OSC_NUM
@ -367,15 +509,59 @@ playFireSound entry
ldx #SOUND_REG_CONTROL+FIRE_OSC_NUM
jsl writeSoundReg
rtl
playExtraLifeSound entry
lda #EXTRA_LIFE_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+EXTRA_LIFE_OSC_NUM
jsl writeSoundReg
lda #EXTRA_LIFE_CONTROL
ldx #SOUND_REG_CONTROL+EXTRA_LIFE_OSC_NUM
jsl writeSoundReg
rtl
startSegmentSound entry
jsl stopSegmentSound
lda #SEGMENTS_CONTROL
ldx #SOUND_REG_CONTROL+SEGMENTS_OSC_NUM
jsl writeSoundReg
rtl
stopSegmentSound entry
lda #SEGMENTS_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+SEGMENTS_OSC_NUM
jsl writeSoundReg
lda #SEGMENTS_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+SEGMENTS_OSC_NUM+1
jsl writeSoundReg
rtl
startSpiderSound entry
; Write this code...
jsl stopSpiderSound
lda #SPIDER_CONTROL
ldx #SOUND_REG_CONTROL+SPIDER_OSC_NUM
jsl writeSoundReg
rtl
stopSpiderSound entry
; Write this code...
lda #SPIDER_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+SPIDER_OSC_NUM
jsl writeSoundReg
lda #SPIDER_CONTROL+SOUND_HALTED
ldx #SOUND_REG_CONTROL+SPIDER_OSC_NUM+1
jsl writeSoundReg
rtl

View File

@ -559,6 +559,7 @@ updateSpider_downChangeDirDiagRight anop
rtl
updateSpider_offScreen anop
jsl stopSpiderSound
stz spiderState
rtl
@ -569,6 +570,7 @@ addSpider entry
rtl
addSpider_checkSpeed anop
jsl startSpiderSound
lda gameScore+2
bne addSpider_fast
lda gameScore
@ -862,6 +864,7 @@ explodeSpider entry
lda spiderScreenOffset
inc a
sta spiderScreenOffset
jsl stopSpiderSound
explodeSpider_done anop
rtl

View File

@ -29,6 +29,7 @@ levelInit entry
levelStart entry
lda colourLevelNum
jsl setColour
jsl startSegmentSound
ldx centipedeLevelNum
lda levelTable,x
@ -89,6 +90,7 @@ updateLevel_checkSegments anop
bne updateLevel_done
lda #NEXT_LEVEL_FRAME_COUNT
sta nextLevelFrameCount
jsl stopSegmentSound
updateLevel_done anop
rtl

View File

@ -100,6 +100,15 @@ void loadFireSound(word addr)
}
void loadExtraLifeSound(word addr)
{
Handle handle = LoadResource(rRawSound, EXTRA_LIFE_SOUND);
HLock(handle);
WriteRamBlock(*handle, addr, GetHandleSize(handle));
HUnlock(handle);
}
int main(void)
{
int event;

View File

@ -23,6 +23,7 @@
#define KILL_SOUND 6
#define SEGMENTS_SOUND 7
#define SPIDER_SOUND 8
#define EXTRA_LIFE_SOUND 9
#endif /* defined(_GUARD_PROJECTBuGS_FILEmain_) */

View File

@ -54,3 +54,4 @@ read rRawSound (FIRE_SOUND) "sound/fire.raw";
read rRawSound (KILL_SOUND) "sound/kill.raw";
read rRawSound (SEGMENTS_SOUND) "sound/segments.raw";
read rRawSound (SPIDER_SOUND) "sound/spider.raw";
read rRawSound (EXTRA_LIFE_SOUND) "sound/extralife.raw";

6
BuGS/sound/extralife.raw Normal file

File diff suppressed because one or more lines are too long