From cc9f5dd5163047384841f9a405359ad51989d394 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 26 Mar 2023 19:31:52 +0800 Subject: [PATCH 1/4] Update vgmplay.asm YM2151 updates --- Source/Apps/VGM/vgmplay.asm | 654 ++++++++++++++++++++---------------- 1 file changed, 366 insertions(+), 288 deletions(-) diff --git a/Source/Apps/VGM/vgmplay.asm b/Source/Apps/VGM/vgmplay.asm index 2a53838e..8d550e7a 100644 --- a/Source/Apps/VGM/vgmplay.asm +++ b/Source/Apps/VGM/vgmplay.asm @@ -12,14 +12,12 @@ ; default file type, basic file size checking, polled CTC mode ; added by Phil Summers ; -; Bugs: YM2151 playback untested & no mute. -; CTC polled timing - predicted 44100 divider is too slow +; Bugs: CTC polled timing - predicted 44100 divider is too slow ; ; Assemble with: ; ; TASM -80 -b VGMPLAY.ASM VGMPLAY.COM ; -; ; A VGM file can play 44100 samples a second. This may be sound chip ; register commands or PCM data. This player does not support PCM playback ; due to the high processor speed and file size required. Typical VGM files @@ -31,60 +29,59 @@ ; Device and system specific definitions ;------------------------------------------------------------------------------ ; -custom .equ 0 ; System configurations +custom .equ 0 ; System configurations P8X180 .equ 1 RCBUS .equ 2 -sbcecb .equ 3 +sbcecb .equ 3 MBC .equ 4 ; -plt_romwbw .equ 1 ; Build for ROMWBW? -plt_type .equ sbcecb ; Select build configuration -debug .equ 0 ; Display port, register, config info +plt_romwbw .equ 1 ; Build for ROMWBW? +plt_type .equ sbcecb ; Select build configuration +debug .equ 0 ; Display port, register, config info ; ;------------------------------------------------------------------------------ ; Platform specific definitions. If building for ROMWBW, these may be overridden ;------------------------------------------------------------------------------ #IF (plt_type=custom) -RSEL .equ 09AH ; Primary AY-3-8910 Register selection -RDAT .equ 09BH ; Primary AY-3-8910 Register data -RSEL2 .equ 88H ; Secondary AY-3-8910 Register selection -RDAT2 .equ 89H ; Secondary AY-3-8910 Register data +RSEL .equ 09AH ; Primary AY-3-8910 Register selection +RDAT .equ 09BH ; Primary AY-3-8910 Register data +RSEL2 .equ 88H ; Secondary AY-3-8910 Register selection +RDAT2 .equ 89H ; Secondary AY-3-8910 Register data VGMBASE .equ $C0 -YMSEL .equ VGMBASE+00H ; Primary YM2162 11000000 a1=0 a0=0 -YMDAT .equ VGMBASE+01H ; Primary YM2162 11000001 a1=0 a0=1 -YM2SEL .equ VGMBASE+02H ; Secondary YM2162 11000010 a1=1 a0=0 -YM2DAT .equ VGMBASE+03H ; Secondary YM2162 11000011 a1=1 a0=1 -PSG1REG .equ VGMBASE+08H ; Primary SN76489 -PSG2REG .equ VGMBASE+09H ; Secondary SN76489 -ctcbase .equ VGMBASE+0CH ; CTC base address -YM2151_SEL1 .equ 0FEH ; Primary YM2151 register selection -YM2151_DAT1 .equ 0FFH ; Primary YM2151 register data -YM2151_SEL2 .equ 0FEH ; Secondary YM2151 register selection -YM2151_DAT2 .equ 0FFH ; Secondary YM2151 register data -plt_cpuspd .equ 6;000000 ; Non ROMWBW cpu speed default -FRAME_DLY .equ 10 ; Frame delay (~ 1/44100) - +YMSEL .equ VGMBASE+00H ; Primary YM2162 11000000 a1=0 a0=0 +YMDAT .equ VGMBASE+01H ; Primary YM2162 11000001 a1=0 a0=1 +YM2SEL .equ VGMBASE+02H ; Secondary YM2162 11000010 a1=1 a0=0 +YM2DAT .equ VGMBASE+03H ; Secondary YM2162 11000011 a1=1 a0=1 +PSG1REG .equ VGMBASE+04H ; Primary SN76489 +PSG2REG .equ VGMBASE+05H ; Secondary SN76489 +YM2151_SEL1 .equ VGMBASE+08H ; Primary YM2151 register selection +YM2151_DAT1 .equ VGMBASE+09H ; Primary YM2151 register data +YM2151_SEL2 .equ VGMBASE+0AH ; Secondary YM2151 register selection +YM2151_DAT2 .equ VGMBASE+0BH ; Secondary YM2151 register data +ctcbase .equ VGMBASE+0CH ; CTC base address +plt_cpuspd .equ 6;000000 ; Non ROMWBW cpu speed default +FRAME_DLY .equ 10 ; Frame delay (~ 1/44100) #ENDIF ; #IF (plt_type=P8X180) -RSEL .equ 82H ; Primary AY-3-8910 Register selection -RDAT .equ 83H ; Primary AY-3-8910 Register data -RSEL2 .equ 88H ; Secondary AY-3-8910 Register selection -RDAT2 .equ 89H ; Secondary AY-3-8910 Register data -PSG1REG .equ 84H ; Primary SN76489 -PSG2REG .equ 8AH ; Secondary SN76489 -YM2151_SEL1 .equ 0B0H ; Primary YM2151 register selection -YM2151_DAT1 .equ 0B1H ; Primary YM2151 register data -YM2151_SEL2 .equ 0B2H ; Secondary YM2151 register selection -YM2151_DAT2 .equ 0B3H ; Secondary YM2151 register data -ctcbase .equ 000H ; CTC base address -YMSEL .equ 000H ; Primary YM2162 11000000 a1=0 a0=0 -YMDAT .equ 000H ; Primary YM2162 11000001 a1=0 a0=1 -YM2SEL .equ 000H ; Secondary YM2162 11000010 a1=1 a0=0 -YM2DAT .equ 000H ; Secondary YM2162 11000011 a1=1 a0=1 -FRAME_DLY .equ 48 ; Frame delay (~ 1/44100) -plt_cpuspd .equ 20 ; Non ROMWBW cpu speed default +RSEL .equ 82H ; Primary AY-3-8910 Register selection +RDAT .equ 83H ; Primary AY-3-8910 Register data +RSEL2 .equ 88H ; Secondary AY-3-8910 Register selection +RDAT2 .equ 89H ; Secondary AY-3-8910 Register data +PSG1REG .equ 84H ; Primary SN76489 +PSG2REG .equ 8AH ; Secondary SN76489 +YM2151_SEL1 .equ 0B0H ; Primary YM2151 register selection +YM2151_DAT1 .equ 0B1H ; Primary YM2151 register data +YM2151_SEL2 .equ 0B2H ; Secondary YM2151 register selection +YM2151_DAT2 .equ 0B3H ; Secondary YM2151 register data +ctcbase .equ 000H ; CTC base address +YMSEL .equ 000H ; Primary YM2162 11000000 a1=0 a0=0 +YMDAT .equ 000H ; Primary YM2162 11000001 a1=0 a0=1 +YM2SEL .equ 000H ; Secondary YM2162 11000010 a1=1 a0=0 +YM2DAT .equ 000H ; Secondary YM2162 11000011 a1=1 a0=1 +FRAME_DLY .equ 48 ; Frame delay (~ 1/44100) +plt_cpuspd .equ 20 ; Non ROMWBW cpu speed default #ENDIF ; #IF (plt_type=RCBUS) @@ -103,7 +100,7 @@ YMSEL .equ 000H ; UNDEFINED ; Primary YM2162 11000000 a1=0 a0=0 YMDAT .equ 000H ; UNDEFINED ; Primary YM2162 11000001 a1=0 a0=1 YM2SEL .equ 000H ; UNDEFINED ; Secondary YM2162 11000010 a1=1 a0=0 YM2DAT .equ 000H ; UNDEFINED ; Secondary YM2162 11000011 a1=1 a0=1 -plt_cpuspd .equ 7;372800 ; CPUOSC ; Non ROMWBW cpu speed default +plt_cpuspd .equ 7;372800 ; CPUOSC ; Non ROMWBW cpu speed default FRAME_DLY .equ 12 ; Frame delay (~ 1/44100) #ENDIF ; @@ -184,7 +181,7 @@ RTCIO .equ 070H ; YM2162 Register write macros - with wait and timeout ;------------------------------------------------------------------------------ ; -#DEFINE setreg(reg,val) \ +#DEFINE s2612reg(reg,val) \ #DEFCONT \ ld a,reg #DEFCONT \ out (YMSEL),a #DEFCONT \ ld a,val @@ -195,7 +192,7 @@ RTCIO .equ 070H #DEFCONT \ jp nc,$+5 #DEFCONT \ djnz $-6 ; -#DEFINE setreg2(reg,val) \ +#DEFINE s2612reg2(reg,val) \ #DEFCONT \ ld a,reg #DEFCONT \ out (YM2SEL),a #DEFCONT \ ld a,val @@ -205,9 +202,30 @@ RTCIO .equ 070H #DEFCONT \ rlca #DEFCONT \ jp nc,$+5 #DEFCONT \ djnz $-6 - +; ;------------------------------------------------------------------------------ -; VGM Codes - see vgmrips.net/wiki/VGM_specification +; YM2151 Register write macros - with wait and timeout +;------------------------------------------------------------------------------ +; +; Status Byte: Bit +; 7 Busy Flag (1=Busy) +; 6-2 Not Used +; 1 Timer B Overflow (0=No Overflow, 1=Overflow) +; 0 Timer A Overflow (0=No Overflow, 1=Overflow) +; +#DEFINE s2151reg(reg,val) \ +#DEFCONT \ ld a,reg +#DEFCONT \ out (YM2151_SEL1),a +#DEFCONT \ ld a,val +#DEFCONT \ out (YM2151_DAT1),a +#DEFCONT \ ld b,0 +#DEFCONT \ in a,(YM2151_SEL1) +#DEFCONT \ rlca +#DEFCONT \ jp nc,$+5 +#DEFCONT \ djnz $-6 +; +;------------------------------------------------------------------------------ +; VGM Codes - see vgmrips.net/wiki/VGM_Specification ;------------------------------------------------------------------------------ VGM_GG_W .equ 04FH ; GAME GEAR PSG STEREO. WRITE DD TO PORT 0X06 @@ -219,8 +237,8 @@ VGM_WNS .equ 061H ; WAIT N SAMPLES VGM_W735 .equ 062H ; WAIT 735 SAMPLES (1/60TH SECOND) VGM_W882 .equ 063H ; WAIT 882 SAMPLES (1/50TH SECOND) VGM_ESD .equ 066H ; END OF SOUND DATA -VGM_YM21511_W .equ 054H ; YM2612 #1 WRITE VALUE DD -VGM_YM21512_W .equ 0A4H ; YM2612 #2 WRITE VALUE DD +VGM_YM21511_W .equ 054H ; YM2151 #1 WRITE VALUE DD +VGM_YM21512_W .equ 0A4H ; YM2151 #2 WRITE VALUE DD ;------------------------------------------------------------------------------ ; Generic CP/M definitions @@ -490,7 +508,7 @@ YM2162_2 CP VGM_YM26122_W ; YM2151 SECTION ; YM2151_1 CP VGM_YM21511_W - JR NZ,YM2151_2 + JR NZ,YM2151_2 LD A,(HL) OUT (YM2151_SEL1),A INC HL @@ -759,252 +777,254 @@ SKIP1: LD A,(IX+0) XOR A OUT (RDAT), A OUT (RDAT2), A +#IFDEF SBCV2004 CALL FASTIO +#ENDIF SKIP2: LD A,(IX+0) ; mute all channels on ym2612 AND %00110000 JP Z,SKIP3 - setreg($22,$00) ; lfo off - - setreg($27,$00) ; Disable independant Channel 3 - setreg($28,$00) ; note off ch 1 - setreg($28,$01) ; note off ch 2 - setreg($28,$02) ; note off ch 3 - setreg($28,$04) ; note off ch 4 - setreg($28,$05) ; note off ch 5 - setreg($28,$06) ; note off ch 6 - setreg($2b,$00) ; dac off - - setreg($b4,$00) ; sound off ch 1-3 - setreg($b5,$00) - setreg($b6,$00) - setreg2($b4,$00) ; sound off ch 4-6 - setreg2($b5,$00) - setreg2($b6,$00) - - setreg($40,$7f) ; ch 1-3 total level minimum - setreg($41,$7f) - setreg($42,$7f) - setreg($44,$7f) - setreg($45,$7f) - setreg($46,$7f) - setreg($48,$7f) - setreg($49,$7f) - setreg($4a,$7f) - setreg($4c,$7f) - setreg($4d,$7f) - setreg($4e,$7f) - - setreg2($40,$7f) ; ch 4-6 total level minimum - setreg2($41,$7f) - setreg2($42,$7f) - setreg2($44,$7f) - setreg2($45,$7f) - setreg2($46,$7f) - setreg2($48,$7f) - setreg2($49,$7f) - setreg2($4a,$7f) - setreg2($4c,$7f) - setreg2($4d,$7f) - setreg2($4e,$7f) + s2612reg($22,$00) ; lfo off + + s2612reg($27,$00) ; Disable independant Channel 3 + s2612reg($28,$00) ; note off ch 1 + s2612reg($28,$01) ; note off ch 2 + s2612reg($28,$02) ; note off ch 3 + s2612reg($28,$04) ; note off ch 4 + s2612reg($28,$05) ; note off ch 5 + s2612reg($28,$06) ; note off ch 6 + s2612reg($2b,$00) ; dac off + + s2612reg($b4,$00) ; sound off ch 1-3 + s2612reg($b5,$00) + s2612reg($b6,$00) + s2612reg2($b4,$00) ; sound off ch 4-6 + s2612reg2($b5,$00) + s2612reg2($b6,$00) + + s2612reg($40,$7f) ; ch 1-3 total level minimum + s2612reg($41,$7f) + s2612reg($42,$7f) + s2612reg($44,$7f) + s2612reg($45,$7f) + s2612reg($46,$7f) + s2612reg($48,$7f) + s2612reg($49,$7f) + s2612reg($4a,$7f) + s2612reg($4c,$7f) + s2612reg($4d,$7f) + s2612reg($4e,$7f) + + s2612reg2($40,$7f) ; ch 4-6 total level minimum + s2612reg2($41,$7f) + s2612reg2($42,$7f) + s2612reg2($44,$7f) + s2612reg2($45,$7f) + s2612reg2($46,$7f) + s2612reg2($48,$7f) + s2612reg2($49,$7f) + s2612reg2($4a,$7f) + s2612reg2($4c,$7f) + s2612reg2($4d,$7f) + s2612reg2($4e,$7f) #if (0) - setreg($2a,$00) ; dac value - - setreg($24,$00) ; timer A frequency - setreg($25,$00) ; timer A frequency - setreg($26,$00) ; time B frequency - - setreg($30,$00) ; ch 1-3 multiply & detune - setreg($31,$00) - setreg($32,$00) - setreg($34,$00) - setreg($35,$00) - setreg($36,$00) - setreg($38,$00) - setreg($39,$00) - setreg($3a,$00) - setreg($3c,$00) - setreg($3d,$00) - setreg($3e,$00) - - setreg2($30,$00) ; ch 4-6 multiply & detune - setreg2($31,$00) - setreg2($32,$00) - setreg2($34,$00) - setreg2($35,$00) - setreg2($36,$00) - setreg2($38,$00) - setreg2($39,$00) - setreg2($3a,$00) - setreg2($3c,$00) - setreg2($3d,$00) - setreg2($3e,$00) - - setreg($50,$00) ; ch 1-3 attack rate and scaling - setreg($51,$00) - setreg($52,$00) - setreg($54,$00) - setreg($55,$00) - setreg($56,$00) - setreg($58,$00) - setreg($59,$00) - setreg($5a,$00) - setreg($5c,$00) - setreg($5d,$00) - setreg($5e,$00) - - setreg2($50,$00) ; ch 4-6 attack rate and scaling - setreg2($51,$00) - setreg2($52,$00) - setreg2($54,$00) - setreg2($55,$00) - setreg2($56,$00) - setreg2($58,$00) - setreg2($59,$00) - setreg2($5a,$00) - setreg2($5c,$00) - setreg2($5d,$00) - setreg2($5e,$00) - - setreg($60,$00) ; ch 1-3 decay rate and am enable - setreg($61,$00) - setreg($62,$00) - setreg($64,$00) - setreg($65,$00) - setreg($66,$00) - setreg($68,$00) - setreg($69,$00) - setreg($6a,$00) - setreg($6c,$00) - setreg($6d,$00) - setreg($6e,$00) - - setreg2($60,$00) ; ch 4-6 decay rate and am enable - setreg2($61,$00) - setreg2($62,$00) - setreg2($64,$00) - setreg2($65,$00) - setreg2($66,$00) - setreg2($68,$00) - setreg2($69,$00) - setreg2($6a,$00) - setreg2($6c,$00) - setreg2($6d,$00) - setreg2($6e,$00) - - setreg($70,$00) ; ch 1-3 sustain rate - setreg($71,$00) - setreg($72,$00) - setreg($74,$00) - setreg($75,$00) - setreg($76,$00) - setreg($78,$00) - setreg($79,$00) - setreg($7a,$00) - setreg($7c,$00) - setreg($7d,$00) - setreg($7e,$00) - - setreg2($70,$00) ; ch 4-6 sustain rate - setreg2($71,$00) - setreg2($72,$00) - setreg2($74,$00) - setreg2($75,$00) - setreg2($76,$00) - setreg2($78,$00) - setreg2($79,$00) - setreg2($7a,$00) - setreg2($7c,$00) - setreg2($7d,$00) - setreg2($7e,$00) - - setreg($80,$00) ; ch 1-3 release rate and sustain level - setreg($81,$00) - setreg($82,$00) - setreg($84,$00) - setreg($85,$00) - setreg($86,$00) - setreg($88,$00) - setreg($89,$00) - setreg($8a,$00) - setreg($8c,$00) - setreg($8d,$00) - setreg($8e,$00) - - setreg2($80,$00) ; ch 4-6 release rate and sustain level - setreg2($81,$00) - setreg2($82,$00) - setreg2($84,$00) - setreg2($85,$00) - setreg2($86,$00) - setreg2($88,$00) - setreg2($89,$00) - setreg2($8a,$00) - setreg2($8c,$00) - setreg2($8d,$00) - setreg2($8e,$00) - - setreg($90,$00) ; ch 1-3 ssg-eg - setreg($91,$00) - setreg($92,$00) - setreg($94,$00) - setreg($95,$00) - setreg($96,$00) - setreg($98,$00) - setreg($99,$00) - setreg($9a,$00) - setreg($9c,$00) - setreg($9d,$00) - setreg($9e,$00) - - setreg2($90,$00) ; ch 4-6 ssg-eg - setreg2($91,$00) - setreg2($92,$00) - setreg2($94,$00) - setreg2($95,$00) - setreg2($96,$00) - setreg2($98,$00) - setreg2($99,$00) - setreg2($9a,$00) - setreg2($9c,$00) - setreg2($9d,$00) - setreg2($9e,$00) - - setreg($a0,$00) ; ch 1-3 frequency - setreg($a1,$00) - setreg($a2,$00) - setreg($a4,$00) - setreg($a5,$00) - setreg($a6,$00) -; setreg($a8,$00) ; ch 3 special mode -; setreg($a9,$00) -; setreg($aa,$00) -; setreg($ac,$00) -; setreg($ad,$00) -; setreg($ae,$00) - - setreg2($a0,$00) ; ch 4-6 frequency - setreg2($a1,$00) - setreg2($a2,$00) - setreg2($a4,$00) - setreg2($a5,$00) - setreg2($a6,$00) -; setreg2($a8,$00) ; ch 3 special mode -; setreg2($a9,$00) -; setreg2($aa,$00) -; setreg2($ac,$00) -; setreg2($ad,$00) -; setreg2($ae,$00) - - setreg($b0,$00) ; ch 1-3 algorith + feedback - setreg($b1,$00) - setreg($b2,$00) - setreg2($b0,$00) ; ch 4-6 algorith + feedback - setreg2($b1,$00) - setreg2($b2,$00) + s2612reg($2a,$00) ; dac value + + s2612reg($24,$00) ; timer A frequency + s2612reg($25,$00) ; timer A frequency + s2612reg($26,$00) ; time B frequency + + s2612reg($30,$00) ; ch 1-3 multiply & detune + s2612reg($31,$00) + s2612reg($32,$00) + s2612reg($34,$00) + s2612reg($35,$00) + s2612reg($36,$00) + s2612reg($38,$00) + s2612reg($39,$00) + s2612reg($3a,$00) + s2612reg($3c,$00) + s2612reg($3d,$00) + s2612reg($3e,$00) + + s2612reg2($30,$00) ; ch 4-6 multiply & detune + s2612reg2($31,$00) + s2612reg2($32,$00) + s2612reg2($34,$00) + s2612reg2($35,$00) + s2612reg2($36,$00) + s2612reg2($38,$00) + s2612reg2($39,$00) + s2612reg2($3a,$00) + s2612reg2($3c,$00) + s2612reg2($3d,$00) + s2612reg2($3e,$00) + + s2612reg($50,$00) ; ch 1-3 attack rate and scaling + s2612reg($51,$00) + s2612reg($52,$00) + s2612reg($54,$00) + s2612reg($55,$00) + s2612reg($56,$00) + s2612reg($58,$00) + s2612reg($59,$00) + s2612reg($5a,$00) + s2612reg($5c,$00) + s2612reg($5d,$00) + s2612reg($5e,$00) + + s2612reg2($50,$00) ; ch 4-6 attack rate and scaling + s2612reg2($51,$00) + s2612reg2($52,$00) + s2612reg2($54,$00) + s2612reg2($55,$00) + s2612reg2($56,$00) + s2612reg2($58,$00) + s2612reg2($59,$00) + s2612reg2($5a,$00) + s2612reg2($5c,$00) + s2612reg2($5d,$00) + s2612reg2($5e,$00) + + s2612reg($60,$00) ; ch 1-3 decay rate and am enable + s2612reg($61,$00) + s2612reg($62,$00) + s2612reg($64,$00) + s2612reg($65,$00) + s2612reg($66,$00) + s2612reg($68,$00) + s2612reg($69,$00) + s2612reg($6a,$00) + s2612reg($6c,$00) + s2612reg($6d,$00) + s2612reg($6e,$00) + + s2612reg2($60,$00) ; ch 4-6 decay rate and am enable + s2612reg2($61,$00) + s2612reg2($62,$00) + s2612reg2($64,$00) + s2612reg2($65,$00) + s2612reg2($66,$00) + s2612reg2($68,$00) + s2612reg2($69,$00) + s2612reg2($6a,$00) + s2612reg2($6c,$00) + s2612reg2($6d,$00) + s2612reg2($6e,$00) + + s2612reg($70,$00) ; ch 1-3 sustain rate + s2612reg($71,$00) + s2612reg($72,$00) + s2612reg($74,$00) + s2612reg($75,$00) + s2612reg($76,$00) + s2612reg($78,$00) + s2612reg($79,$00) + s2612reg($7a,$00) + s2612reg($7c,$00) + s2612reg($7d,$00) + s2612reg($7e,$00) + + s2612reg2($70,$00) ; ch 4-6 sustain rate + s2612reg2($71,$00) + s2612reg2($72,$00) + s2612reg2($74,$00) + s2612reg2($75,$00) + s2612reg2($76,$00) + s2612reg2($78,$00) + s2612reg2($79,$00) + s2612reg2($7a,$00) + s2612reg2($7c,$00) + s2612reg2($7d,$00) + s2612reg2($7e,$00) + + s2612reg($80,$00) ; ch 1-3 release rate and sustain level + s2612reg($81,$00) + s2612reg($82,$00) + s2612reg($84,$00) + s2612reg($85,$00) + s2612reg($86,$00) + s2612reg($88,$00) + s2612reg($89,$00) + s2612reg($8a,$00) + s2612reg($8c,$00) + s2612reg($8d,$00) + s2612reg($8e,$00) + + s2612reg2($80,$00) ; ch 4-6 release rate and sustain level + s2612reg2($81,$00) + s2612reg2($82,$00) + s2612reg2($84,$00) + s2612reg2($85,$00) + s2612reg2($86,$00) + s2612reg2($88,$00) + s2612reg2($89,$00) + s2612reg2($8a,$00) + s2612reg2($8c,$00) + s2612reg2($8d,$00) + s2612reg2($8e,$00) + + s2612reg($90,$00) ; ch 1-3 ssg-eg + s2612reg($91,$00) + s2612reg($92,$00) + s2612reg($94,$00) + s2612reg($95,$00) + s2612reg($96,$00) + s2612reg($98,$00) + s2612reg($99,$00) + s2612reg($9a,$00) + s2612reg($9c,$00) + s2612reg($9d,$00) + s2612reg($9e,$00) + + s2612reg2($90,$00) ; ch 4-6 ssg-eg + s2612reg2($91,$00) + s2612reg2($92,$00) + s2612reg2($94,$00) + s2612reg2($95,$00) + s2612reg2($96,$00) + s2612reg2($98,$00) + s2612reg2($99,$00) + s2612reg2($9a,$00) + s2612reg2($9c,$00) + s2612reg2($9d,$00) + s2612reg2($9e,$00) + + s2612reg($a0,$00) ; ch 1-3 frequency + s2612reg($a1,$00) + s2612reg($a2,$00) + s2612reg($a4,$00) + s2612reg($a5,$00) + s2612reg($a6,$00) +; s2612reg($a8,$00) ; ch 3 special mode +; s2612reg($a9,$00) +; s2612reg($aa,$00) +; s2612reg($ac,$00) +; s2612reg($ad,$00) +; s2612reg($ae,$00) + + s2612reg2($a0,$00) ; ch 4-6 frequency + s2612reg2($a1,$00) + s2612reg2($a2,$00) + s2612reg2($a4,$00) + s2612reg2($a5,$00) + s2612reg2($a6,$00) +; s2612reg2($a8,$00) ; ch 3 special mode +; s2612reg2($a9,$00) +; s2612reg2($aa,$00) +; s2612reg2($ac,$00) +; s2612reg2($ad,$00) +; s2612reg2($ae,$00) + + s2612reg($b0,$00) ; ch 1-3 algorith + feedback + s2612reg($b1,$00) + s2612reg($b2,$00) + s2612reg2($b0,$00) ; ch 4-6 algorith + feedback + s2612reg2($b1,$00) + s2612reg2($b2,$00) #endif @@ -1014,6 +1034,64 @@ SKIP3: LD A,(IX+0) ; For YM2151 ... Unimplemented ; MUTE YM2151 + s2151reg($14,$30) ; disable timer %00110000 + + s2151reg($0f,$00) ; disable noise +; + s2151reg($1b,$00) ; CTx output off, LFO waveform + + s2151reg($08,$00) ; key off all channels + s2151reg($08,$01) + s2151reg($08,$02) + s2151reg($08,$03) + s2151reg($08,$04) + s2151reg($08,$05) + s2151reg($08,$06) + s2151reg($08,$07) + + s2151reg($60,$7f) ; total level = silent + s2151reg($61,$7f) + s2151reg($62,$7f) + s2151reg($63,$7f) + s2151reg($64,$7f) + s2151reg($65,$7f) + s2151reg($66,$7f) + s2151reg($67,$7f) + s2151reg($68,$7f) + s2151reg($69,$7f) + s2151reg($6A,$7f) + s2151reg($6B,$7f) + s2151reg($6C,$7f) + s2151reg($6D,$7f) + s2151reg($6E,$7f) + s2151reg($6F,$7f) + s2151reg($70,$7f) + s2151reg($71,$7f) + s2151reg($72,$7f) + s2151reg($73,$7f) + s2151reg($74,$7f) + s2151reg($75,$7f) + s2151reg($76,$7f) + s2151reg($77,$7f) + s2151reg($78,$7f) + s2151reg($79,$7f) + s2151reg($7A,$7f) + s2151reg($7B,$7f) + s2151reg($7C,$7f) + s2151reg($7D,$7f) + s2151reg($7E,$7f) + s2151reg($7F,$7f) + + s2151reg($20,$00) ; channel output off, no feedback + s2151reg($21,$00) + s2151reg($22,$00) + s2151reg($23,$00) + s2151reg($24,$00) + s2151reg($25,$00) + s2151reg($26,$00) + s2151reg($27,$00) +; + SKIP4 RET ; ;------------------------------------------------------------------------------ From a92c44e53f5c702d693053aa52cd3e380d747437 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Sun, 26 Mar 2023 20:43:47 +0800 Subject: [PATCH 2/4] ym2151 vgm files --- Source/Apps/VGM/Tunes/More/sabredan.vgm | Bin 0 -> 27769 bytes Source/Apps/VGM/Tunes/More/sure.vgm | Bin 0 -> 35814 bytes Source/Apps/VGM/vgmplay.txt | 6 ++++-- 3 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 Source/Apps/VGM/Tunes/More/sabredan.vgm create mode 100644 Source/Apps/VGM/Tunes/More/sure.vgm diff --git a/Source/Apps/VGM/Tunes/More/sabredan.vgm b/Source/Apps/VGM/Tunes/More/sabredan.vgm new file mode 100644 index 0000000000000000000000000000000000000000..88fdc1b2d6921223814eea857df5172c70ff5c79 GIT binary patch literal 27769 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 literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/Tunes/More/sure.vgm b/Source/Apps/VGM/Tunes/More/sure.vgm new file mode 100644 index 0000000000000000000000000000000000000000..74fbbb9ce429099dfcf27d7204e1f326e86d0788 GIT binary patch literal 35814 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 Io`+BVAGY382><{9 literal 0 HcmV?d00001 diff --git a/Source/Apps/VGM/vgmplay.txt b/Source/Apps/VGM/vgmplay.txt index 0961c4d3..955ece34 100644 --- a/Source/Apps/VGM/vgmplay.txt +++ b/Source/Apps/VGM/vgmplay.txt @@ -21,7 +21,7 @@ Supported platforms =================== VGM Player is currently being developed on the ROMWBW platform using the Retrobrew computers -EBC-SBC-V2 (Z80), ECB-SCG (AY-3-8910) and ECB-VGM (YM2612 and 2xSN76489) board. +EBC-SBC-V2 (Z80), ECB-SCG (AY-3-8910) and ECB-VGM (YM2612,YM2151 2xSN76489) board. It can be configured to run with other hardware such as RCBus, P8X180 and nhyodyne MBC. VGM files can be very big and are limited in size by the available TPA space, which is typically 52k. @@ -50,13 +50,15 @@ FIELDMAP.VGM - SN76489+YM2612 - Taikou Risshiden: Field Map: Summer ITSGAMOV.VGM - SN76489+YM2612 - Puyo Puyo Tsuu: It's Game Over! : 16K STARTDEM.VGN - 2xSN76489+AY-3-8910 * Exed Exes / Savage Bees: Start Demo ~Main BGM : 32K INCHINA.VGM - YM2612 * Double Dragon 3: The Rosetta Stone: In China : 44K - +SURE.VGM - YM2151 - Marital Age: Sure?? : 36K +SABERDAN.VGM - YM2151 - Road Runner: Sabre Dance (Attract Mode - Stage 4) : 28K * Included in disk images VGM sources =========== https://www.smspower.org/forums/15359-VGMPacksGameGearMegaCollection https://vgmrips.net/packs/chip/ym2612 +https://vgmrips.net/packs/chip/ym2151 https://project2612.org/ VGM Tools From 47a7d81bb9549c476ae4a0ca857f58f349e76e7a Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Mon, 27 Mar 2023 23:36:24 +0800 Subject: [PATCH 3/4] Update Applications.md Add basic VGMPLAY information --- Source/Doc/Applications.md | 78 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/Source/Doc/Applications.md b/Source/Doc/Applications.md index 8cec1c78..8c86d052 100644 --- a/Source/Doc/Applications.md +++ b/Source/Doc/Applications.md @@ -1028,3 +1028,81 @@ hardware interface code is specific to RomWBW and the application will not operate correctly on non-RomWBW systems. The source code is provided in the RomWBW distribution. + + +`\clearpage`{=latex} + +# VGMPLAY + +This application will allow you to play Video Game Music files. VGM +files contain music samples from a range of different sound chips +that were used in arcade games, game consoles and personal computer +systems. + +Video Game Music files have a .VGM file extension and each file +contains an embedded header that identifies the hardware it is +intended for and also the title of the music. + +All RomWBW operating system boot disks include a selection of sound +files in user area 3. Additional music files can be found at: + +[VGMRIPS website](https://vgmrips.net) + +[PROJECT2612 website](https://project2612.org/) + +Sound files are loaded into memory for playback, so the maximum size +file that can be played is around 52Kb. + +Sound chips currently supported are: + +* AY-3-8190 (and equivalent YM2149) +* YM2612 (and equivalent YM3848) +* SN76489 (single chip mono and dual chip stereo) +* YM2151 + +VGMPLAY supports playback of files with multiple combinations of these +chips. + +## Syntax + +`VGMPLAY `*``* + +*``* is the name of a sound file ending in .VGM + +## Usage + +VGMPLAY does not automatically detect the hardware platform or sound +hardware that you are using. This means a version customized for your +system must be assembled before use. + +To play a sound file, just use the VGMPLAY command and specify the file +to play after the command. So, for example, `VGMPLAY TEDDY` will load +the TEDDY.VGM sound file into memory and begin playing it. + +Playback can be stopped by pressing a key. There may be a delay before +playback stops. + +## Notes + +The default build configuration for VGMPLAY is: + +CPU speed: Autodetected + +| chip | number | port | notes +| --------- | ------- | -------- | ---------- +| AY-3-8910 | 1st | 09ah | stereo +| AY-3-8910 | 2nd | not set | stereo +| YM2612 | 1st | 0c0h | stereo +| YM2612 | 2nd | 0c4h | stereo +| SN76489 | 1st | 0c8h | mono/left +| SN76489 | 2nd | 0c9h | mono/right +| YM2151 | 1st | 0cah | stereo +| YM2151 | 2nd | 0cbh | stereo + +Inconsistant, garbled or distorted playback can be an indication that +your CPU clock speed is too high for your sound chip. In this case, if +your platform supports speed switching, then the CPUSPD application +can be used to reduce your processor speed. + +VGMPLAY is still under development. The source code is provided in the +RomWBW distribution. From 5b339aef3e01319a093b96d41ce89ba1c6ffccf6 Mon Sep 17 00:00:00 2001 From: b1ackmai1er Date: Mon, 27 Mar 2023 23:39:26 +0800 Subject: [PATCH 4/4] Update vgmplay.txt --- Source/Apps/VGM/vgmplay.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/Apps/VGM/vgmplay.txt b/Source/Apps/VGM/vgmplay.txt index 955ece34..7763144f 100644 --- a/Source/Apps/VGM/vgmplay.txt +++ b/Source/Apps/VGM/vgmplay.txt @@ -50,7 +50,7 @@ FIELDMAP.VGM - SN76489+YM2612 - Taikou Risshiden: Field Map: Summer ITSGAMOV.VGM - SN76489+YM2612 - Puyo Puyo Tsuu: It's Game Over! : 16K STARTDEM.VGN - 2xSN76489+AY-3-8910 * Exed Exes / Savage Bees: Start Demo ~Main BGM : 32K INCHINA.VGM - YM2612 * Double Dragon 3: The Rosetta Stone: In China : 44K -SURE.VGM - YM2151 - Marital Age: Sure?? : 36K +SURE.VGM - YM2151 - Martial Age: Sure?? : 36K SABERDAN.VGM - YM2151 - Road Runner: Sabre Dance (Attract Mode - Stage 4) : 28K * Included in disk images