Prev: EF19 Up: Map Next: F0C6
EF22: Drum sample player
Used by the routine at play_music_48k.
Input
A Calling this <speed value> (8/3/1 seem to be the used values in practice)
playdrum_2 EF22 LD HL,$F05A Address of drum 2 data
EF25 LD D,$6C 108 sample bytes
EF27 JR pd_start Jump to pd_start
This entry point is used by the routine at play_music_48k.
playdrum_1 EF29 LD HL,$EF5E Address of drum 1 data
EF2C LD D,$FC 252 sample bytes
This modifies the number of bits of each sample byte that is output.
pd_start EF2E LD ($EF3A),A Self modify 'LD B' @ pd_go <speed value> to be A as passed in
EF31 LD A,$01 Self modify 'LD A' @ pm_start_drums <drum is playing flag> to be 1
EF33 LD ($EF0E),A
EF36 JR pd_go Jump to pd_go
This entry point is used by the routine at play_music_48k.
pd_bank_go EF38 EXX Bank
Output a byte.
pd_go EF39 LD B,$08 <speed value> iterations -- Self modified by pd_start (sampled: 8, 3, 1)
pd_loop EF3B LD A,$10 Set speaker flag
EF3D NOP Delay
EF3E BIT 7,(HL) Test a sample bit
EF40 JR NZ,pd_output_bit Set speaker flag to match sample bit
EF42 RES 4,A
pd_output_bit EF44 OUT ($FE),A Output it
EF46 RLC (HL) Rotate sample byte in-place
EF48 DJNZ pd_loop Loop to pd_loop while B
EF4A INC HL Move to next sample byte
EF4B DEC D Decrement sample bytes remaining
EF4C JR Z,pd_end_of_sample Jump to pd_end_of_sample if no bytes remain
EF4E LD A,($EF14) Read A from 'LD A' @ pm_wait_for_interrupt -- <interrupt flag>
EF51 AND A Set flags
EF52 JP Z,pd_go Loop to pd_go if clear
EF55 EXX Otherwise unbank
EF56 RET Return
pd_end_of_sample EF57 XOR A Self modify 'LD A' @ pm_start_drums <drum is playing flag> to be 0 -- zeroed when playing stops
EF58 LD ($EF0E),A
EF5B JP pm_wait_for_interrupt Jump to pm_wait_for_interrupt
drum1 EF5E DEFB $FF,$00,$00,$00,$0F,$FF,$FF,$FF Drum 1 sample/data
EF66 DEFB $EF,$FF,$FF,$FF,$BE,$36,$10,$00
EF6E DEFB $00,$00,$00,$00,$00,$00,$00,$00
EF76 DEFB $00,$FF,$FF,$FF,$FF,$FF,$FF,$FF
EF7E DEFB $FF,$FF,$FF,$FF,$FF,$F8,$78,$80
EF86 DEFB $00,$00,$00,$00,$00,$00,$00,$00
EF8E DEFB $00,$C0,$E1,$FF,$FF,$FF,$FF,$FF
EF96 DEFB $FF,$FF,$FF,$FF,$FF,$BE,$F3,$9E
EF9E DEFB $70,$C0,$00,$00,$00,$00,$00,$00
EFA6 DEFB $01,$9E,$FF,$3F,$FF,$FF,$FF,$FF
EFAE DEFB $FF,$FF,$FF,$FF,$FF,$FB,$FF,$3F
EFB6 DEFB $38,$F0,$03,$80,$00,$00,$00,$00
EFBE DEFB $00,$00,$C6,$DB,$9D,$FF,$FF,$FF
EFC6 DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
EFCE DEFB $FF,$FE,$07,$70,$60,$00,$00,$00
EFD6 DEFB $01,$00,$00,$08,$80,$77,$DF,$FF
EFDE DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
EFE6 DEFB $FE,$FF,$F8,$A3,$CE,$1C,$64,$02
EFEE DEFB $20,$00,$0E,$00,$00,$3F,$18,$8F
EFF6 DEFB $9F,$FF,$FF,$DF,$FF,$FF,$FF,$FF
EFFE DEFB $FF,$EF,$FF,$FF,$EF,$FF,$3F,$FC
F006 DEFB $9C,$38,$CE,$00,$03,$00,$00,$00
F00E DEFB $C4,$7F,$01,$FF,$FF,$FF,$FF,$FF
F016 DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
F01E DEFB $3E,$40,$98,$10,$C0,$1F,$80,$00
F026 DEFB $FF,$00,$1F,$FF,$7F,$FF,$FF,$FF
F02E DEFB $FF,$FF,$FF,$FF,$FF,$FF,$B8,$77
F036 DEFB $7E,$FC,$FE,$7F,$E7,$6F,$DE,$FF
F03E DEFB $FE,$07,$F9,$FF,$3B,$3F,$3F,$FE
F046 DEFB $DF,$FF,$FF,$EF,$FF,$FF,$FF,$FF
F04E DEFB $FF,$FF,$03,$FE,$FF,$33,$A7,$FF
F056 DEFB $9F,$FF,$EF,$00
drum2 F05A DEFB $FF,$FF,$FF,$FF,$FF,$F3,$F8,$30 Drum 2 sample/data
F062 DEFB $FF,$DE,$00,$FF,$81,$FF,$FF,$FF
F06A DEFB $FF,$FF,$FF,$FF,$FF,$F4,$3B,$80
F072 DEFB $00,$00,$00,$00,$00,$3C,$00,$00
F07A DEFB $00,$00,$1B,$FF,$FF,$FF,$FF,$FF
F082 DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
F08A DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
F092 DEFB $FF,$FF,$E0,$00,$00,$00,$00,$00
F09A DEFB $00,$00,$00,$00,$00,$00,$00,$00
F0A2 DEFB $00,$00,$00,$00,$7F,$FF,$FF,$FF
F0AA DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
F0B2 DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
F0BA DEFB $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
F0C2 DEFB $FF,$FD,$7E,$00
Prev: EF19 Up: Map Next: F0C6