Browse Source

Update ym2612.asm

pull/312/head
b1ackmai1er 3 years ago
parent
commit
030228e9b8
  1. 28
      Source/HBIOS/ym2612.asm

28
Source/HBIOS/ym2612.asm

@ -239,20 +239,20 @@ YM_PERIOD: LD A, H ; IF ZERO - ERROR
; ;
LD A, H ; MAXIMUM TONE PERIOD IS 11-BITS LD A, H ; MAXIMUM TONE PERIOD IS 11-BITS
AND 11000000B ; ALLOWED RANGE IS 0001-07FF (2047) AND 11000000B ; ALLOWED RANGE IS 0001-07FF (2047)
JR NZ, YM_PERIOD1 ; AND 3 BITS FOR OCTAVE (7)
LD (AY_PENDING_PERIOD), HL ; RETURN NZ IF NUMBER TOO LARGE
JR NZ,YM_PERIOD1 ; AND 3 BITS FOR OCTAVE (7)
LD (YM_PENDING_PERIOD),HL ; RETURN NZ IF NUMBER TOO LARGE
RET ; SAVE AND RETURN SUCCESSFUL RET ; SAVE AND RETURN SUCCESSFUL
; ;
YM_PERIOD1: LD A, $FF ; REQUESTED PERIOD IS LARGER YM_PERIOD1: LD A, $FF ; REQUESTED PERIOD IS LARGER
LD (AY_PENDING_PERIOD), A ; THAN THE DEVICE CAN SUPPORT
LD (AY_PENDING_PERIOD+1), A; SO SET PERIOD TO FFFF
LD (YM_PENDING_PERIOD),A ; THAN THE DEVICE CAN SUPPORT
LD (YM_PENDING_PERIOD+1),A ; SO SET PERIOD TO FFFF
RET ; AND RETURN FAILURE RET ; AND RETURN FAILURE
; ;
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; SOUND DRIVER FUNCTION - DURATION
; Sound driver function - DURATION
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; ;
YM_DURATION: LD (YM_PENDING_DURATION),HL ; SET TONE DURATION
YM_DURATION: LD (YM_PENDING_DURATION),HL ; SET TONE DURATION
XOR A XOR A
RET RET
; ;
@ -265,7 +265,7 @@ YM_PLAY: LD A,(YM_RDY_RST) ; IF STILL IN RESET
OR A ; STATE GO SETUP FOR OR A ; STATE GO SETUP FOR
CALL Z,YM_MAKE_RDY ; PLAYING CALL Z,YM_MAKE_RDY ; PLAYING
; ;
ld hl,(AY_PENDING_PERIOD) ; GET THE PREVIOUSLY SETUP
ld hl,(YM_PENDING_PERIOD) ; GET THE PREVIOUSLY SETUP
ld de,ym_playnote+5 ; TONE DATA AND ld de,ym_playnote+5 ; TONE DATA AND
ld a,h ld a,h
ld (de),a ; PATCH IT INTO THE ld (de),a ; PATCH IT INTO THE
@ -273,6 +273,13 @@ YM_PLAY: LD A,(YM_RDY_RST) ; IF STILL IN RESET
inc de inc de
ld a,l ld a,l
ld (de),a ld (de),a
inc de
inc de
ld A,(YM_PENDING_VOLUME) ; GET VOLUME
srl a
cpl
and %01111111 ; PATCH IT INTO THE
ld (de),a ; YM2612 PLAY COMMAND
; ;
ld hl,ym_playnote ; NOW PLAY IT ld hl,ym_playnote ; NOW PLAY IT
jp ym_prog jp ym_prog
@ -290,10 +297,11 @@ YM_MAKE_RDY: CPL
; Command sequence to play a note ; Command sequence to play a note
;------------------------------------------------------------------------------ ;------------------------------------------------------------------------------
; ;
ym_playnote: .db part0, 8/2
ym_playnote: .db part0, 10/2
.db $28, $00 ; [0] KEY OFF .db $28, $00 ; [0] KEY OFF
.db $A4, $3F ; [0] Frequency MSB
.db $A0, $FF ; [0] Frequency LSB
.db $A4, $3F ; [0] Frequency MSB ; patch +5
.db $A0, $FF ; [0] Frequency LSB ; patch +7
.db $4C, $00 ; [0] Volume ; patch +9
.db $28, $F0 ; [0] KEY ON .db $28, $F0 ; [0] KEY ON
.db $00 ; End flag .db $00 ; End flag
; ;

Loading…
Cancel
Save