mirror of https://github.com/jeremysrand/BuGS.git
Start to change the sound code to wait for the doc to be free and to write and then read to verify that the register write succeeded or try again. That seems to cleanup the sound on real HW. I have only done this for the bonus and the firing sound but probably all register writes should be done this way.
This commit is contained in:
parent
cf85ec4cb3
commit
a4a4b9ae4d
|
@ -7,7 +7,7 @@
|
|||
<key>Binary.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>3</integer>
|
||||
<integer>2</integer>
|
||||
</dict>
|
||||
<key>BuGS.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
|
@ -17,12 +17,12 @@
|
|||
<key>DiskImage.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>2</integer>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>doNotBuild.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
<integer>3</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
|
|
|
@ -108,6 +108,27 @@ SCORPION_FREQ_LOW equ 214
|
|||
SCORPION_CONTROL equ SOUND_SWAP_MODE
|
||||
SCORPION_SIZE equ $2d
|
||||
|
||||
|
||||
; Y has the register to write to (16 bit mode)
|
||||
; A has the value to write (8 bit mode)
|
||||
; Assuming not in increment mode
|
||||
writeReg entry
|
||||
sta registerValue
|
||||
writeReg_loop anop
|
||||
tya
|
||||
sta >SOUND_ADDR_LOW
|
||||
_docWait
|
||||
lda registerValue
|
||||
sta >SOUND_DATA_REG
|
||||
tya
|
||||
sta >SOUND_ADDR_LOW
|
||||
_docWait
|
||||
lda >SOUND_DATA_REG
|
||||
lda >SOUND_DATA_REG
|
||||
cmp registerValue
|
||||
bne writeReg_loop
|
||||
rts
|
||||
|
||||
|
||||
soundInit entry
|
||||
; Spider sound
|
||||
|
@ -641,31 +662,28 @@ playBonusSound entry
|
|||
short m
|
||||
lda >SOUND_SYSTEM_VOLUME
|
||||
and #$0f
|
||||
ora #$20
|
||||
sta >SOUND_CONTROL_REG
|
||||
|
||||
lda bonusSoundOscReg
|
||||
sta >SOUND_ADDR_LOW
|
||||
lda #BONUS_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER
|
||||
sta >SOUND_DATA_REG
|
||||
_writeReg bonusSoundOscReg,#BONUS_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER
|
||||
iny
|
||||
lda #BONUS_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER
|
||||
sta >SOUND_DATA_REG
|
||||
jsr writeReg
|
||||
|
||||
lda bonusSoundOscReg
|
||||
and #$1f
|
||||
ora #SOUND_REG_VOLUME
|
||||
sta >SOUND_ADDR_LOW
|
||||
tay
|
||||
lda tileRightVolume,x
|
||||
jsr writeReg
|
||||
iny
|
||||
lda tileRightVolume,x
|
||||
sta >SOUND_DATA_REG
|
||||
eor #$ff
|
||||
sta >SOUND_DATA_REG
|
||||
jsr writeReg
|
||||
|
||||
lda bonusSoundOscReg
|
||||
sta >SOUND_ADDR_LOW
|
||||
lda #BONUS_CONTROL+SOUND_RIGHT_SPEAKER
|
||||
sta >SOUND_DATA_REG
|
||||
_writeReg bonusSoundOscReg,#BONUS_CONTROL+SOUND_RIGHT_SPEAKER
|
||||
iny
|
||||
lda #BONUS_CONTROL+SOUND_LEFT_SPEAKER
|
||||
sta >SOUND_DATA_REG
|
||||
jsr writeReg
|
||||
long m
|
||||
|
||||
lda bonusSoundOscReg
|
||||
|
@ -758,31 +776,25 @@ playKillSound entry
|
|||
|
||||
playFireSound entry
|
||||
short m
|
||||
_docWait
|
||||
|
||||
lda >SOUND_SYSTEM_VOLUME
|
||||
and #$0f
|
||||
ora #$20
|
||||
sta >SOUND_CONTROL_REG
|
||||
|
||||
lda #SOUND_REG_CONTROL+FIRE_OSC_NUM
|
||||
sta >SOUND_ADDR_LOW
|
||||
lda #FIRE_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER
|
||||
sta >SOUND_DATA_REG
|
||||
lda #FIRE_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER
|
||||
sta >SOUND_DATA_REG
|
||||
_writeReg #SOUND_REG_CONTROL+FIRE_OSC_NUM,#FIRE_CONTROL+SOUND_HALTED+SOUND_RIGHT_SPEAKER
|
||||
_writeReg #SOUND_REG_CONTROL+FIRE_OSC_NUM+1,#FIRE_CONTROL+SOUND_HALTED+SOUND_LEFT_SPEAKER
|
||||
|
||||
lda #SOUND_REG_VOLUME+FIRE_OSC_NUM
|
||||
sta >SOUND_ADDR_LOW
|
||||
ldy #SOUND_REG_VOLUME+FIRE_OSC_NUM
|
||||
lda tileRightVolume,x
|
||||
jsr writeReg
|
||||
ldy #SOUND_REG_VOLUME+FIRE_OSC_NUM+1
|
||||
lda tileRightVolume,x
|
||||
sta >SOUND_DATA_REG
|
||||
eor #$ff
|
||||
sta >SOUND_DATA_REG
|
||||
jsr writeReg
|
||||
|
||||
lda #SOUND_REG_CONTROL+FIRE_OSC_NUM
|
||||
sta >SOUND_ADDR_LOW
|
||||
lda #FIRE_CONTROL+SOUND_RIGHT_SPEAKER
|
||||
sta >SOUND_DATA_REG
|
||||
lda #FIRE_CONTROL+SOUND_LEFT_SPEAKER
|
||||
sta >SOUND_DATA_REG
|
||||
_writeReg #SOUND_REG_CONTROL+FIRE_OSC_NUM,#FIRE_CONTROL+SOUND_RIGHT_SPEAKER
|
||||
_writeReg #SOUND_REG_CONTROL+FIRE_OSC_NUM+1,#FIRE_CONTROL+SOUND_LEFT_SPEAKER
|
||||
|
||||
long m
|
||||
rtl
|
||||
|
@ -1314,5 +1326,6 @@ fleaVolume dc i2'0'
|
|||
segmentSoundIsPlaying dc i2'1'
|
||||
spiderSoundIsPlaying dc i2'1'
|
||||
scorpionSoundIsPlaying dc i2'1'
|
||||
registerValue dc i2'0'
|
||||
|
||||
end
|
||||
|
|
|
@ -253,3 +253,18 @@ _incrementScore_noExtraMan&SYSCNT anop
|
|||
_incrementScore_no2000&SYSCNT anop
|
||||
sta scoreWithin20000,x
|
||||
mend
|
||||
|
||||
; Wait for the DOC to be ready
|
||||
macro
|
||||
_docWait
|
||||
_docWait_&SYSCNT anop
|
||||
lda >SOUND_CONTROL_REG
|
||||
bmi _docWait_&SYSCNT
|
||||
mend
|
||||
|
||||
macro
|
||||
_writeReg ®,&value
|
||||
ldy ®
|
||||
lda &value
|
||||
jsr writeReg
|
||||
mend
|
||||
|
|
|
@ -29,7 +29,7 @@ then
|
|||
fi
|
||||
|
||||
# This magic ensures that clicking stop in Xcode results in the emulator terminating.
|
||||
if true
|
||||
if false
|
||||
then
|
||||
cd make
|
||||
sed -i "" "s:^s7d1 *=.*$:s7d1 = $BOOTIMAGE:
|
||||
|
|
Loading…
Reference in New Issue