Код:
;****************************************
; IN GAME BEEPER ROUTINES...
;****************************************
Beeper: ld hl,(FXPointer) ; table pointer
ld a,(hl) ; frequency + code (1 frame info only)
inc hl
cp LASTFXCODE ; new control code?
jr nc,PlayFX0
add a,a
jr nz,PlayFX
ld (FXNumber),a ; no more sound
jr WaitInt
PlayFX: push hl
add a,FXRout & 0xff
ld l,a
ld h,FXRout / 0x100
ld a,(hl)
inc l
ld h,(hl)
ld l,a
ld (FXCode),hl ; change current beeper routine
pop hl
ld a,(hl)
PlayFX0: ld (FXPointer),hl ; ready for next time
ld e,a ; current frequency
ld d,a
ld hl,PlayOut ; return address
push hl
ld hl,(FXCode)
defb OP_JPHL
PlayOut: xor a
out (BEEPPORT),a
di
ret
;****************************************
; NORMAL BEEP...
;****************************************
Beep: ld a,0x10
out (BEEPPORT),a
ld b,e
Beep0: ld a,r
ret m
djnz Beep0
jr Beep1
Beep1: ld a,0
out (BEEPPORT),a
ld b,d
Beep2: ld a,r
ret m
djnz Beep2
jr Beep
;****************************************
; PHASE BEEP...
;****************************************
Boop: ld a,0x10
out (BEEPPORT),a
inc e
ld b,e
Boop0: ld a,r
ret m
djnz Boop0
jr Boop1
Boop1: ld a,0
out (BEEPPORT),a
dec d
ld b,d
Boop2: ld a,r
ret m
djnz Boop2
jr Boop
;****************************************
; WHITE NOISE BEEP...
;****************************************
Hiss: ld hl,0 ; rom pointer
Hisso: ld a,0x10
out (BEEPPORT),a
ld b,(hl)
inc hl
Hiss0: ld a,r
ret m
djnz Hiss0
ld a,0
out (BEEPPORT),a
ld b,d
inc d
Hiss2: ld a,r
ret m
djnz Hiss2
jr Hisso