Prev: 57706 Up: Map Next: 57863
57815: Play (generic) sound effect
Used by the routines at 49274, 54053 and 55944.
Generic white noise sound effects, crunching, stepping sounds - e.g. doors opening/closing, creature footsteps. Also used to generate the thunder sound in the intro lightning routine.
  • The byte at 60246 determines length/frequency of the sound effect.
  • The address pointer stored at 60249, and initialised at address 0000 (ROM) provides random values for the sound.
57815 LD (60247),HL Preserve HL for this routine
57818 LD A,(60246) Counter/frequency for sound effect
57821 LD B,A Store in B register
57822 CP 0
57824 JR Z,57859
57826 DEC A Decrement counter and store
57827 LD (60246),A
57830 LD A,B Retrieve (pre-decremented) counter
57831 AND 7 Check bits 0-2 to cause an occasional change of address for the base address pointer
57833 LD HL,(60249) Get byte from address pointer in readiness
57836 LD A,(HL)
57837 JR NZ,57850
Every 8 loops, move to a different address for the byte value to base the effect on:
57839 INC HL Skip to the next address
57840 LD (60249),HL ..and store address pointer
57843 LD A,(HL)
57844 JR NZ,57850 Repeat of condition that was checked at 57837
57846 INC HL Skip another address
57847 LD (60249),HL ...and re-store counter
Use pseudo-random byte to generate sound:
57850 INC B Shift sound byte based on counter - randomize speaker bit
57851 RLA
57852 DJNZ 57851
57854 SBC A,A Based on the (randomized) carry flag the subtraction will cause the speaker bit to be either on or off (50/50)
57855 AND 16 Filter out everything except speaker bit (bit 4)
57857 OUT (254),A Output value to speaker (1 or 0)
57859 LD HL,(60247) Retrieve HL register pair value preserved at the start of the routine
57862 RET
Prev: 57706 Up: Map Next: 57863