├── VGMPlay
├── .gitignore
├── chips
│ ├── emu2413_NESpatches.txt
│ ├── pwm.c
│ ├── pwm.h
│ ├── ym2612.c
│ ├── ym2612.h
│ ├── scd_pcm.c
│ ├── ws_audio.c
│ ├── adlibemu_opl2.c
│ ├── adlibemu_opl3.c
│ ├── panning.h
│ ├── c6280intf.h
│ ├── vsu.h
│ ├── ay_intf.h
│ ├── nes_intf.h
│ ├── qsound_intf.h
│ ├── ws_audio.h
│ ├── np_nes_apu.h
│ ├── np_nes_fds.h
│ ├── gb.h
│ ├── qsound_ctr.h
│ ├── c352.h
│ ├── c6280.h
│ ├── adlibemu.h
│ ├── dac_control.h
│ ├── saa1099.h
│ ├── sn764intf.h
│ ├── 2413intf.h
│ ├── np_nes_dmc.h
│ ├── multipcm.h
│ ├── qsound_mame.h
│ ├── iremga20.h
│ ├── c140.h
│ ├── vrc7tone.h
│ ├── scspdsp.h
│ ├── rf5c68.h
│ ├── ChipIncl.h
│ ├── k053260.h
│ ├── ymf271.h
│ ├── x1_010.h
│ ├── emutypes.h
│ ├── es5503.h
│ ├── ymf278b.h
│ ├── 2151intf.h
│ ├── 3526intf.h
│ ├── segapcm.h
│ ├── 3812intf.h
│ ├── ymz280b.h
│ ├── 262intf.h
│ ├── k051649.h
│ ├── ym2413.h
│ ├── scsp.h
│ ├── sn76496.h
│ ├── 8950intf.h
│ ├── upd7759.h
│ ├── scd_pcm.h
│ ├── okim6295.h
│ ├── mamedef.h
│ ├── okim6258.h
│ ├── ymf262.h
│ ├── 2203intf.h
│ ├── nes_apu.h
│ ├── k054539.h
│ ├── 2608intf.h
│ ├── 2610intf.h
│ ├── es5506.h
│ ├── panning.c
│ ├── 2612intf.h
│ ├── ym2413hd.h
│ ├── Ootake_PSG.h
│ ├── emu2149.h
│ ├── ym2151.h
│ ├── pokey.h
│ ├── ymdeltat.h
│ ├── c6280intf.c
│ ├── sn76489.h
│ ├── scsplfo.c
│ ├── ay_intf.c
│ ├── ws_initialIo.h
│ ├── fmopl.h
│ ├── sn764intf.c
│ ├── ay8910.h
│ ├── qsound_intf.c
│ ├── nes_defs.h
│ └── opll.h
├── VGMPlay.dsp
├── VGMPlay.dsw
├── pt_ioctl.c
├── vgm2wav.dsp
├── zlib
│ ├── zdll.lib
│ ├── zlib.lib
│ ├── zlibd.lib
│ └── zlib.def
├── PortTalk_IOCTL.h
├── XMasFiles
│ ├── WEWISH.CMF
│ ├── clyde1_1.dro
│ ├── rudolph.dro
│ ├── lem_xmas_001_jb.dro
│ ├── lemmings_012_tim7.vgm
│ └── SWJ-SQRC01_1C_trimmed_optimized.vgz
├── xdg
│ ├── icons
│ │ ├── vgmplay-16.png
│ │ ├── vgmplay-32.png
│ │ ├── vgmplay-64.png
│ │ └── vgmplay-128.png
│ ├── vgmplay-mime.xml
│ └── vgmplay.desktop.in
├── dbus_stub.c
├── mmkeys_stub.c
├── licenses
│ ├── List.txt
│ └── mame_license.txt
├── mmkeys.h
├── stdbool.h
├── ChipMapper.h
├── dbus.h
├── Stream.h
├── VGMPlay.sln
├── VGMPlay.h
├── VGMPlay_Intf.h
├── mmkeys_Win.c
├── VGMFile.h
├── vgm2pcm.c
└── vgmplay.1
├── in_vgm
├── icon.ico
├── in_vgm.dsp
├── in_vgm.dsw
├── images
│ ├── logo.bmp
│ └── tabicons.bmp
├── README.md
├── ini_func.h
├── in_vgm.h
├── Winamp
│ ├── GEN.H
│ ├── ipc_pe.h
│ ├── OUT.H
│ ├── DSP.H
│ └── IN2.H
├── ini_func.c
└── resource.h
├── .gitattributes
├── .gitignore
├── .travis.yml
└── README.md
/VGMPlay/.gitignore:
--------------------------------------------------------------------------------
1 | /obj
2 | /vgm2pcm
3 | /vgmplay
4 | /vgm2wav
5 | vgmplay.desktop
6 |
--------------------------------------------------------------------------------
/in_vgm/icon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/in_vgm/icon.ico
--------------------------------------------------------------------------------
/VGMPlay/chips/emu2413_NESpatches.txt:
--------------------------------------------------------------------------------
1 | http://forums.nesdev.com/viewtopic.php?f=6&t=9141
2 |
--------------------------------------------------------------------------------
/in_vgm/in_vgm.dsp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/in_vgm/in_vgm.dsp
--------------------------------------------------------------------------------
/in_vgm/in_vgm.dsw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/in_vgm/in_vgm.dsw
--------------------------------------------------------------------------------
/VGMPlay/VGMPlay.dsp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/VGMPlay.dsp
--------------------------------------------------------------------------------
/VGMPlay/VGMPlay.dsw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/VGMPlay.dsw
--------------------------------------------------------------------------------
/VGMPlay/chips/pwm.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/chips/pwm.c
--------------------------------------------------------------------------------
/VGMPlay/chips/pwm.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/chips/pwm.h
--------------------------------------------------------------------------------
/VGMPlay/pt_ioctl.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/pt_ioctl.c
--------------------------------------------------------------------------------
/VGMPlay/vgm2wav.dsp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/vgm2wav.dsp
--------------------------------------------------------------------------------
/VGMPlay/chips/ym2612.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/chips/ym2612.c
--------------------------------------------------------------------------------
/VGMPlay/chips/ym2612.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/chips/ym2612.h
--------------------------------------------------------------------------------
/VGMPlay/zlib/zdll.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/zlib/zdll.lib
--------------------------------------------------------------------------------
/VGMPlay/zlib/zlib.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/zlib/zlib.lib
--------------------------------------------------------------------------------
/VGMPlay/zlib/zlibd.lib:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/zlib/zlibd.lib
--------------------------------------------------------------------------------
/in_vgm/images/logo.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/in_vgm/images/logo.bmp
--------------------------------------------------------------------------------
/VGMPlay/PortTalk_IOCTL.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/PortTalk_IOCTL.h
--------------------------------------------------------------------------------
/VGMPlay/chips/scd_pcm.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/chips/scd_pcm.c
--------------------------------------------------------------------------------
/VGMPlay/chips/ws_audio.c:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/chips/ws_audio.c
--------------------------------------------------------------------------------
/in_vgm/images/tabicons.bmp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/in_vgm/images/tabicons.bmp
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.dsp text eol=crlf
2 | *.dsw text eol=crlf
3 | *.sln text eol=crlf
4 | *.vcxproj* text eol=crlf
5 |
--------------------------------------------------------------------------------
/VGMPlay/XMasFiles/WEWISH.CMF:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/XMasFiles/WEWISH.CMF
--------------------------------------------------------------------------------
/VGMPlay/XMasFiles/clyde1_1.dro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/XMasFiles/clyde1_1.dro
--------------------------------------------------------------------------------
/VGMPlay/XMasFiles/rudolph.dro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/XMasFiles/rudolph.dro
--------------------------------------------------------------------------------
/VGMPlay/xdg/icons/vgmplay-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/xdg/icons/vgmplay-16.png
--------------------------------------------------------------------------------
/VGMPlay/xdg/icons/vgmplay-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/xdg/icons/vgmplay-32.png
--------------------------------------------------------------------------------
/VGMPlay/xdg/icons/vgmplay-64.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/xdg/icons/vgmplay-64.png
--------------------------------------------------------------------------------
/VGMPlay/xdg/icons/vgmplay-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/xdg/icons/vgmplay-128.png
--------------------------------------------------------------------------------
/VGMPlay/XMasFiles/lem_xmas_001_jb.dro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/XMasFiles/lem_xmas_001_jb.dro
--------------------------------------------------------------------------------
/VGMPlay/XMasFiles/lemmings_012_tim7.vgm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/XMasFiles/lemmings_012_tim7.vgm
--------------------------------------------------------------------------------
/VGMPlay/chips/adlibemu_opl2.c:
--------------------------------------------------------------------------------
1 | #include "mamedef.h"
2 |
3 | #define OPLTYPE_IS_OPL2
4 | #include "adlibemu.h"
5 | #include "opl.c"
6 |
--------------------------------------------------------------------------------
/VGMPlay/chips/adlibemu_opl3.c:
--------------------------------------------------------------------------------
1 | #include "mamedef.h"
2 |
3 | #define OPLTYPE_IS_OPL3
4 | #include "adlibemu.h"
5 | #include "opl.c"
6 |
--------------------------------------------------------------------------------
/VGMPlay/XMasFiles/SWJ-SQRC01_1C_trimmed_optimized.vgz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vgmrips/vgmplay-legacy/HEAD/VGMPlay/XMasFiles/SWJ-SQRC01_1C_trimmed_optimized.vgz
--------------------------------------------------------------------------------
/VGMPlay/dbus_stub.c:
--------------------------------------------------------------------------------
1 | #include "chips/mamedef.h"
2 |
3 | void DBus_ReadWriteDispatch(void)
4 | {
5 |
6 | }
7 |
8 | void DBus_EmitSignal(UINT8 type)
9 | {
10 |
11 | }
12 |
--------------------------------------------------------------------------------
/VGMPlay/mmkeys_stub.c:
--------------------------------------------------------------------------------
1 | #include "chips/mamedef.h"
2 | #include "mmkeys.h"
3 |
4 | UINT8 MultimediaKeyHook_Init(void)
5 | {
6 | return 0;
7 | }
8 |
9 | void MultimediaKeyHook_Deinit(void)
10 | {
11 |
12 | }
13 |
14 | void MultimediaKeyHook_SetCallback(mmkey_cbfunc callbackFunc)
15 | {
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/VGMPlay/licenses/List.txt:
--------------------------------------------------------------------------------
1 | MAME - mame_license.txt
2 | DosBox - GPL.txt
3 | openMSX - GPL.txt
4 | Gens/GS - GPL.txt
5 | NSFPlay - [Google Code lists Apache License 2.0]
6 | Ootake - ?
7 | Gens - Cardware
8 | MEKA - ?
9 | zlib - see zlib.h
10 | in_wsr - ?
11 | vbjin/mednafen - GNU GPLv2
12 | EMU2149/EMU2413 - MIT License
13 |
--------------------------------------------------------------------------------
/VGMPlay/mmkeys.h:
--------------------------------------------------------------------------------
1 | #ifndef __MMKEYS_H__
2 | #define __MMKEYS_H__
3 |
4 | typedef void (*mmkey_cbfunc)(UINT8 event);
5 |
6 | #define MMKEY_PLAY 0x01
7 | #define MMKEY_PREV 0x10
8 | #define MMKEY_NEXT 0x11
9 |
10 | UINT8 MultimediaKeyHook_Init(void);
11 | void MultimediaKeyHook_Deinit(void);
12 | void MultimediaKeyHook_SetCallback(mmkey_cbfunc callbackFunc);
13 |
14 | #endif // __MMKEYS_H__
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ##################
2 | ## Visual Studio 6
3 | ##################
4 |
5 | # Build results
6 | [Dd]ebug/
7 | [Rr]elease/
8 | *.exe
9 | *.dll
10 |
11 | # Object files
12 | *.ilk
13 | *.obj
14 | *.pch
15 | *.pdb
16 | *.sbr
17 | *.tmp
18 |
19 | # Project cache files
20 | *.aps
21 | *.ncb
22 | *.opt
23 | *.sdf
24 | *.suo
25 | *.user
26 |
27 | Thumbs.db
28 | ehthumbs.db
29 | Desktop.ini
30 |
--------------------------------------------------------------------------------
/VGMPlay/chips/panning.h:
--------------------------------------------------------------------------------
1 | /*
2 | panning.h by Maxim in 2006
3 | Implements "simple equal power" panning using sine distribution
4 | I am not an expert on this stuff, but this is the best sounding of the methods I've tried
5 | */
6 |
7 | #ifndef PANNING_H
8 | #define PANNING_H
9 |
10 | void calc_panning(float channels[2], int position);
11 | void centre_panning(float channels[2]);
12 |
13 | #endif
--------------------------------------------------------------------------------
/VGMPlay/xdg/vgmplay-mime.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | VGM Audio File
5 |
6 |
7 |
8 | Compressed VGM Audio File
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/VGMPlay/stdbool.h:
--------------------------------------------------------------------------------
1 | // custom stdbool.h to for 1-byte bool types
2 |
3 | #ifndef _CSTM_STDBOOL_H_
4 | #define _CSTM_STDBOOL_H_
5 |
6 | #ifndef __cplusplus // C++ already has the bool-type
7 |
8 | #define false 0x00
9 | #define true 0x01
10 |
11 | // the MS VC++ 6 compiler uses a one-byte-type (unsigned char, to be exact), so I'll reproduce this here
12 | typedef unsigned char bool;
13 |
14 | #endif // !__cplusplus
15 |
16 | #endif // !_CSTM_STDBOOL_H_
17 |
--------------------------------------------------------------------------------
/VGMPlay/xdg/vgmplay.desktop.in:
--------------------------------------------------------------------------------
1 | [Desktop Entry]
2 | Name=VGMPlay
3 | GenericName=VGMPlay
4 | Comment=VGM File Player
5 | Exec=@BIN_PATH@vgmplay %f
6 | Terminal=true
7 | Icon=vgmplay
8 | Type=Application
9 | StartupNotify=false
10 | Version=1.0
11 | Categories=AudioVideo;
12 | MimeType=audio/x-vgm;audio/x-vgz;application/mpegurl;application/x-mpegurl;audio/mpegurl;audio/x-mpegurl;
13 | Keywords=Audio;Music;VGM;Player;Video Game Music;Sound Chip; OKI; SN; YM; OPL; PCM; AY;
14 |
--------------------------------------------------------------------------------
/VGMPlay/chips/c6280intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | void c6280_w(UINT8 ChipID, offs_t offset, UINT8 data);
4 | UINT8 c6280_r(UINT8 ChipID, offs_t offset);
5 |
6 | void c6280_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
7 | int device_start_c6280(UINT8 ChipID, int clock);
8 | void device_stop_c6280(UINT8 ChipID);
9 | void device_reset_c6280(UINT8 ChipID);
10 |
11 | void c6280_set_emu_core(UINT8 Emulator);
12 | void c6280_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
13 |
--------------------------------------------------------------------------------
/VGMPlay/chips/vsu.h:
--------------------------------------------------------------------------------
1 | #ifndef __VB_VSU_H
2 | #define __VB_VSU_H
3 |
4 | void VSU_Write(UINT8 ChipID, UINT32 A, UINT8 V);
5 |
6 | void vsu_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
7 |
8 | int device_start_vsu(UINT8 ChipID, int clock);
9 | void device_stop_vsu(UINT8 ChipID);
10 | void device_reset_vsu(UINT8 ChipID);
11 |
12 | //void vsu_set_options(UINT16 Options);
13 | void vsu_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
14 |
15 | #endif // __VB_VSU_H
16 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ay_intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | void ayxx_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
4 |
5 | int device_start_ayxx(UINT8 ChipID, int clock, UINT8 chip_type, UINT8 Flags);
6 | void device_stop_ayxx(UINT8 ChipID);
7 | void device_reset_ayxx(UINT8 ChipID);
8 |
9 | void ayxx_w(UINT8 ChipID, offs_t offset, UINT8 data);
10 |
11 | void ayxx_set_emu_core(UINT8 Emulator);
12 | void ayxx_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
13 | void ayxx_set_stereo_mask(UINT8 ChipID, UINT32 StereoMask);
14 |
--------------------------------------------------------------------------------
/VGMPlay/chips/nes_intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | void nes_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
4 |
5 | int device_start_nes(UINT8 ChipID, int clock);
6 | void device_stop_nes(UINT8 ChipID);
7 | void device_reset_nes(UINT8 ChipID);
8 |
9 | void nes_w(UINT8 ChipID, offs_t offset, UINT8 data);
10 |
11 | void nes_write_ram(UINT8 ChipID, offs_t DataStart, offs_t DataLength, const UINT8* RAMData);
12 |
13 | void nes_set_emu_core(UINT8 Emulator);
14 | void nes_set_options(UINT16 Options);
15 | void nes_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
16 |
--------------------------------------------------------------------------------
/in_vgm/README.md:
--------------------------------------------------------------------------------
1 | # in_vgm Build Instructions
2 |
3 | In order to build in_vgm you need to download the source of VGMPlay and extract it to `..\VGMPlay\`.
4 | Then you can open `in_vgm.dsw` with MS Visual C++ to compile it.
5 |
6 | in_vgm was made with MS VC++ 6. It should compile with later versions of MS Visual C++ too, but it will ask you to convert the project first.
7 |
8 | ## Debug Build Notes
9 | To make testing easier, the `in_vgm.dll` gets copied to the `Winamp\Plugins` folder after the Debug build finished.
10 | You may want to edit the post-build-command so that it fits with your Winamp PlugIn-directory.
11 |
--------------------------------------------------------------------------------
/VGMPlay/ChipMapper.h:
--------------------------------------------------------------------------------
1 | void open_fm_option(UINT8 ChipType, UINT8 OptType, UINT32 OptVal);
2 | void opl_chip_reset(void);
3 | void open_real_fm(void);
4 | void reset_real_fm(void);
5 | void setup_real_fm(UINT8 ChipType, UINT8 ChipID);
6 | void close_real_fm(void);
7 | void chip_reg_write(UINT8 ChipType, UINT8 ChipID, UINT8 Port, UINT8 Offset, UINT8 Data);
8 | void OPL_Hardware_Detecton(void);
9 | void OPL_HW_WriteReg(UINT16 Reg, UINT8 Data);
10 | void OPL_RegMapper(UINT16 Reg, UINT8 Data);
11 | void RefreshVolume(void);
12 | void StartSkipping(void);
13 | void StopSkipping(void);
14 | void ym2413opl_set_emu_core(UINT8 Emulator);
15 |
--------------------------------------------------------------------------------
/VGMPlay/chips/qsound_intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | void qsound_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
4 | int device_start_qsound(UINT8 ChipID, int clock);
5 | void device_stop_qsound(UINT8 ChipID);
6 | void device_reset_qsound(UINT8 ChipID);
7 |
8 | void qsound_w(UINT8 ChipID, offs_t offset, UINT8 data);
9 | UINT8 qsound_r(UINT8 ChipID, offs_t offset);
10 |
11 | void qsound_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
12 | const UINT8* ROMData);
13 | void qsound_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
14 |
15 | void qsound_set_emu_core(UINT8 Emulator);
16 |
17 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ws_audio.h:
--------------------------------------------------------------------------------
1 | #ifndef __WS_AUDIO_H__
2 | #define __WS_AUDIO_H__
3 |
4 | int ws_audio_init(UINT8 ChipID, int clock);
5 | void ws_audio_reset(UINT8 ChipID);
6 | void ws_audio_done(UINT8 ChipID);
7 | void ws_audio_update(UINT8 ChipID, stream_sample_t** buffer, int length);
8 | void ws_audio_port_write(UINT8 ChipID, UINT8 port, UINT8 value);
9 | UINT8 ws_audio_port_read(UINT8 ChipID, UINT8 port);
10 | //void ws_audio_process(void);
11 | //void ws_audio_sounddma(void);
12 | void ws_write_ram(UINT8 ChipID, UINT16 offset, UINT8 value);
13 | void ws_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
14 | //extern int WaveAdrs;
15 |
16 | #endif
17 |
--------------------------------------------------------------------------------
/VGMPlay/chips/np_nes_apu.h:
--------------------------------------------------------------------------------
1 | void NES_APU_np_FrameSequence(void* chip, int s);
2 | void* NES_APU_np_Create(int clock, int rate);
3 | void NES_APU_np_Destroy(void* chip);
4 | void NES_APU_np_Reset(void* chip);
5 | bool NES_APU_np_Read(void* chip, UINT32 adr, UINT32* val);
6 | bool NES_APU_np_Write(void* chip, UINT32 adr, UINT32 val);
7 | UINT32 NES_APU_np_Render(void* chip, INT32 b[2]);
8 | void NES_APU_np_SetRate(void* chip, double rate);
9 | void NES_APU_np_SetClock(void* chip, double clock);
10 | void NES_APU_np_SetOption(void* chip, int id, int b);
11 | void NES_APU_np_SetMask(void* chip, int m);
12 | void NES_APU_np_SetStereoMix(void* chip, int trk, INT16 mixl, INT16 mixr);
13 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: c
2 |
3 | cache: ccache
4 |
5 | before_install:
6 | - cd VGMPlay
7 | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
8 | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libao; fi
9 | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install ccache; fi
10 | - if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then sed -i .bak 's/MACOSX = 0/MACOSX = 1/g' Makefile; fi
11 |
12 | os:
13 | - linux
14 | - osx
15 |
16 | compiler:
17 | - gcc
18 |
19 | addons:
20 | apt:
21 | packages:
22 | - make
23 | - gcc
24 | - zlib1g-dev
25 | - libao-dev
26 | - libdbus-1-dev
27 |
28 | script:
29 | - make
30 |
--------------------------------------------------------------------------------
/VGMPlay/chips/np_nes_fds.h:
--------------------------------------------------------------------------------
1 | #ifndef _NP_NES_FDS_H_
2 | #define _NP_NES_FDS_H_
3 |
4 | void* NES_FDS_Create(int clock, int rate);
5 | void NES_FDS_Destroy(void* chip);
6 | void NES_FDS_Reset(void* chip);
7 | UINT32 NES_FDS_Render(void* chip, INT32 b[2]);
8 | bool NES_FDS_Write(void* chip, UINT32 adr, UINT32 val);
9 | bool NES_FDS_Read(void* chip, UINT32 adr, UINT32* val);
10 | void NES_FDS_SetRate(void* chip, double r);
11 | void NES_FDS_SetClock(void* chip, double c);
12 | void NES_FDS_SetOption(void* chip, int id, int val);
13 | void NES_FDS_SetMask(void* chip, int m);
14 | void NES_FDS_SetStereoMix(void* chip, int trk, INT16 mixl, INT16 mixr);
15 |
16 | #endif // _NP_NES_FDS_H_
17 |
--------------------------------------------------------------------------------
/VGMPlay/dbus.h:
--------------------------------------------------------------------------------
1 | #ifndef __DBUS_H__
2 | #define __DBUS_H__
3 |
4 | // Defines for the DBUS Signal handler
5 | #define SIGNAL_METADATA 0x01 // Metadata changed
6 | #define SIGNAL_PLAYSTATUS 0x02 // Playback Status Changed
7 | #define SIGNAL_SEEKSTATUS 0x04 // Seek Status Changed
8 | #define SIGNAL_SEEK 0x08 // Seeked
9 | #define SIGNAL_CONTROLS 0x10 // Playback controls need to be updated (CanGoNext/Previous)
10 | #define SIGNAL_VOLUME 0x20 // Volume needs to be updated
11 | #define SIGNAL_ALL 0xFF // All Signals
12 |
13 | #include "chips/mamedef.h"
14 |
15 | void DBus_ReadWriteDispatch(void);
16 | void DBus_EmitSignal(UINT8 type);
17 |
18 | #endif // __DBUS_H__
19 |
--------------------------------------------------------------------------------
/VGMPlay/chips/gb.h:
--------------------------------------------------------------------------------
1 |
2 | /* Custom Sound Interface */
3 | UINT8 gb_wave_r(UINT8 ChipID, offs_t offset);
4 | void gb_wave_w(UINT8 ChipID, offs_t offset, UINT8 data);
5 | UINT8 gb_sound_r(UINT8 ChipID, offs_t offset);
6 | void gb_sound_w(UINT8 ChipID, offs_t offset, UINT8 data);
7 |
8 | void gameboy_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
9 | int device_start_gameboy_sound(UINT8 ChipID, int clock);
10 | void device_stop_gameboy_sound(UINT8 ChipID);
11 | void device_reset_gameboy_sound(UINT8 ChipID);
12 |
13 | void gameboy_sound_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
14 | UINT32 gameboy_sound_get_mute_mask(UINT8 ChipID);
15 | void gameboy_sound_set_options(UINT8 Flags);
16 |
--------------------------------------------------------------------------------
/VGMPlay/chips/qsound_ctr.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | void qsoundc_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
4 | int device_start_qsound_ctr(UINT8 ChipID, int clock);
5 | void device_stop_qsound_ctr(UINT8 ChipID);
6 | void device_reset_qsound_ctr(UINT8 ChipID);
7 |
8 | void qsoundc_w(UINT8 ChipID, offs_t offset, UINT8 data);
9 | UINT8 qsoundc_r(UINT8 ChipID, offs_t offset);
10 | void qsoundc_write_data(UINT8 ChipID, UINT8 address, UINT16 data);
11 |
12 | void qsoundc_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
13 | const UINT8* ROMData);
14 | void qsoundc_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
15 |
16 | void qsoundc_wait_busy(UINT8 ChipID);
17 |
--------------------------------------------------------------------------------
/VGMPlay/chips/c352.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #ifndef __C352_H__
4 | #define __C352_H__
5 |
6 | void c352_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
7 | int device_start_c352(UINT8 ChipID, int clock, int clkdiv);
8 | void device_stop_c352(UINT8 ChipID);
9 | void device_reset_c352(UINT8 ChipID);
10 |
11 | UINT16 c352_r(UINT8 ChipID, offs_t offset);
12 | void c352_w(UINT8 ChipID, offs_t offset, UINT16 data);
13 |
14 | void c352_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
15 | const UINT8* ROMData);
16 |
17 | void c352_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
18 | UINT32 c352_get_mute_mask(UINT8 ChipID);
19 | void c352_set_options(UINT8 Flags);
20 |
21 | #endif /* __C352_H__ */
22 |
--------------------------------------------------------------------------------
/VGMPlay/chips/c6280.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //#include "devlegcy.h"
4 |
5 | typedef struct _c6280_interface c6280_interface;
6 | struct _c6280_interface
7 | {
8 | const char * cpu;
9 | };
10 |
11 | /* Function prototypes */
12 | //WRITE8_DEVICE_HANDLER( c6280_w );
13 | //READ8_DEVICE_HANDLER( c6280_r );
14 | void c6280m_w(void* chip, offs_t offset, UINT8 data);
15 | UINT8 c6280m_r(void* chip, offs_t offset);
16 |
17 | void c6280m_update(void* param, stream_sample_t **outputs, int samples);
18 | void* device_start_c6280m(int clock, int rate);
19 | void device_stop_c6280m(void* chip);
20 | void device_reset_c6280m(void* chip);
21 |
22 | void c6280m_set_mute_mask(void* chip, UINT32 MuteMask);
23 |
24 | //DECLARE_LEGACY_SOUND_DEVICE(C6280, c6280);
25 |
--------------------------------------------------------------------------------
/VGMPlay/chips/adlibemu.h:
--------------------------------------------------------------------------------
1 | #if defined(OPLTYPE_IS_OPL2)
2 | #define ADLIBEMU(name) adlib_OPL2_##name
3 | #elif defined(OPLTYPE_IS_OPL3)
4 | #define ADLIBEMU(name) adlib_OPL3_##name
5 | #endif
6 |
7 | typedef void (*ADL_UPDATEHANDLER)(void *param);
8 |
9 | void* ADLIBEMU(init)(UINT32 clock, UINT32 samplerate,
10 | ADL_UPDATEHANDLER UpdateHandler, void* param);
11 | void ADLIBEMU(stop)(void *chip);
12 | void ADLIBEMU(reset)(void *chip);
13 |
14 | void ADLIBEMU(writeIO)(void *chip, UINT32 addr, UINT8 val);
15 | void ADLIBEMU(getsample)(void *chip, INT32 ** sndptr, INT32 numsamples);
16 |
17 | UINT32 ADLIBEMU(reg_read)(void *chip, UINT32 port);
18 | void ADLIBEMU(write_index)(void *chip, UINT32 port, UINT8 val);
19 |
20 | void ADLIBEMU(set_mute_mask)(void *chip, UINT32 MuteMask);
21 |
--------------------------------------------------------------------------------
/VGMPlay/chips/dac_control.h:
--------------------------------------------------------------------------------
1 | void daccontrol_update(UINT8 ChipID, UINT32 samples);
2 | UINT8 device_start_daccontrol(UINT8 ChipID);
3 | void device_stop_daccontrol(UINT8 ChipID);
4 | void device_reset_daccontrol(UINT8 ChipID);
5 | void daccontrol_setup_chip(UINT8 ChipID, UINT8 ChType, UINT8 ChNum, UINT16 Command);
6 | void daccontrol_set_data(UINT8 ChipID, UINT8* Data, UINT32 DataLen, UINT8 StepSize, UINT8 StepBase);
7 | void daccontrol_refresh_data(UINT8 ChipID, UINT8* Data, UINT32 DataLen);
8 | void daccontrol_set_frequency(UINT8 ChipID, UINT32 Frequency);
9 | void daccontrol_start(UINT8 ChipID, UINT32 DataPos, UINT8 LenMode, UINT32 Length);
10 | void daccontrol_stop(UINT8 ChipID);
11 |
12 | #define DCTRL_LMODE_IGNORE 0x00
13 | #define DCTRL_LMODE_CMDS 0x01
14 | #define DCTRL_LMODE_MSEC 0x02
15 | #define DCTRL_LMODE_TOEND 0x03
16 | #define DCTRL_LMODE_BYTES 0x0F
17 |
--------------------------------------------------------------------------------
/VGMPlay/chips/saa1099.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #ifndef __SAA1099_H__
4 | #define __SAA1099_H__
5 |
6 | /**********************************************
7 | Philips SAA1099 Sound driver
8 | **********************************************/
9 |
10 | //WRITE8_DEVICE_HANDLER( saa1099_control_w );
11 | void saa1099_control_w(UINT8 ChipID, offs_t offset, UINT8 data);
12 | //WRITE8_DEVICE_HANDLER( saa1099_data_w );
13 | void saa1099_data_w(UINT8 ChipID, offs_t offset, UINT8 data);
14 |
15 | //DECLARE_LEGACY_SOUND_DEVICE(SAA1099, saa1099);
16 | void saa1099_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
17 | int device_start_saa1099(UINT8 ChipID, int clock);
18 | void device_stop_saa1099(UINT8 ChipID);
19 | void device_reset_saa1099(UINT8 ChipID);
20 |
21 | void saa1099_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
22 |
23 | #endif /* __SAA1099_H__ */
24 |
--------------------------------------------------------------------------------
/VGMPlay/chips/sn764intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | /*WRITE8_DEVICE_HANDLER( ym2413_w );
4 |
5 | WRITE8_DEVICE_HANDLER( ym2413_register_port_w );
6 | WRITE8_DEVICE_HANDLER( ym2413_data_port_w );
7 |
8 | DEVICE_GET_INFO( ym2413 );
9 | #define SOUND_YM2413 DEVICE_GET_INFO_NAME( ym2413 )*/
10 |
11 | void sn764xx_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
12 |
13 | int device_start_sn764xx(UINT8 ChipID, int clock, int shiftregwidth, int noisetaps,
14 | int negate, int stereo, int clockdivider, int freq0);
15 | void device_stop_sn764xx(UINT8 ChipID);
16 | void device_reset_sn764xx(UINT8 ChipID);
17 |
18 | void sn764xx_w(UINT8 ChipID, offs_t offset, UINT8 data);
19 |
20 | void sn764xx_set_emu_core(UINT8 Emulator);
21 | void sn764xx_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
22 | void sn764xx_set_panning(UINT8 ChipID, INT16* PanVals);
23 |
--------------------------------------------------------------------------------
/VGMPlay/chips/2413intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | /*WRITE8_DEVICE_HANDLER( ym2413_w );
4 |
5 | WRITE8_DEVICE_HANDLER( ym2413_register_port_w );
6 | WRITE8_DEVICE_HANDLER( ym2413_data_port_w );
7 |
8 | DEVICE_GET_INFO( ym2413 );
9 | #define SOUND_YM2413 DEVICE_GET_INFO_NAME( ym2413 )*/
10 |
11 | void ym2413_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
12 |
13 | int device_start_ym2413(UINT8 ChipID, int clock);
14 | void device_stop_ym2413(UINT8 ChipID);
15 | void device_reset_ym2413(UINT8 ChipID);
16 |
17 | void ym2413_w(UINT8 ChipID, offs_t offset, UINT8 data);
18 | void ym2413_register_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
19 | void ym2413_data_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
20 |
21 | void ym2413_set_emu_core(UINT8 Emulator);
22 | void ym2413_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
23 | void ym2413_set_panning(UINT8 ChipID, INT16* PanVals);
24 |
--------------------------------------------------------------------------------
/VGMPlay/Stream.h:
--------------------------------------------------------------------------------
1 | // Stream.h: Header File for constants and structures related to Sound Output
2 | //
3 |
4 | #ifdef WIN32
5 | #include
6 | #else
7 | #define MAX_PATH PATH_MAX
8 | #endif
9 |
10 | #define SAMPLESIZE sizeof(WAVE_16BS)
11 | #define BUFSIZE_MAX 0x1000 // Maximum Buffer Size in Bytes
12 | #ifndef WIN32
13 | #define BUFSIZELD 11 // Buffer Size
14 | #endif
15 | #define AUDIOBUFFERS 200 // Maximum Buffer Count
16 | // Windows: BUFFERSIZE = SampleRate / 100 * SAMPLESIZE (44100 / 100 * 4 = 1764)
17 | // 1 Audio-Buffer = 10 msec, Min: 5
18 | // Win95- / WinVista-safe: 500 msec
19 | // Linux: BUFFERSIZE = 1 << BUFSIZELD (1 << 11 = 2048)
20 | // 1 Audio-Buffer = 11.6 msec
21 |
22 | UINT8 SaveFile(UINT32 FileLen, const void* TempData);
23 | UINT8 SoundLogging(UINT8 Mode);
24 | UINT8 StartStream(UINT8 DeviceID);
25 | UINT8 StopStream(void);
26 | void PauseStream(bool PauseOn);
27 |
--------------------------------------------------------------------------------
/VGMPlay/chips/np_nes_dmc.h:
--------------------------------------------------------------------------------
1 | #ifndef _NP_NES_DMC_H_
2 | #define _NP_NES_DMC_H_
3 |
4 | void* NES_DMC_np_Create(int clock, int rate);
5 | void NES_DMC_np_Destroy(void *chip);
6 | void NES_DMC_np_Reset(void *chip);
7 | void NES_DMC_np_SetRate(void* chip, double rate);
8 | void NES_DMC_np_SetPal(void* chip, bool is_pal);
9 | void NES_DMC_np_SetAPU(void* chip, void* apu_);
10 | UINT32 NES_DMC_np_Render(void* chip, INT32 b[2]);
11 | void NES_DMC_np_SetMemory(void* chip, const UINT8* r);
12 | bool NES_DMC_np_Write(void* chip, UINT32 adr, UINT32 val);
13 | bool NES_DMC_np_Read(void* chip, UINT32 adr, UINT32* val);
14 | void NES_DMC_np_SetClock(void* chip, double rate);
15 | void NES_DMC_np_SetOption(void* chip, int id, int val);
16 | int NES_DMC_np_GetDamp(void* chip);
17 | void NES_DMC_np_SetMask(void* chip, int m);
18 | void NES_DMC_np_SetStereoMix(void* chip, int trk, INT16 mixl, INT16 mixr);
19 |
20 | #endif // _NP_NES_DMC_H_
21 |
--------------------------------------------------------------------------------
/in_vgm/ini_func.h:
--------------------------------------------------------------------------------
1 | void ReadIni_Integer(const char* Section, const char* Key, UINT32* Value);
2 | void ReadIni_SIntSht(const char* Section, const char* Key, INT16* Value);
3 | void ReadIni_IntByte(const char* Section, const char* Key, UINT8* Value);
4 | void ReadIni_Boolean(const char* Section, const char* Key, bool* Value);
5 | void ReadIni_String(const char* Section, const char* Key, char* String, UINT32 StrSize);
6 | void ReadIni_Float(const char* Section, const char* Key, float* Value);
7 |
8 | void WriteIni_Integer(const char* Section, const char* Key, UINT32 Value);
9 | void WriteIni_SInteger(const char* Section, const char* Key, INT32 Value);
10 | void WriteIni_XInteger(const char* Section, const char* Key, UINT32 Value);
11 | void WriteIni_Boolean(const char* Section, const char* Key, bool Value);
12 | void WriteIni_String(const char* Section, const char* Key, char* String);
13 | void WriteIni_Float(const char* Section, const char* Key, float Value);
14 |
--------------------------------------------------------------------------------
/VGMPlay/chips/multipcm.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //#include "devlegcy.h"
4 |
5 | void MultiPCM_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
6 | int device_start_multipcm(UINT8 ChipID, int clock);
7 | void device_stop_multipcm(UINT8 ChipID);
8 | void device_reset_multipcm(UINT8 ChipID);
9 |
10 | //WRITE8_DEVICE_HANDLER( multipcm_w );
11 | //READ8_DEVICE_HANDLER( multipcm_r );
12 | void multipcm_w(UINT8 ChipID, offs_t offset, UINT8 data);
13 | UINT8 multipcm_r(UINT8 ChipID, offs_t offset);
14 |
15 | void multipcm_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
16 | const UINT8* ROMData);
17 | //void multipcm_set_bank(running_device *device, UINT32 leftoffs, UINT32 rightoffs);
18 | void multipcm_set_bank(UINT8 ChipID, UINT32 leftoffs, UINT32 rightoffs);
19 | void multipcm_bank_write(UINT8 ChipID, UINT8 offset, UINT16 data);
20 |
21 | void multipcm_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
22 | //DECLARE_LEGACY_SOUND_DEVICE(MULTIPCM, multipcm);
23 |
--------------------------------------------------------------------------------
/VGMPlay/chips/qsound_mame.h:
--------------------------------------------------------------------------------
1 | /*********************************************************
2 |
3 | Capcom Q-Sound system
4 |
5 | *********************************************************/
6 |
7 | #pragma once
8 |
9 | //#include "devlegcy.h"
10 |
11 | #define QSOUND_CLOCK 4000000 /* default 4MHz clock */
12 |
13 | void qsoundm_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
14 | int device_start_qsoundm(UINT8 ChipID, int clock);
15 | void device_stop_qsoundm(UINT8 ChipID);
16 | void device_reset_qsoundm(UINT8 ChipID);
17 |
18 |
19 | //WRITE8_DEVICE_HANDLER( qsound_w );
20 | //READ8_DEVICE_HANDLER( qsound_r );
21 | void qsoundm_w(UINT8 ChipID, offs_t offset, UINT8 data);
22 | UINT8 qsoundm_r(UINT8 ChipID, offs_t offset);
23 |
24 |
25 | void qsoundm_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
26 | const UINT8* ROMData);
27 | void qsoundm_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
28 |
29 | //DECLARE_LEGACY_SOUND_DEVICE(QSOUND, qsound);
30 |
--------------------------------------------------------------------------------
/VGMPlay/chips/iremga20.h:
--------------------------------------------------------------------------------
1 | /*********************************************************
2 |
3 | Irem GA20 PCM Sound Chip
4 |
5 | *********************************************************/
6 | #pragma once
7 |
8 | #ifndef __IREMGA20_H__
9 | #define __IREMGA20_H__
10 |
11 | //#include "devlegcy.h"
12 |
13 | void IremGA20_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
14 | int device_start_iremga20(UINT8 ChipID, int clock);
15 | void device_stop_iremga20(UINT8 ChipID);
16 | void device_reset_iremga20(UINT8 ChipID);
17 |
18 | //WRITE8_DEVICE_HANDLER( irem_ga20_w );
19 | //READ8_DEVICE_HANDLER( irem_ga20_r );
20 | UINT8 irem_ga20_r(UINT8 ChipID, offs_t offset);
21 | void irem_ga20_w(UINT8 ChipID, offs_t offset, UINT8 data);
22 |
23 | void iremga20_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
24 | const UINT8* ROMData);
25 |
26 | void iremga20_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
27 |
28 | //DECLARE_LEGACY_SOUND_DEVICE(IREMGA20, iremga20);
29 |
30 | #endif /* __IREMGA20_H__ */
31 |
--------------------------------------------------------------------------------
/VGMPlay/chips/c140.h:
--------------------------------------------------------------------------------
1 | /* C140.h */
2 |
3 | #pragma once
4 |
5 | void c140_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
6 | int device_start_c140(UINT8 ChipID, int clock, int banking_type);
7 | void device_stop_c140(UINT8 ChipID);
8 | void device_reset_c140(UINT8 ChipID);
9 |
10 | //READ8_DEVICE_HANDLER( c140_r );
11 | //WRITE8_DEVICE_HANDLER( c140_w );
12 | UINT8 c140_r(UINT8 ChipID, offs_t offset);
13 | void c140_w(UINT8 ChipID, offs_t offset, UINT8 data);
14 |
15 | //void c140_set_base(device_t *device, void *base);
16 | void c140_set_base(UINT8 ChipID, void *base);
17 |
18 | enum
19 | {
20 | C140_TYPE_SYSTEM2,
21 | C140_TYPE_SYSTEM21,
22 | C140_TYPE_ASIC219
23 | };
24 |
25 | /*typedef struct _c140_interface c140_interface;
26 | struct _c140_interface {
27 | int banking_type;
28 | };*/
29 |
30 |
31 | void c140_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
32 | const UINT8* ROMData);
33 |
34 | void c140_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
35 |
36 | //DECLARE_LEGACY_SOUND_DEVICE(C140, c140);
37 |
--------------------------------------------------------------------------------
/in_vgm/in_vgm.h:
--------------------------------------------------------------------------------
1 | //#include "../VGMPlay.h"
2 |
3 | #if defined(APLHA)
4 |
5 | #define VER_EXTRA " alpha"
6 | #define VER_DATE " ("__DATE__" "__TIME__")"
7 |
8 | #elif defined(BETA)
9 |
10 | #define VER_EXTRA " beta"
11 | #define VER_DATE " ("__DATE__" "__TIME__")"
12 |
13 | #else
14 |
15 | #define VER_EXTRA ""
16 | #define VER_DATE ""
17 |
18 | #endif
19 |
20 | #define INVGM_VERSION VGMPLAY_VER_STR VER_EXTRA
21 | #define INVGM_TITLE "VGM Input Plugin v" INVGM_VERSION
22 | #define INVGM_TITLE_FULL "VGM Input Plugin v" INVGM_VERSION VER_DATE
23 |
24 | typedef struct plugin_options
25 | {
26 | bool ImmediateUpdate;
27 | bool NoInfoCache;
28 |
29 | UINT32 SampleRate;
30 | UINT32 ChipRate;
31 | UINT32 PauseNL;
32 | UINT32 PauseLp;
33 |
34 | char TitleFormat[0x80];
35 | bool JapTags;
36 | bool AppendFM2413;
37 | bool TrimWhitespc;
38 | bool StdSeparators;
39 | bool TagFallback;
40 | UINT32 MLFileType;
41 |
42 | bool Enable7z;
43 |
44 | bool ResetMuting;
45 | } PLGIN_OPTS;
46 |
47 | extern PLGIN_OPTS Options;
48 |
49 | #include "resource.h"
50 |
--------------------------------------------------------------------------------
/VGMPlay/chips/vrc7tone.h:
--------------------------------------------------------------------------------
1 | /* VRC7 VOICE */
2 | /* Dumped via VRC7 debug mode by Nuke.YKT */
3 | 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
4 | 0x03, 0x21, 0x05, 0x06, 0xE8, 0x81, 0x42, 0x27,
5 | 0x13, 0x41, 0x14, 0x0D, 0xD8, 0xF6, 0x23, 0x12,
6 | 0x11, 0x11, 0x08, 0x08, 0xFA, 0xB2, 0x20, 0x12,
7 | 0x31, 0x61, 0x0C, 0x07, 0xA8, 0x64, 0x61, 0x27,
8 | 0x32, 0x21, 0x1E, 0x06, 0xE1, 0x76, 0x01, 0x28,
9 | 0x02, 0x01, 0x06, 0x00, 0xA3, 0xE2, 0xF4, 0xF4,
10 | 0x21, 0x61, 0x1D, 0x07, 0x82, 0x81, 0x11, 0x07,
11 | 0x23, 0x21, 0x22, 0x17, 0xA2, 0x72, 0x01, 0x17,
12 | 0x35, 0x11, 0x25, 0x00, 0x40, 0x73, 0x72, 0x01,
13 | 0xB5, 0x01, 0x0F, 0x0F, 0xA8, 0xA5, 0x51, 0x02,
14 | 0x17, 0xC1, 0x24, 0x07, 0xF8, 0xF8, 0x22, 0x12,
15 | 0x71, 0x23, 0x11, 0x06, 0x65, 0x74, 0x18, 0x16,
16 | 0x01, 0x02, 0xD3, 0x05, 0xC9, 0x95, 0x03, 0x02,
17 | 0x61, 0x63, 0x0C, 0x00, 0x94, 0xC0, 0x33, 0xF6,
18 | 0x21, 0x72, 0x0D, 0x00, 0xC1, 0xD5, 0x56, 0x06,
19 | 0x01, 0x01, 0x18, 0x0F, 0xDF, 0xF8, 0x6A, 0x6D,
20 | 0x01, 0x01, 0x00, 0x00, 0xC8, 0xD8, 0xA7, 0x68,
21 | 0x05, 0x01, 0x00, 0x00, 0xF8, 0xAA, 0x59, 0x55,
22 |
--------------------------------------------------------------------------------
/VGMPlay/chips/scspdsp.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #ifndef __SCSPDSP_H__
4 | #define __SCSPDSP_H__
5 |
6 | //the DSP Context
7 | struct _SCSPDSP
8 | {
9 | //Config
10 | UINT16 *SCSPRAM;
11 | UINT32 SCSPRAM_LENGTH;
12 | UINT32 RBP; //Ring buf pointer
13 | UINT32 RBL; //Delay ram (Ring buffer) size in words
14 |
15 | //context
16 |
17 | INT16 COEF[64]; //16 bit signed
18 | UINT16 MADRS[32]; //offsets (in words), 16 bit
19 | UINT16 MPRO[128*4]; //128 steps 64 bit
20 | INT32 TEMP[128]; //TEMP regs,24 bit signed
21 | INT32 MEMS[32]; //MEMS regs,24 bit signed
22 | UINT32 DEC;
23 |
24 | //input
25 | INT32 MIXS[16]; //MIXS, 24 bit signed
26 | INT16 EXTS[2]; //External inputs (CDDA) 16 bit signed
27 |
28 | //output
29 | INT16 EFREG[16]; //EFREG, 16 bit signed
30 |
31 | int Stopped;
32 | int LastStep;
33 | };
34 |
35 | void SCSPDSP_Init(struct _SCSPDSP *DSP);
36 | void SCSPDSP_SetSample(struct _SCSPDSP *DSP, INT32 sample, INT32 SEL, INT32 MXL);
37 | void SCSPDSP_Step(struct _SCSPDSP *DSP);
38 | void SCSPDSP_Start(struct _SCSPDSP *DSP);
39 |
40 | #endif /* __SCSPDSP_H__ */
41 |
--------------------------------------------------------------------------------
/VGMPlay/chips/rf5c68.h:
--------------------------------------------------------------------------------
1 | /*********************************************************/
2 | /* ricoh RF5C68(or clone) PCM controller */
3 | /*********************************************************/
4 |
5 | #pragma once
6 |
7 | /******************************************/
8 | /*WRITE8_DEVICE_HANDLER( rf5c68_w );
9 |
10 | READ8_DEVICE_HANDLER( rf5c68_mem_r );
11 | WRITE8_DEVICE_HANDLER( rf5c68_mem_w );
12 |
13 | DEVICE_GET_INFO( rf5c68 );
14 | #define SOUND_RF5C68 DEVICE_GET_INFO_NAME( rf5c68 )*/
15 |
16 | void rf5c68_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
17 |
18 | int device_start_rf5c68(UINT8 ChipID, int clock);
19 | void device_stop_rf5c68(UINT8 ChipID);
20 | void device_reset_rf5c68(UINT8 ChipID);
21 |
22 | void rf5c68_w(UINT8 ChipID, offs_t offset, UINT8 data);
23 |
24 | UINT8 rf5c68_mem_r(UINT8 ChipID, offs_t offset);
25 | void rf5c68_mem_w(UINT8 ChipID, offs_t offset, UINT8 data);
26 | void rf5c68_write_ram(UINT8 ChipID, offs_t DataStart, offs_t DataLength, const UINT8* RAMData);
27 |
28 | void rf5c68_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
29 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ChipIncl.h:
--------------------------------------------------------------------------------
1 | // includes all chip-headers
2 |
3 | #include "sn764intf.h"
4 | #include "2413intf.h"
5 | #include "2612intf.h"
6 | #include "2151intf.h"
7 | #include "segapcm.h"
8 | #include "rf5c68.h"
9 | #include "2203intf.h"
10 | #include "2608intf.h"
11 | #include "2610intf.h"
12 | #include "3812intf.h"
13 | #include "3526intf.h"
14 | #include "8950intf.h"
15 | #include "262intf.h"
16 | #include "ymz280b.h"
17 | #include "ymf271.h"
18 | #include "ymf278b.h"
19 | #include "scd_pcm.h"
20 | #include "pwm.h"
21 | #include "ay_intf.h"
22 | #include "dac_control.h"
23 | #include "gb.h"
24 | #include "nes_intf.h"
25 | #include "multipcm.h"
26 | #include "upd7759.h"
27 | #include "okim6258.h"
28 | #include "okim6295.h"
29 | #include "k051649.h"
30 | #include "k054539.h"
31 | #include "c6280intf.h"
32 | #include "c140.h"
33 | #include "k053260.h"
34 | #include "pokey.h"
35 | #include "qsound_intf.h"
36 | #include "scsp.h"
37 | #include "ws_audio.h"
38 | #include "vsu.h"
39 | #include "saa1099.h"
40 | #include "es5503.h"
41 | #include "es5506.h"
42 | #include "x1_010.h"
43 | #include "c352.h"
44 | #include "iremga20.h"
45 |
--------------------------------------------------------------------------------
/VGMPlay/chips/k053260.h:
--------------------------------------------------------------------------------
1 | /*********************************************************
2 |
3 | Konami 053260 PCM/ADPCM Sound Chip
4 |
5 | *********************************************************/
6 |
7 | #pragma once
8 |
9 | //#include "devlegcy.h"
10 |
11 | /*typedef struct _k053260_interface k053260_interface;
12 | struct _k053260_interface {
13 | const char *rgnoverride;
14 | timer_expired_func irq; // called on SH1 complete cycle ( clock / 32 ) //
15 | };*/
16 |
17 |
18 | void k053260_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
19 | int device_start_k053260(UINT8 ChipID, int clock);
20 | void device_stop_k053260(UINT8 ChipID);
21 | void device_reset_k053260(UINT8 ChipID);
22 |
23 | //WRITE8_DEVICE_HANDLER( k053260_w );
24 | //READ8_DEVICE_HANDLER( k053260_r );
25 | void k053260_w(UINT8 ChipID, offs_t offset, UINT8 data);
26 | UINT8 k053260_r(UINT8 ChipID, offs_t offset);
27 |
28 | void k053260_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
29 | const UINT8* ROMData);
30 | void k053260_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
31 |
32 | //DECLARE_LEGACY_SOUND_DEVICE(K053260, k053260);
33 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ymf271.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //#include "devcb.h"
4 |
5 | //typedef struct _ymf271_interface ymf271_interface;
6 | //struct _ymf271_interface
7 | //{
8 | // //devcb_read8 ext_read; /* external memory read */
9 | // //devcb_write8 ext_write; /* external memory write */
10 | // //void (*irq_callback)(const device_config *device, int state); /* irq callback */
11 | // void (*irq_callback)(int state); /* irq callback */
12 | //};
13 |
14 | /*READ8_DEVICE_HANDLER( ymf271_r );
15 | WRITE8_DEVICE_HANDLER( ymf271_w );
16 |
17 | DEVICE_GET_INFO( ymf271 );
18 | #define SOUND_YMF271 DEVICE_GET_INFO_NAME( ymf271 )*/
19 |
20 | void ymf271_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
21 | int device_start_ymf271(UINT8 ChipID, int clock);
22 | void device_stop_ymf271(UINT8 ChipID);
23 | void device_reset_ymf271(UINT8 ChipID);
24 |
25 | UINT8 ymf271_r(UINT8 ChipID, offs_t offset);
26 | void ymf271_w(UINT8 ChipID, offs_t offset, UINT8 data);
27 | void ymf271_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
28 | const UINT8* ROMData);
29 |
30 | void ymf271_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
31 |
--------------------------------------------------------------------------------
/VGMPlay/chips/x1_010.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #ifndef __X1_010_H__
4 | #define __X1_010_H__
5 |
6 | //#include "devlegcy.h"
7 |
8 |
9 | /*typedef struct _x1_010_interface x1_010_interface;
10 | struct _x1_010_interface
11 | {
12 | int adr; // address
13 | };*/
14 |
15 |
16 | void seta_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
17 | int device_start_x1_010(UINT8 ChipID, int clock);
18 | void device_stop_x1_010(UINT8 ChipID);
19 | void device_reset_x1_010(UINT8 ChipID);
20 |
21 | //READ8_DEVICE_HANDLER ( seta_sound_r );
22 | //WRITE8_DEVICE_HANDLER( seta_sound_w );
23 | UINT8 seta_sound_r(UINT8 ChipID, offs_t offset);
24 | void seta_sound_w(UINT8 ChipID, offs_t offset, UINT8 data);
25 |
26 | //READ16_DEVICE_HANDLER ( seta_sound_word_r );
27 | //WRITE16_DEVICE_HANDLER( seta_sound_word_w );
28 |
29 | //void seta_sound_enable_w(device_t *device, int data);
30 |
31 | void x1_010_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
32 | const UINT8* ROMData);
33 |
34 | void x1_010_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
35 |
36 | //DECLARE_LEGACY_SOUND_DEVICE(X1_010, x1_010);
37 |
38 | #endif /* __X1_010_H__ */
39 |
--------------------------------------------------------------------------------
/in_vgm/Winamp/GEN.H:
--------------------------------------------------------------------------------
1 | #ifndef NULLSOFT_WINAMP_GEN_H
2 | #define NULLSOFT_WINAMP_GEN_H
3 |
4 | #include
5 |
6 | #define GEN_INIT_SUCCESS 0
7 |
8 | // return values from the winampUninstallPlugin(HINSTANCE hdll, HWND parent, int param)
9 | // which determine if we can uninstall the plugin immediately or on winamp restart
10 | //
11 | // uninstall support was added from 5.0+ and uninstall now support from 5.5+
12 | // it is down to you to ensure that if uninstall now is returned that it will not cause a crash
13 | // (ie don't use if you've been subclassing the main window)
14 | #define GEN_PLUGIN_UNINSTALL_NOW 0x1
15 | #define GEN_PLUGIN_UNINSTALL_REBOOT 0x0
16 |
17 | typedef struct {
18 | int version;
19 | char *description;
20 | int (*init)();
21 | void (*config)();
22 | void (*quit)();
23 | HWND hwndParent;
24 | HINSTANCE hDllInstance;
25 | } winampGeneralPurposePlugin;
26 |
27 | #define GPPHDR_VER 0x10
28 | #ifdef __cplusplus
29 | extern "C" {
30 | #endif
31 | //extern winampGeneralPurposePlugin *gen_plugins[256];
32 | typedef winampGeneralPurposePlugin * (*winampGeneralPurposePluginGetter)();
33 | #ifdef __cplusplus
34 | }
35 | #endif
36 |
37 | #endif
--------------------------------------------------------------------------------
/VGMPlay/chips/emutypes.h:
--------------------------------------------------------------------------------
1 | #ifndef _EMUTYPES_H_
2 | #define _EMUTYPES_H_
3 |
4 | #ifndef INLINE
5 |
6 | #if defined(_MSC_VER)
7 | //#define INLINE __forceinline
8 | #define INLINE __inline
9 | #elif defined(__GNUC__)
10 | #define INLINE __inline__
11 | #elif defined(_MWERKS_)
12 | #define INLINE inline
13 | #else
14 | #define INLINE
15 | #endif
16 |
17 | #endif
18 |
19 | typedef unsigned int e_uint;
20 | typedef signed int e_int;
21 |
22 | typedef unsigned char e_uint8 ;
23 | typedef signed char e_int8 ;
24 |
25 | typedef unsigned short e_uint16 ;
26 | typedef signed short e_int16 ;
27 |
28 | typedef unsigned int e_uint32 ;
29 | typedef signed int e_int32 ;
30 |
31 |
32 | #if !defined(__int8_t_defined) && !defined(_STDINT)
33 | #define __int8_t_defined // for GCC
34 | #define _STDINT // for MSVC
35 |
36 | typedef e_uint8 uint8_t;
37 | typedef e_int8 int8_t;
38 | typedef e_uint16 uint16_t;
39 | typedef e_int16 int16_t;
40 | typedef e_uint32 uint32_t;
41 | typedef e_int32 int32_t;
42 | #ifdef _MSC_VER
43 | typedef unsigned __int64 uint64_t;
44 | typedef signed __int64 int64_t;
45 | #else
46 | #include
47 | #endif
48 |
49 | #endif
50 |
51 |
52 | #endif
53 |
--------------------------------------------------------------------------------
/VGMPlay/chips/es5503.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #ifndef __ES5503_H__
4 | #define __ES5503_H__
5 |
6 | ///#include "devlegcy.h"
7 |
8 | /*typedef struct _es5503_interface es5503_interface;
9 | struct _es5503_interface
10 | {
11 | void (*irq_callback)(running_device *device, int state);
12 | read8_device_func adc_read;
13 | UINT8 *wave_memory;
14 | };*/
15 |
16 | //READ8_DEVICE_HANDLER( es5503_r );
17 | //WRITE8_DEVICE_HANDLER( es5503_w );
18 | void es5503_w(UINT8 ChipID, offs_t offset, UINT8 data);
19 | UINT8 es5503_r(UINT8 ChipID, offs_t offset);
20 |
21 | void es5503_pcm_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
22 | int device_start_es5503(UINT8 ChipID, int clock, int channels);
23 | void device_stop_es5503(UINT8 ChipID);
24 | void device_reset_es5503(UINT8 ChipID);
25 | //void es5503_set_base(running_device *device, UINT8 *wavemem);
26 |
27 | void es5503_write_ram(UINT8 ChipID, offs_t DataStart, offs_t DataLength, const UINT8* RAMData);
28 |
29 | void es5503_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
30 | void es5503_set_srchg_cb(UINT8 ChipID, SRATE_CALLBACK CallbackFunc, void* DataPtr);
31 |
32 | //DECLARE_LEGACY_SOUND_DEVICE(ES5503, es5503);
33 |
34 | #endif /* __ES5503_H__ */
35 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ymf278b.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #define YMF278B_STD_CLOCK (33868800) /* standard clock for OPL4 */
4 |
5 |
6 | typedef struct _ymf278b_interface ymf278b_interface;
7 | struct _ymf278b_interface
8 | {
9 | //void (*irq_callback)(const device_config *device, int state); /* irq callback */
10 | void (*irq_callback)(int state); /* irq callback */
11 | };
12 |
13 | /*READ8_DEVICE_HANDLER( ymf278b_r );
14 | WRITE8_DEVICE_HANDLER( ymf278b_w );
15 |
16 | DEVICE_GET_INFO( ymf278b );
17 | #define SOUND_YMF278B DEVICE_GET_INFO_NAME( ymf278b )*/
18 |
19 | void ymf278b_pcm_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
20 | int device_start_ymf278b(UINT8 ChipID, int clock);
21 | void device_stop_ymf278b(UINT8 ChipID);
22 | void device_reset_ymf278b(UINT8 ChipID);
23 |
24 | UINT8 ymf278b_r(UINT8 ChipID, offs_t offset);
25 | void ymf278b_w(UINT8 ChipID, offs_t offset, UINT8 data);
26 | void ymf278b_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
27 | const UINT8* ROMData);
28 | void ymf278b_write_ram(UINT8 ChipID, offs_t DataStart, offs_t DataLength, const UINT8* RAMData);
29 |
30 | void ymf278b_set_mute_mask(UINT8 ChipID, UINT32 MuteMaskFM, UINT32 MuteMaskWT);
31 |
32 |
--------------------------------------------------------------------------------
/VGMPlay/chips/2151intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | /*typedef struct _ym2151_interface ym2151_interface;
4 | struct _ym2151_interface
5 | {
6 | //void (*irqhandler)(const device_config *device, int irq);
7 | void (*irqhandler)(int irq);
8 | write8_device_func portwritehandler;
9 | };*/
10 |
11 | /*READ8_DEVICE_HANDLER( ym2151_r );
12 | WRITE8_DEVICE_HANDLER( ym2151_w );
13 |
14 | READ8_DEVICE_HANDLER( ym2151_status_port_r );
15 | WRITE8_DEVICE_HANDLER( ym2151_register_port_w );
16 | WRITE8_DEVICE_HANDLER( ym2151_data_port_w );
17 |
18 | DEVICE_GET_INFO( ym2151 );
19 | #define SOUND_YM2151 DEVICE_GET_INFO_NAME( ym2151 )*/
20 | void ym2151_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
21 |
22 | int device_start_ym2151(UINT8 ChipID, int clock);
23 | void device_stop_ym2151(UINT8 ChipID);
24 | void device_reset_ym2151(UINT8 ChipID);
25 |
26 | UINT8 ym2151_r(UINT8 ChipID, offs_t offset);
27 | void ym2151_w(UINT8 ChipID, offs_t offset, UINT8 data);
28 |
29 | UINT8 ym2151_status_port_r(UINT8 ChipID, offs_t offset);
30 | void ym2151_register_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
31 | void ym2151_data_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
32 |
33 | void ym2151_set_emu_core(UINT8 Emulator);
34 | void ym2151_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
35 |
--------------------------------------------------------------------------------
/VGMPlay/chips/3526intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | /*typedef struct _ym3526_interface ym3526_interface;
4 | struct _ym3526_interface
5 | {
6 | //void (*handler)(const device_config *device, int linestate);
7 | void (*handler)(int linestate);
8 | };*/
9 |
10 | /*READ8_DEVICE_HANDLER( ym3526_r );
11 | WRITE8_DEVICE_HANDLER( ym3526_w );
12 |
13 | READ8_DEVICE_HANDLER( ym3526_status_port_r );
14 | READ8_DEVICE_HANDLER( ym3526_read_port_r );
15 | WRITE8_DEVICE_HANDLER( ym3526_control_port_w );
16 | WRITE8_DEVICE_HANDLER( ym3526_write_port_w );
17 |
18 | DEVICE_GET_INFO( ym3526 );
19 | #define SOUND_YM3526 DEVICE_GET_INFO_NAME( ym3526 )*/
20 | void ym3526_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
21 | int device_start_ym3526(UINT8 ChipID, int clock);
22 | void device_stop_ym3526(UINT8 ChipID);
23 | void device_reset_ym3526(UINT8 ChipID);
24 |
25 | UINT8 ym3526_r(UINT8 ChipID, offs_t offset);
26 | void ym3526_w(UINT8 ChipID, offs_t offset, UINT8 data);
27 |
28 | UINT8 ym3526_status_port_r(UINT8 ChipID, offs_t offset);
29 | UINT8 ym3526_read_port_r(UINT8 ChipID, offs_t offset);
30 | void ym3526_control_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
31 | void ym3526_write_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
32 |
33 | void ym3526_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
34 |
--------------------------------------------------------------------------------
/VGMPlay/chips/segapcm.h:
--------------------------------------------------------------------------------
1 | /*********************************************************/
2 | /* SEGA 8bit PCM */
3 | /*********************************************************/
4 |
5 | #pragma once
6 |
7 | #define BANK_256 (11)
8 | #define BANK_512 (12)
9 | #define BANK_12M (13)
10 | #define BANK_MASK7 (0x70<<16)
11 | #define BANK_MASKF (0xf0<<16)
12 | #define BANK_MASKF8 (0xf8<<16)
13 |
14 | typedef struct _sega_pcm_interface sega_pcm_interface;
15 | struct _sega_pcm_interface
16 | {
17 | int bank;
18 | };
19 |
20 | /*WRITE8_DEVICE_HANDLER( sega_pcm_w );
21 | READ8_DEVICE_HANDLER( sega_pcm_r );
22 |
23 | DEVICE_GET_INFO( segapcm );
24 | #define SOUND_SEGAPCM DEVICE_GET_INFO_NAME( segapcm )*/
25 |
26 | void SEGAPCM_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
27 |
28 | int device_start_segapcm(UINT8 ChipID, int clock, int intf_bank);
29 | void device_stop_segapcm(UINT8 ChipID);
30 | void device_reset_segapcm(UINT8 ChipID);
31 |
32 | void sega_pcm_w(UINT8 ChipID, offs_t offset, UINT8 data);
33 | UINT8 sega_pcm_r(UINT8 ChipID, offs_t offset);
34 | void sega_pcm_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
35 | const UINT8* ROMData);
36 |
37 | void segapcm_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
38 |
39 |
--------------------------------------------------------------------------------
/VGMPlay/VGMPlay.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 11.00
3 | # Visual Studio 2010
4 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VGMPlay", "VGMPlay.vcxproj", "{8519237F-1B46-4C8A-994C-58D218182F2C}"
5 | EndProject
6 | Global
7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
8 | Debug|Win32 = Debug|Win32
9 | Debug|x64 = Debug|x64
10 | Release|Win32 = Release|Win32
11 | Release|x64 = Release|x64
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {8519237F-1B46-4C8A-994C-58D218182F2C}.Debug|Win32.ActiveCfg = Debug|Win32
15 | {8519237F-1B46-4C8A-994C-58D218182F2C}.Debug|Win32.Build.0 = Debug|Win32
16 | {8519237F-1B46-4C8A-994C-58D218182F2C}.Debug|x64.ActiveCfg = Debug|x64
17 | {8519237F-1B46-4C8A-994C-58D218182F2C}.Debug|x64.Build.0 = Debug|x64
18 | {8519237F-1B46-4C8A-994C-58D218182F2C}.Release|Win32.ActiveCfg = Release|Win32
19 | {8519237F-1B46-4C8A-994C-58D218182F2C}.Release|Win32.Build.0 = Release|Win32
20 | {8519237F-1B46-4C8A-994C-58D218182F2C}.Release|x64.ActiveCfg = Release|x64
21 | {8519237F-1B46-4C8A-994C-58D218182F2C}.Release|x64.Build.0 = Release|x64
22 | EndGlobalSection
23 | GlobalSection(SolutionProperties) = preSolution
24 | HideSolutionNode = FALSE
25 | EndGlobalSection
26 | EndGlobal
27 |
--------------------------------------------------------------------------------
/VGMPlay/chips/3812intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | /*typedef struct _ym3812_interface ym3812_interface;
4 | struct _ym3812_interface
5 | {
6 | //void (*handler)(const device_config *device, int linestate);
7 | void (*handler)(int linestate);
8 | };*/
9 |
10 | /*READ8_DEVICE_HANDLER( ym3812_r );
11 | WRITE8_DEVICE_HANDLER( ym3812_w );
12 |
13 | READ8_DEVICE_HANDLER( ym3812_status_port_r );
14 | READ8_DEVICE_HANDLER( ym3812_read_port_r );
15 | WRITE8_DEVICE_HANDLER( ym3812_control_port_w );
16 | WRITE8_DEVICE_HANDLER( ym3812_write_port_w );
17 |
18 | DEVICE_GET_INFO( ym3812 );
19 | #define SOUND_YM3812 DEVICE_GET_INFO_NAME( ym3812 )*/
20 |
21 | void ym3812_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
22 | int device_start_ym3812(UINT8 ChipID, int clock);
23 | void device_stop_ym3812(UINT8 ChipID);
24 | void device_reset_ym3812(UINT8 ChipID);
25 |
26 | UINT8 ym3812_r(UINT8 ChipID, offs_t offset);
27 | void ym3812_w(UINT8 ChipID, offs_t offset, UINT8 data);
28 |
29 | UINT8 ym3812_status_port_r(UINT8 ChipID, offs_t offset);
30 | UINT8 ym3812_read_port_r(UINT8 ChipID, offs_t offset);
31 | void ym3812_control_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
32 | void ym3812_write_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
33 |
34 | void ym3812_set_emu_core(UINT8 Emulator);
35 | void ym3812_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
36 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ymz280b.h:
--------------------------------------------------------------------------------
1 | /**********************************************************************************************
2 | *
3 | * Yamaha YMZ280B driver
4 | * by Aaron Giles
5 | *
6 | **********************************************************************************************/
7 |
8 | #pragma once
9 |
10 | //#include "devcb.h"
11 |
12 | typedef struct _ymz280b_interface ymz280b_interface;
13 | struct _ymz280b_interface
14 | {
15 | //void (*irq_callback)(const device_config *device, int state); /* irq callback */
16 | void (*irq_callback)(int state); /* irq callback */
17 | //devcb_read8 ext_read; /* external RAM read */
18 | //devcb_write8 ext_write; /* external RAM write */
19 | };
20 |
21 | /*READ8_DEVICE_HANDLER ( ymz280b_r );
22 | WRITE8_DEVICE_HANDLER( ymz280b_w );
23 |
24 | DEVICE_GET_INFO( ymz280b );
25 | #define SOUND_YMZ280B DEVICE_GET_INFO_NAME( ymz280b )*/
26 |
27 | void ymz280b_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
28 | int device_start_ymz280b(UINT8 ChipID, int clock);
29 | void device_stop_ymz280b(UINT8 ChipID);
30 | void device_reset_ymz280b(UINT8 ChipID);
31 |
32 | UINT8 ymz280b_r(UINT8 ChipID, offs_t offset);
33 | void ymz280b_w(UINT8 ChipID, offs_t offset, UINT8 data);
34 | void ymz280b_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
35 | const UINT8* ROMData);
36 |
37 | void ymz280b_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
38 |
--------------------------------------------------------------------------------
/VGMPlay/chips/262intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 |
4 | /*typedef struct _ymf262_interface ymf262_interface;
5 | struct _ymf262_interface
6 | {
7 | //void (*handler)(const device_config *device, int irq);
8 | void (*handler)(int irq);
9 | };*/
10 |
11 |
12 | /*READ8_DEVICE_HANDLER( ymf262_r );
13 | WRITE8_DEVICE_HANDLER( ymf262_w );
14 |
15 | READ8_DEVICE_HANDLER ( ymf262_status_r );
16 | WRITE8_DEVICE_HANDLER( ymf262_register_a_w );
17 | WRITE8_DEVICE_HANDLER( ymf262_register_b_w );
18 | WRITE8_DEVICE_HANDLER( ymf262_data_a_w );
19 | WRITE8_DEVICE_HANDLER( ymf262_data_b_w );
20 |
21 |
22 | DEVICE_GET_INFO( ymf262 );
23 | #define SOUND_YMF262 DEVICE_GET_INFO_NAME( ymf262 )*/
24 |
25 | void ymf262_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
26 |
27 | int device_start_ymf262(UINT8 ChipID, int clock);
28 | void device_stop_ymf262(UINT8 ChipID);
29 | void device_reset_ymf262(UINT8 ChipID);
30 |
31 | UINT8 ymf262_r(UINT8 ChipID, offs_t offset);
32 | void ymf262_w(UINT8 ChipID, offs_t offset, UINT8 data);
33 |
34 | UINT8 ymf262_status_r(UINT8 ChipID, offs_t offset);
35 | void ymf262_register_a_w(UINT8 ChipID, offs_t offset, UINT8 data);
36 | void ymf262_register_b_w(UINT8 ChipID, offs_t offset, UINT8 data);
37 | void ymf262_data_a_w(UINT8 ChipID, offs_t offset, UINT8 data);
38 | void ymf262_data_b_w(UINT8 ChipID, offs_t offset, UINT8 data);
39 |
40 | void ymf262_set_emu_core(UINT8 Emulator);
41 | void ymf262_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
42 |
43 |
--------------------------------------------------------------------------------
/VGMPlay/chips/k051649.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //#ifndef __K051649_H__
4 | //#define __K051649_H__
5 |
6 | //#include "devlegcy.h"
7 |
8 | /*WRITE8_DEVICE_HANDLER( k051649_waveform_w );
9 | READ8_DEVICE_HANDLER( k051649_waveform_r );
10 | WRITE8_DEVICE_HANDLER( k051649_volume_w );
11 | WRITE8_DEVICE_HANDLER( k051649_frequency_w );
12 | WRITE8_DEVICE_HANDLER( k051649_keyonoff_w );
13 |
14 | WRITE8_DEVICE_HANDLER( k052539_waveform_w );
15 |
16 | DECLARE_LEGACY_SOUND_DEVICE(K051649, k051649);*/
17 |
18 | void k051649_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
19 | int device_start_k051649(UINT8 ChipID, int clock);
20 | void device_stop_k051649(UINT8 ChipID);
21 | void device_reset_k051649(UINT8 ChipID);
22 |
23 | void k051649_waveform_w(UINT8 ChipID, offs_t offset, UINT8 data);
24 | UINT8 k051649_waveform_r(UINT8 ChipID, offs_t offset);
25 | void k051649_volume_w(UINT8 ChipID, offs_t offset, UINT8 data);
26 | void k051649_frequency_w(UINT8 ChipID, offs_t offset, UINT8 data);
27 | void k051649_keyonoff_w(UINT8 ChipID, offs_t offset, UINT8 data);
28 |
29 | void k052539_waveform_w(UINT8 ChipID, offs_t offset, UINT8 data);
30 | UINT8 k052539_waveform_r(UINT8 ChipID, offs_t offset);
31 |
32 | void k051649_test_w(UINT8 ChipID, offs_t offset, UINT8 data);
33 | UINT8 k051649_test_r(UINT8 ChipID, offs_t offset);
34 |
35 | void k051649_w(UINT8 ChipID, offs_t offset, UINT8 data);
36 |
37 | void k051649_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
38 |
39 | //#endif /* __K051649_H__ */
40 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ym2413.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | /* select output bits size of output : 8 or 16 */
4 | #define SAMPLE_BITS 16
5 |
6 | /* compiler dependence */
7 | //#ifndef __OSDCOMM_H__
8 | //#define __OSDCOMM_H__
9 | /*typedef unsigned char UINT8; // unsigned 8bit
10 | typedef unsigned short UINT16; // unsigned 16bit
11 | typedef unsigned int UINT32; // unsigned 32bit
12 | typedef signed char INT8; // signed 8bit
13 | typedef signed short INT16; // signed 16bit
14 | typedef signed int INT32; // signed 32bit */
15 | //#endif
16 |
17 | //typedef INT32 stream_sample_t;
18 | typedef stream_sample_t SAMP;
19 | /*
20 | #if (SAMPLE_BITS==16)
21 | typedef INT16 SAMP;
22 | #endif
23 | #if (SAMPLE_BITS==8)
24 | typedef INT8 SAMP;
25 | #endif
26 | */
27 |
28 |
29 |
30 | //void *ym2413_init(const device_config *device, int clock, int rate);
31 | void *ym2413_init(int clock, int rate);
32 | void ym2413_shutdown(void *chip);
33 | void ym2413_reset_chip(void *chip);
34 | void ym2413_write(void *chip, int a, int v);
35 | unsigned char ym2413_read(void *chip, int a);
36 | void ym2413_update_one(void *chip, SAMP **buffers, int length);
37 |
38 | typedef void (*OPLL_UPDATEHANDLER)(void *param,int min_interval_us);
39 |
40 | void ym2413_set_update_handler(void *chip, OPLL_UPDATEHANDLER UpdateHandler, void *param);
41 | void ym2413_set_mutemask(void* chip, UINT32 MuteMask);
42 | void ym2413_set_chip_mode(void* chip, UINT8 Mode);
43 | void ym2413_override_patches(void* chip, const UINT8* PatchDump);
44 |
--------------------------------------------------------------------------------
/VGMPlay/chips/scsp.h:
--------------------------------------------------------------------------------
1 | /*
2 | SCSP (YMF292-F) header
3 | */
4 |
5 | #pragma once
6 |
7 | #ifndef __SCSP_H__
8 | #define __SCSP_H__
9 |
10 | //#include "devlegcy.h"
11 |
12 | /*typedef struct _scsp_interface scsp_interface;
13 | struct _scsp_interface
14 | {
15 | int roffset; // offset in the region
16 | void (*irq_callback)(device_t *device, int state); // irq callback
17 | devcb_write_line main_irq;
18 | };
19 |
20 | void scsp_set_ram_base(device_t *device, void *base);*/
21 |
22 |
23 | void SCSP_Update(UINT8 ChipID, stream_sample_t **outputs, int samples);
24 | int device_start_scsp(UINT8 ChipID, int clock);
25 | void device_stop_scsp(UINT8 ChipID);
26 | void device_reset_scsp(UINT8 ChipID);
27 |
28 | // SCSP register access
29 | /*READ16_DEVICE_HANDLER( scsp_r );
30 | WRITE16_DEVICE_HANDLER( scsp_w );*/
31 | void scsp_w(UINT8 ChipID, offs_t offset, UINT8 data);
32 | //UINT8 scsp_r(UINT8 ChipID, offs_t offset);
33 |
34 | // MIDI I/O access (used for comms on Model 2/3)
35 | /*WRITE16_DEVICE_HANDLER( scsp_midi_in );
36 | READ16_DEVICE_HANDLER( scsp_midi_out_r );*/
37 |
38 | //void scsp_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
39 | // const UINT8* ROMData);
40 | void scsp_write_ram(UINT8 ChipID, offs_t DataStart, offs_t DataLength, const UINT8* RAMData);
41 | void scsp_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
42 | void scsp_set_options(UINT8 Flags);
43 |
44 | /*extern UINT32* stv_scu;
45 |
46 | DECLARE_LEGACY_SOUND_DEVICE(SCSP, scsp);*/
47 |
48 | #endif /* __SCSP_H__ */
49 |
--------------------------------------------------------------------------------
/VGMPlay/chips/sn76496.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | /*READ8_DEVICE_HANDLER( sn76496_ready_r );
4 | WRITE8_DEVICE_HANDLER( sn76496_w );
5 | WRITE8_DEVICE_HANDLER( sn76496_stereo_w );
6 |
7 | DEVICE_GET_INFO( sn76496 );
8 | DEVICE_GET_INFO( sn76489 );
9 | DEVICE_GET_INFO( sn76489a );
10 | DEVICE_GET_INFO( sn76494 );
11 | DEVICE_GET_INFO( sn94624 );
12 | DEVICE_GET_INFO( ncr7496 );
13 | DEVICE_GET_INFO( gamegear );
14 | DEVICE_GET_INFO( smsiii );
15 |
16 | #define SOUND_SN76496 DEVICE_GET_INFO_NAME( sn76496 )
17 | #define SOUND_SN76489 DEVICE_GET_INFO_NAME( sn76489 )
18 | #define SOUND_SN76489A DEVICE_GET_INFO_NAME( sn76489a )
19 | #define SOUND_SN76494 DEVICE_GET_INFO_NAME( sn76494 )
20 | #define SOUND_SN94624 DEVICE_GET_INFO_NAME( sn94624 )
21 | #define SOUND_NCR7496 DEVICE_GET_INFO_NAME( ncr7496 )
22 | #define SOUND_GAMEGEAR DEVICE_GET_INFO_NAME( gamegear )
23 | #define SOUND_SMSIII DEVICE_GET_INFO_NAME( smsiii )*/
24 |
25 | UINT8 sn76496_ready_r(void *chip, offs_t offset);
26 | void sn76496_write_reg(void *chip, offs_t offset, UINT8 data);
27 | void sn76496_stereo_w(void *chip, offs_t offset, UINT8 data);
28 |
29 | void SN76496Update(void *chip, stream_sample_t **outputs, int samples);
30 | unsigned long int sn76496_start(void **chip, int clock, int shiftregwidth, int noisetaps,
31 | int negate, int stereo, int clockdivider, int freq0);
32 | void sn76496_shutdown(void *chip);
33 | void sn76496_reset(void *chip);
34 | void sn76496_freq_limiter(int clock, int clockdiv, int sample_rate);
35 | void sn76496_set_mutemask(void *chip, UINT32 MuteMask);
36 |
--------------------------------------------------------------------------------
/VGMPlay/chips/8950intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | /*typedef struct _y8950_interface y8950_interface;
4 | struct _y8950_interface
5 | {
6 | //void (*handler)(const device_config *device, int linestate);
7 | void (*handler)(int linestate);
8 |
9 | read8_device_func keyboardread;
10 | write8_device_func keyboardwrite;
11 | read8_device_func portread;
12 | write8_device_func portwrite;
13 | };*/
14 |
15 | /*READ8_DEVICE_HANDLER( y8950_r );
16 | WRITE8_DEVICE_HANDLER( y8950_w );
17 |
18 | READ8_DEVICE_HANDLER( y8950_status_port_r );
19 | READ8_DEVICE_HANDLER( y8950_read_port_r );
20 | WRITE8_DEVICE_HANDLER( y8950_control_port_w );
21 | WRITE8_DEVICE_HANDLER( y8950_write_port_w );
22 |
23 | DEVICE_GET_INFO( y8950 );
24 | #define SOUND_Y8950 DEVICE_GET_INFO_NAME( y8950 )*/
25 | void y8950_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
26 | int device_start_y8950(UINT8 ChipID, int clock);
27 | void device_stop_y8950(UINT8 ChipID);
28 | void device_reset_y8950(UINT8 ChipID);
29 |
30 | UINT8 y8950_r(UINT8 ChipID, offs_t offset);
31 | void y8950_w(UINT8 ChipID, offs_t offset, UINT8 data);
32 |
33 | UINT8 y8950_status_port_r(UINT8 ChipID, offs_t offset);
34 | UINT8 y8950_read_port_r(UINT8 ChipID, offs_t offset);
35 | void y8950_control_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
36 | void y8950_write_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
37 |
38 | void y8950_write_data_pcmrom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart,
39 | offs_t DataLength, const UINT8* ROMData);
40 | void y8950_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
41 |
--------------------------------------------------------------------------------
/VGMPlay/chips/upd7759.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //#include "devlegcy.h"
4 |
5 | /* There are two modes for the uPD7759, selected through the !MD pin.
6 | This is the mode select input. High is stand alone, low is slave.
7 | We're making the assumption that nobody switches modes through
8 | software. */
9 |
10 | #define UPD7759_STANDARD_CLOCK 640000
11 |
12 | typedef struct _upd7759_interface upd7759_interface;
13 | struct _upd7759_interface
14 | {
15 | //void (*drqcallback)(running_device *device, int param); /* drq callback (per chip, slave mode only) */
16 | void (*drqcallback)(int param); /* drq callback (per chip, slave mode only) */
17 | };
18 |
19 | void upd7759_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
20 | void device_reset_upd7759(UINT8 ChipID);
21 | int device_start_upd7759(UINT8 ChipID, int clock);
22 | void device_stop_upd7759(UINT8 ChipID);
23 |
24 | //void upd7759_set_bank_base(running_device *device, offs_t base);
25 |
26 | //void upd7759_reset_w(running_device *device, UINT8 data);
27 | //void upd7759_start_w(running_device *device, UINT8 data);
28 | //int upd7759_busy_r(running_device *device);
29 | //WRITE8_DEVICE_HANDLER( upd7759_port_w );
30 |
31 | void upd7759_set_bank_base(UINT8 ChipID, offs_t base);
32 |
33 | void upd7759_reset_w(UINT8 ChipID, UINT8 data);
34 | void upd7759_start_w(UINT8 ChipID, UINT8 data);
35 | int upd7759_busy_r(UINT8 ChipID);
36 | void upd7759_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
37 |
38 | void upd7759_write(UINT8 ChipID, UINT8 Port, UINT8 Data);
39 | void upd7759_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
40 | const UINT8* ROMData);
41 |
42 | //DECLARE_LEGACY_SOUND_DEVICE(UPD7759, upd7759);
43 |
--------------------------------------------------------------------------------
/VGMPlay/chips/scd_pcm.h:
--------------------------------------------------------------------------------
1 | struct pcm_chip_
2 | {
3 | float Rate;
4 | int Smpl0Patch;
5 | int Enable;
6 | int Cur_Chan;
7 | int Bank;
8 |
9 | struct pcm_chan_
10 | {
11 | unsigned int ENV; /* envelope register */
12 | unsigned int PAN; /* pan register */
13 | unsigned int MUL_L; /* envelope & pan product letf */
14 | unsigned int MUL_R; /* envelope & pan product right */
15 | unsigned int St_Addr; /* start address register */
16 | unsigned int Loop_Addr; /* loop address register */
17 | unsigned int Addr; /* current address register */
18 | unsigned int Step; /* frequency register */
19 | unsigned int Step_B; /* frequency register binaire */
20 | unsigned int Enable; /* channel on/off register */
21 | int Data; /* wave data */
22 | unsigned int Muted;
23 | } Channel[8];
24 |
25 | unsigned long int RAMSize;
26 | unsigned char* RAM;
27 | };
28 |
29 | //extern struct pcm_chip_ PCM_Chip;
30 | //extern unsigned char Ram_PCM[64 * 1024];
31 | //extern int PCM_Enable;
32 |
33 | //int PCM_Init(int Rate);
34 | //void PCM_Set_Rate(int Rate);
35 | //void PCM_Reset(void);
36 | //void PCM_Write_Reg(unsigned int Reg, unsigned int Data);
37 | //int PCM_Update(int **buf, int Length);
38 |
39 | void rf5c164_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
40 | int device_start_rf5c164(UINT8 ChipID, int clock);
41 | void device_stop_rf5c164(UINT8 ChipID);
42 | void device_reset_rf5c164(UINT8 ChipID);
43 | void rf5c164_w(UINT8 ChipID, offs_t offset, UINT8 data);
44 | void rf5c164_mem_w(UINT8 ChipID, offs_t offset, UINT8 data);
45 | void rf5c164_write_ram(UINT8 ChipID, offs_t DataStart, offs_t DataLength, const UINT8* RAMData);
46 |
47 | void rf5c164_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
48 |
--------------------------------------------------------------------------------
/VGMPlay/chips/okim6295.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | /* an interface for the OKIM6295 and similar chips */
4 |
5 | /*
6 | Note about the playback frequency: the external clock is internally divided,
7 | depending on pin 7, by 132 (high) or 165 (low).
8 | */
9 | /*typedef struct _okim6295_interface okim6295_interface;
10 | struct _okim6295_interface
11 | {
12 | int pin7;
13 | };
14 |
15 | extern const okim6295_interface okim6295_interface_pin7high;
16 | extern const okim6295_interface okim6295_interface_pin7low;*/
17 |
18 |
19 |
20 | //void okim6295_set_bank_base(running_device *device, int base);
21 | //void okim6295_set_pin7(running_device *device, int pin7);
22 |
23 | void okim6295_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
24 | int device_start_okim6295(UINT8 ChipID, int clock);
25 | void device_stop_okim6295(UINT8 ChipID);
26 | void device_reset_okim6295(UINT8 ChipID);
27 |
28 | //READ8_DEVICE_HANDLER( okim6295_r );
29 | //WRITE8_DEVICE_HANDLER( okim6295_w );
30 | void okim6295_w(UINT8 ChipID, offs_t offset, UINT8 data);
31 |
32 | void okim6295_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
33 | const UINT8* ROMData);
34 | void okim6295_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
35 | void okim6295_set_srchg_cb(UINT8 ChipID, SRATE_CALLBACK CallbackFunc, void* DataPtr);
36 |
37 |
38 | /*
39 | To help the various custom ADPCM generators out there,
40 | the following routines may be used.
41 | */
42 | struct adpcm_state
43 | {
44 | INT32 signal;
45 | INT32 step;
46 | };
47 | void reset_adpcm(struct adpcm_state *state);
48 | INT16 clock_adpcm(struct adpcm_state *state, UINT8 nibble);
49 |
50 | //DEVICE_GET_INFO( okim6295 );
51 | //#define SOUND_OKIM6295 DEVICE_GET_INFO_NAME( okim6295 )
52 |
--------------------------------------------------------------------------------
/VGMPlay/chips/mamedef.h:
--------------------------------------------------------------------------------
1 | #ifndef __MAMEDEF_H__
2 | #define __MAMEDEF_H__
3 |
4 | // typedefs to use MAME's (U)INTxx types (copied from MAME\src\ods\odscomm.h)
5 | /* 8-bit values */
6 | typedef unsigned char UINT8;
7 | typedef signed char INT8;
8 |
9 | /* 16-bit values */
10 | typedef unsigned short UINT16;
11 | typedef signed short INT16;
12 |
13 | /* 32-bit values */
14 | #ifndef _WINDOWS_H
15 | typedef unsigned int UINT32;
16 | typedef signed int INT32;
17 | #endif
18 |
19 | /* 64-bit values */
20 | #ifndef _WINDOWS_H
21 | #ifdef _MSC_VER
22 | typedef signed __int64 INT64;
23 | typedef unsigned __int64 UINT64;
24 | #else
25 | __extension__ typedef unsigned long long UINT64;
26 | __extension__ typedef signed long long INT64;
27 | #endif
28 | #endif
29 |
30 | /* offsets and addresses are 32-bit (for now...) */
31 | typedef UINT32 offs_t;
32 |
33 | /* stream_sample_t is used to represent a single sample in a sound stream */
34 | typedef INT32 stream_sample_t;
35 |
36 | #if defined(VGM_BIG_ENDIAN)
37 | #define BYTE_XOR_BE(x) (x)
38 | #elif defined(VGM_LITTLE_ENDIAN)
39 | #define BYTE_XOR_BE(x) ((x) ^ 0x01)
40 | #else
41 | // don't define BYTE_XOR_BE so that it throws an error when compiling
42 | #endif
43 |
44 | #if defined(_MSC_VER)
45 | //#define INLINE static __forceinline
46 | #define INLINE static __inline
47 | #elif defined(__GNUC__)
48 | #define INLINE static __inline__
49 | #else
50 | #define INLINE static inline
51 | #endif
52 | #ifndef M_PI
53 | #define M_PI 3.14159265358979323846
54 | #endif
55 |
56 | #ifdef _DEBUG
57 | #define logerror printf
58 | #else
59 | #define logerror
60 | #endif
61 |
62 | extern stream_sample_t* DUMMYBUF[];
63 |
64 | typedef void (*SRATE_CALLBACK)(void*, UINT32);
65 |
66 | #endif // __MAMEDEF_H__
67 |
--------------------------------------------------------------------------------
/VGMPlay/chips/okim6258.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //#include "devlegcy.h"
4 |
5 | /* an interface for the OKIM6258 and similar chips */
6 |
7 | /*typedef struct _okim6258_interface okim6258_interface;
8 | struct _okim6258_interface
9 | {
10 | int divider;
11 | int adpcm_type;
12 | int output_12bits;
13 | };*/
14 |
15 |
16 | #define FOSC_DIV_BY_1024 0
17 | #define FOSC_DIV_BY_768 1
18 | #define FOSC_DIV_BY_512 2
19 |
20 | #define TYPE_3BITS 0
21 | #define TYPE_4BITS 1
22 |
23 | #define OUTPUT_10BITS 0
24 | #define OUTPUT_12BITS 1
25 |
26 | void okim6258_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
27 | int device_start_okim6258(UINT8 ChipID, int clock, int divider, int adpcm_type, int output_12bits);
28 | void device_stop_okim6258(UINT8 ChipID);
29 | void device_reset_okim6258(UINT8 ChipID);
30 |
31 | //void okim6258_set_divider(running_device *device, int val);
32 | //void okim6258_set_clock(running_device *device, int val);
33 | //int okim6258_get_vclk(running_device *device);
34 |
35 | void okim6258_set_divider(UINT8 ChipID, int val);
36 | void okim6258_set_clock(UINT8 ChipID, int val);
37 | int okim6258_get_vclk(UINT8 ChipID);
38 |
39 | //READ8_DEVICE_HANDLER( okim6258_status_r );
40 | //WRITE8_DEVICE_HANDLER( okim6258_data_w );
41 | //WRITE8_DEVICE_HANDLER( okim6258_ctrl_w );
42 |
43 | /*UINT8 okim6258_status_r(UINT8 ChipID, offs_t offset);
44 | void okim6258_data_w(UINT8 ChipID, offs_t offset, UINT8 data);
45 | void okim6258_ctrl_w(UINT8 ChipID, offs_t offset, UINT8 data);*/
46 | void okim6258_write(UINT8 ChipID, UINT8 Port, UINT8 Data);
47 |
48 | void okim6258_set_options(UINT16 Options);
49 | void okim6258_set_srchg_cb(UINT8 ChipID, SRATE_CALLBACK CallbackFunc, void* DataPtr);
50 |
51 | //DECLARE_LEGACY_SOUND_DEVICE(OKIM6258, okim6258);
52 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ymf262.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //#include "attotime.h"
4 |
5 | /* select number of output bits: 8 or 16 */
6 | #define OPL3_SAMPLE_BITS 16
7 |
8 | /* compiler dependence */
9 | //#ifndef __OSDCOMM_H__
10 | //#define __OSDCOMM_H__
11 | /*typedef unsigned char UINT8; // unsigned 8bit
12 | typedef unsigned short UINT16; // unsigned 16bit
13 | typedef unsigned int UINT32; // unsigned 32bit
14 | typedef signed char INT8; // signed 8bit
15 | typedef signed short INT16; // signed 16bit
16 | typedef signed int INT32; // signed 32bit*/
17 | //#endif
18 |
19 | typedef stream_sample_t OPL3SAMPLE;
20 | /*
21 | #if (OPL3_SAMPLE_BITS==16)
22 | typedef INT16 OPL3SAMPLE;
23 | #endif
24 | #if (OPL3_SAMPLE_BITS==8)
25 | typedef INT8 OPL3SAMPLE;
26 | #endif
27 | */
28 |
29 | //typedef void (*OPL3_TIMERHANDLER)(void *param,int timer,attotime period);
30 | typedef void (*OPL3_TIMERHANDLER)(void *param,int timer,int period);
31 | typedef void (*OPL3_IRQHANDLER)(void *param,int irq);
32 | typedef void (*OPL3_UPDATEHANDLER)(void *param/*,int min_interval_us*/);
33 |
34 |
35 | void *ymf262_init(int clock, int rate);
36 | void ymf262_shutdown(void *chip);
37 | void ymf262_reset_chip(void *chip);
38 | int ymf262_write(void *chip, int a, int v);
39 | unsigned char ymf262_read(void *chip, int a);
40 | int ymf262_timer_over(void *chip, int c);
41 | void ymf262_update_one(void *chip, OPL3SAMPLE **buffers, int length);
42 |
43 | void ymf262_set_timer_handler(void *chip, OPL3_TIMERHANDLER TimerHandler, void *param);
44 | void ymf262_set_irq_handler(void *chip, OPL3_IRQHANDLER IRQHandler, void *param);
45 | void ymf262_set_update_handler(void *chip, OPL3_UPDATEHANDLER UpdateHandler, void *param);
46 |
47 | void ymf262_set_emu_core(UINT8 Emulator);
48 | void ymf262_set_mutemask(void *chip, UINT32 MuteMask);
49 |
50 |
--------------------------------------------------------------------------------
/VGMPlay/chips/2203intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "ay8910.h"
4 | #include "emu2149.h"
5 |
6 | void ym2203_update_request(void *param);
7 |
8 | typedef struct _ym2203_interface ym2203_interface;
9 | struct _ym2203_interface
10 | {
11 | ay8910_interface ay8910_intf;
12 | //void (*handler)(const device_config *device, int irq);
13 | void (*handler)(int irq);
14 | };
15 |
16 | /*READ8_DEVICE_HANDLER( ym2203_r );
17 | WRITE8_DEVICE_HANDLER( ym2203_w );
18 |
19 | READ8_DEVICE_HANDLER( ym2203_status_port_r );
20 | READ8_DEVICE_HANDLER( ym2203_read_port_r );
21 | WRITE8_DEVICE_HANDLER( ym2203_control_port_w );
22 | WRITE8_DEVICE_HANDLER( ym2203_write_port_w );
23 |
24 | DEVICE_GET_INFO( ym2203 );
25 | #define SOUND_YM2203 DEVICE_GET_INFO_NAME( ym2203 )*/
26 |
27 | void ym2203_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
28 | void ym2203_stream_update_ay(UINT8 ChipID, stream_sample_t **outputs, int samples);
29 |
30 | int device_start_ym2203(UINT8 ChipID, int clock, UINT8 AYDisable, UINT8 AYFlags, int* AYrate);
31 | void device_stop_ym2203(UINT8 ChipID);
32 | void device_reset_ym2203(UINT8 ChipID);
33 |
34 | UINT8 ym2203_r(UINT8 ChipID, offs_t offset);
35 | void ym2203_w(UINT8 ChipID, offs_t offset, UINT8 data);
36 |
37 | UINT8 ym2203_status_port_r(UINT8 ChipID, offs_t offset);
38 | UINT8 ym2203_read_port_r(UINT8 ChipID, offs_t offset);
39 | void ym2203_control_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
40 | void ym2203_write_port_w(UINT8 ChipID, offs_t offset, UINT8 data);
41 |
42 | void ym2203_set_ay_emu_core(UINT8 Emulator);
43 | void ym2203_set_mute_mask(UINT8 ChipID, UINT32 MuteMaskFM, UINT32 MuteMaskAY);
44 | void ym2203_set_stereo_mask_ay(UINT8 ChipID, UINT32 StereoMaskAY);
45 | void ym2203_set_srchg_cb(UINT8 ChipID, SRATE_CALLBACK CallbackFunc, void* DataPtr, void* AYDataPtr);
46 |
--------------------------------------------------------------------------------
/VGMPlay/VGMPlay.h:
--------------------------------------------------------------------------------
1 | // Header File for structures and constants used within VGMPlay.c
2 |
3 | #include "VGMFile.h"
4 |
5 | #define VGMPLAY_VER_STR "0.40.9.1"
6 | //#define APLHA
7 | //#define BETA
8 | #define VGM_VER_STR "1.71b"
9 | #define VGM_VER_NUM 0x170
10 |
11 | #define CHIP_COUNT 0x29
12 | typedef struct chip_options
13 | {
14 | bool Disabled;
15 | UINT8 EmuCore;
16 | UINT8 ChnCnt;
17 | // Special Flags:
18 | // YM2612: Bit 0 - DAC Highpass Enable, Bit 1 - SSG-EG Enable
19 | // YM-OPN: Bit 0 - Disable AY8910-Part
20 | UINT16 SpecialFlags;
21 |
22 | // Channel Mute Mask - 1 Channel is represented by 1 bit
23 | UINT32 ChnMute1;
24 | // Mask 2 - used by YMF287B for OPL4 Wavetable Synth and by YM2608/YM2610 for PCM
25 | UINT32 ChnMute2;
26 | // Mask 3 - used for the AY-part of some OPN-chips
27 | UINT32 ChnMute3;
28 |
29 | INT16* Panning;
30 | } CHIP_OPTS;
31 | typedef struct chips_options
32 | {
33 | CHIP_OPTS SN76496;
34 | CHIP_OPTS YM2413;
35 | CHIP_OPTS YM2612;
36 | CHIP_OPTS YM2151;
37 | CHIP_OPTS SegaPCM;
38 | CHIP_OPTS RF5C68;
39 | CHIP_OPTS YM2203;
40 | CHIP_OPTS YM2608;
41 | CHIP_OPTS YM2610;
42 | CHIP_OPTS YM3812;
43 | CHIP_OPTS YM3526;
44 | CHIP_OPTS Y8950;
45 | CHIP_OPTS YMF262;
46 | CHIP_OPTS YMF278B;
47 | CHIP_OPTS YMF271;
48 | CHIP_OPTS YMZ280B;
49 | CHIP_OPTS RF5C164;
50 | CHIP_OPTS PWM;
51 | CHIP_OPTS AY8910;
52 | CHIP_OPTS GameBoy;
53 | CHIP_OPTS NES;
54 | CHIP_OPTS MultiPCM;
55 | CHIP_OPTS UPD7759;
56 | CHIP_OPTS OKIM6258;
57 | CHIP_OPTS OKIM6295;
58 | CHIP_OPTS K051649;
59 | CHIP_OPTS K054539;
60 | CHIP_OPTS HuC6280;
61 | CHIP_OPTS C140;
62 | CHIP_OPTS K053260;
63 | CHIP_OPTS Pokey;
64 | CHIP_OPTS QSound;
65 | CHIP_OPTS SCSP;
66 | CHIP_OPTS WSwan;
67 | CHIP_OPTS VSU;
68 | CHIP_OPTS SAA1099;
69 | CHIP_OPTS ES5503;
70 | CHIP_OPTS ES5506;
71 | CHIP_OPTS X1_010;
72 | CHIP_OPTS C352;
73 | CHIP_OPTS GA20;
74 | // CHIP_OPTS OKIM6376;
75 | } CHIPS_OPTION;
76 |
--------------------------------------------------------------------------------
/VGMPlay/VGMPlay_Intf.h:
--------------------------------------------------------------------------------
1 | // VGMPlay_Intf.h: VGMPlay Interface Header File
2 | //
3 |
4 | //#define NO_WCHAR_FILENAMES
5 | #ifndef WIN32
6 | // Linux uses UTF-8 Unicode and has no special wide-character file routines.
7 | #define NO_WCHAR_FILENAMES
8 | #endif
9 |
10 | typedef struct waveform_16bit_stereo
11 | {
12 | INT16 Left;
13 | INT16 Right;
14 | } WAVE_16BS;
15 |
16 | typedef struct waveform_32bit_stereo
17 | {
18 | INT32 Left;
19 | INT32 Right;
20 | } WAVE_32BS;
21 |
22 |
23 | void VGMPlay_Init(void);
24 | void VGMPlay_Init2(void);
25 | void VGMPlay_Deinit(void);
26 | char* FindFile(const char* FileName);
27 | char* FindFile_List(const char** FileNameList);
28 |
29 | UINT32 GetGZFileLength(const char* FileName);
30 | bool OpenVGMFile(const char* FileName);
31 | void CloseVGMFile(void);
32 |
33 | void FreeGD3Tag(GD3_TAG* TagData);
34 | UINT32 GetVGMFileInfo(const char* FileName, VGM_HEADER* RetVGMHead, GD3_TAG* RetGD3Tag);
35 | UINT32 CalcSampleMSec(UINT64 Value, UINT8 Mode);
36 | UINT32 CalcSampleMSecExt(UINT64 Value, UINT8 Mode, VGM_HEADER* FileHead);
37 | const char* GetChipName(UINT8 ChipID);
38 | const char* GetAccurateChipName(UINT8 ChipID, UINT8 SubType);
39 | UINT32 GetChipClock(VGM_HEADER* FileHead, UINT8 ChipID, UINT8* RetSubType);
40 |
41 | #ifndef NO_WCHAR_FILENAMES
42 | UINT32 GetGZFileLengthW(const wchar_t* FileName);
43 | bool OpenVGMFileW(const wchar_t* FileName);
44 | UINT32 GetVGMFileInfoW(const wchar_t* FileName, VGM_HEADER* RetVGMHead, GD3_TAG* RetGD3Tag);
45 | #endif
46 |
47 | INT32 SampleVGM2Playback(INT32 SampleVal);
48 | INT32 SamplePlayback2VGM(INT32 SampleVal);
49 |
50 | void PlayVGM(void);
51 | void StopVGM(void);
52 | void RestartVGM(void);
53 | void PauseVGM(bool Pause);
54 | void SeekVGM(bool Relative, INT32 PlayBkSamples);
55 | void RefreshMuting(void);
56 | void RefreshPanning(void);
57 | void RefreshPlaybackOptions(void);
58 |
59 | UINT32 FillBuffer(WAVE_16BS* Buffer, UINT32 BufferSize);
60 |
--------------------------------------------------------------------------------
/VGMPlay/zlib/zlib.def:
--------------------------------------------------------------------------------
1 | ; zlib data compression library
2 | EXPORTS
3 | ; basic functions
4 | zlibVersion
5 | deflate
6 | deflateEnd
7 | inflate
8 | inflateEnd
9 | ; advanced functions
10 | deflateSetDictionary
11 | deflateGetDictionary
12 | deflateCopy
13 | deflateReset
14 | deflateParams
15 | deflateTune
16 | deflateBound
17 | deflatePending
18 | deflatePrime
19 | deflateSetHeader
20 | inflateSetDictionary
21 | inflateGetDictionary
22 | inflateSync
23 | inflateCopy
24 | inflateReset
25 | inflateReset2
26 | inflatePrime
27 | inflateMark
28 | inflateGetHeader
29 | inflateBack
30 | inflateBackEnd
31 | zlibCompileFlags
32 | ; utility functions
33 | compress
34 | compress2
35 | compressBound
36 | uncompress
37 | uncompress2
38 | gzopen
39 | gzdopen
40 | gzbuffer
41 | gzsetparams
42 | gzread
43 | gzfread
44 | gzwrite
45 | gzfwrite
46 | gzprintf
47 | gzvprintf
48 | gzputs
49 | gzgets
50 | gzputc
51 | gzgetc
52 | gzungetc
53 | gzflush
54 | gzseek
55 | gzrewind
56 | gztell
57 | gzoffset
58 | gzeof
59 | gzdirect
60 | gzclose
61 | gzclose_r
62 | gzclose_w
63 | gzerror
64 | gzclearerr
65 | ; large file functions
66 | gzopen64
67 | gzseek64
68 | gztell64
69 | gzoffset64
70 | adler32_combine64
71 | crc32_combine64
72 | ; checksum functions
73 | adler32
74 | adler32_z
75 | crc32
76 | crc32_z
77 | adler32_combine
78 | crc32_combine
79 | ; various hacks, don't look :)
80 | deflateInit_
81 | deflateInit2_
82 | inflateInit_
83 | inflateInit2_
84 | inflateBackInit_
85 | gzgetc_
86 | zError
87 | inflateSyncPoint
88 | get_crc_table
89 | inflateUndermine
90 | inflateValidate
91 | inflateCodesUsed
92 | inflateResetKeep
93 | deflateResetKeep
94 | gzopen_w
95 |
--------------------------------------------------------------------------------
/VGMPlay/licenses/mame_license.txt:
--------------------------------------------------------------------------------
1 | Unless otherwise explicitly stated, all code in MAME is released under the
2 | following license:
3 |
4 | Copyright Nicola Salmoria and the MAME team
5 | All rights reserved.
6 |
7 | Redistribution and use of this code or any derivative works are permitted
8 | provided that the following conditions are met:
9 |
10 | * Redistributions may not be sold, nor may they be used in a commercial
11 | product or activity.
12 |
13 | * Redistributions that are modified from the original source must include the
14 | complete source code, including the source code for all components used by a
15 | binary built from the modified sources. However, as a special exception, the
16 | source code distributed need not include anything that is normally distributed
17 | (in either source or binary form) with the major components (compiler, kernel,
18 | and so on) of the operating system on which the executable runs, unless that
19 | component itself accompanies the executable.
20 |
21 | * Redistributions must reproduce the above copyright notice, this list of
22 | conditions and the following disclaimer in the documentation and/or other
23 | materials provided with the distribution.
24 |
25 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
29 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35 | POSSIBILITY OF SUCH DAMAGE.
36 |
--------------------------------------------------------------------------------
/VGMPlay/mmkeys_Win.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | #include "chips/mamedef.h"
5 | #include "mmkeys.h"
6 |
7 | #ifndef VK_MEDIA_NEXT_TRACK
8 | // from WinUser.h
9 | #define VK_MEDIA_NEXT_TRACK 0xB0
10 | #define VK_MEDIA_PREV_TRACK 0xB1
11 | #define VK_MEDIA_STOP 0xB2
12 | #define VK_MEDIA_PLAY_PAUSE 0xB3
13 | #endif
14 |
15 | static DWORD idThread = 0;
16 | static HANDLE hThread = NULL;
17 | static HANDLE hEvent = NULL;
18 | static mmkey_cbfunc evtCallback = NULL;
19 |
20 | static DWORD WINAPI KeyMessageThread(void* args)
21 | {
22 | MSG msg;
23 | BOOL retValB;
24 |
25 | // enforce creation of message queue
26 | PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);
27 |
28 | retValB = RegisterHotKey(NULL, MMKEY_PLAY, 0, VK_MEDIA_PLAY_PAUSE);
29 | retValB = RegisterHotKey(NULL, MMKEY_PREV, 0, VK_MEDIA_PREV_TRACK);
30 | retValB = RegisterHotKey(NULL, MMKEY_NEXT, 0, VK_MEDIA_NEXT_TRACK);
31 |
32 | SetEvent(hEvent);
33 |
34 | while(retValB = GetMessage(&msg, NULL, 0, 0))
35 | {
36 | if (msg.message == WM_HOTKEY)
37 | {
38 | if (evtCallback != NULL)
39 | evtCallback((UINT8)msg.wParam);
40 | }
41 | }
42 |
43 | UnregisterHotKey(NULL, MMKEY_PLAY);
44 | UnregisterHotKey(NULL, MMKEY_PREV);
45 | UnregisterHotKey(NULL, MMKEY_NEXT);
46 |
47 | return 0;
48 | }
49 |
50 | UINT8 MultimediaKeyHook_Init(void)
51 | {
52 | if (hThread != NULL)
53 | return 0x01;
54 |
55 | hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
56 | hThread = CreateThread(NULL, 0x00, &KeyMessageThread, NULL, 0x00, &idThread);
57 | if (hThread == NULL)
58 | return 0xFF; // CreateThread failed
59 |
60 | WaitForSingleObject(hEvent, INFINITE);
61 |
62 | return 0x00;
63 | }
64 |
65 | void MultimediaKeyHook_Deinit(void)
66 | {
67 | if (hThread == NULL)
68 | return;
69 |
70 | PostThreadMessage(idThread, WM_QUIT, 0, 0);
71 | WaitForSingleObject(hThread, INFINITE);
72 |
73 | CloseHandle(hThread);
74 | hThread = NULL;
75 |
76 | return;
77 | }
78 |
79 | void MultimediaKeyHook_SetCallback(mmkey_cbfunc callbackFunc)
80 | {
81 | evtCallback = callbackFunc;
82 |
83 | return;
84 | }
85 |
--------------------------------------------------------------------------------
/VGMPlay/chips/nes_apu.h:
--------------------------------------------------------------------------------
1 | /*****************************************************************************
2 |
3 | MAME/MESS NES APU CORE
4 |
5 | Based on the Nofrendo/Nosefart NES N2A03 sound emulation core written by
6 | Matthew Conte (matt@conte.com) and redesigned for use in MAME/MESS by
7 | Who Wants to Know? (wwtk@mail.com)
8 |
9 | This core is written with the advise and consent of Matthew Conte and is
10 | released under the GNU Public License. This core is freely avaiable for
11 | use in any freeware project, subject to the following terms:
12 |
13 | Any modifications to this code must be duly noted in the source and
14 | approved by Matthew Conte and myself prior to public submission.
15 |
16 | *****************************************************************************
17 |
18 | NES_APU.H
19 |
20 | NES APU external interface.
21 |
22 | *****************************************************************************/
23 |
24 | #pragma once
25 |
26 | #ifndef __NES_APU_H__
27 | #define __NES_APU_H__
28 |
29 | //#include "devlegcy.h"
30 |
31 |
32 | /* AN EXPLANATION
33 | *
34 | * The NES APU is actually integrated into the Nintendo processor.
35 | * You must supply the same number of APUs as you do processors.
36 | * Also make sure to correspond the memory regions to those used in the
37 | * processor, as each is shared.
38 | */
39 |
40 | /*typedef struct _nes_interface nes_interface;
41 | struct _nes_interface
42 | {
43 | const char *cpu_tag; // CPU tag
44 | };
45 |
46 | READ8_DEVICE_HANDLER( nes_psg_r );
47 | WRITE8_DEVICE_HANDLER( nes_psg_w );
48 |
49 | DECLARE_LEGACY_SOUND_DEVICE(NES, nesapu);*/
50 |
51 | UINT8 nes_psg_r(void* chip, offs_t offset);
52 | void nes_psg_w(void* chip, offs_t offset, UINT8 data);
53 |
54 | void nes_psg_update_sound(void* chip, stream_sample_t **outputs, int samples);
55 | void* device_start_nesapu(int clock, int rate);
56 | void device_stop_nesapu(void* chip);
57 | void device_reset_nesapu(void* chip);
58 |
59 | void nesapu_set_rom(void* chip, const UINT8* ROMData);
60 |
61 | void nesapu_set_mute_mask(void* chip, UINT32 MuteMask);
62 |
63 | #endif /* __NES_APU_H__ */
64 |
--------------------------------------------------------------------------------
/VGMPlay/chips/k054539.h:
--------------------------------------------------------------------------------
1 | /*********************************************************
2 |
3 | Konami 054539 PCM Sound Chip
4 |
5 | *********************************************************/
6 |
7 | #pragma once
8 |
9 | //#include "devlegcy.h"
10 |
11 | /*typedef struct _k054539_interface k054539_interface;
12 | struct _k054539_interface
13 | {
14 | const char *rgnoverride;
15 | void (*apan)(device_t *, double, double); // Callback for analog output mixing levels (0..1 for each channel)
16 | void (*irq)(device_t *);
17 | };*/
18 |
19 |
20 | void k054539_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
21 | int device_start_k054539(UINT8 ChipID, int clock);
22 | void device_stop_k054539(UINT8 ChipID);
23 | void device_reset_k054539(UINT8 ChipID);
24 |
25 |
26 | //WRITE8_DEVICE_HANDLER( k054539_w );
27 | //READ8_DEVICE_HANDLER( k054539_r );
28 | void k054539_w(UINT8 ChipID, offs_t offset, UINT8 data);
29 | UINT8 k054539_r(UINT8 ChipID, offs_t offset);
30 |
31 | //* control flags, may be set at DRIVER_INIT().
32 | #define K054539_RESET_FLAGS 0
33 | #define K054539_REVERSE_STEREO 1
34 | #define K054539_DISABLE_REVERB 2
35 | #define K054539_UPDATE_AT_KEYON 4
36 |
37 | //void k054539_init_flags(device_t *device, int flags);
38 | void k054539_init_flags(UINT8 ChipID, int flags);
39 |
40 | /*
41 | Note that the eight PCM channels of a K054539 do not have separate
42 | volume controls. Considering the global attenuation equation may not
43 | be entirely accurate, k054539_set_gain() provides means to control
44 | channel gain. It can be called anywhere but preferrably from
45 | DRIVER_INIT().
46 |
47 | Parameters:
48 | chip : 0 / 1
49 | channel : 0 - 7
50 | gain : 0.0=silent, 1.0=no gain, 2.0=twice as loud, etc.
51 | */
52 | //void k054539_set_gain(device_t *device, int channel, double gain);
53 | void k054539_set_gain(UINT8 ChipID, int channel, double gain);
54 |
55 |
56 | void k054539_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
57 | const UINT8* ROMData);
58 | void k054539_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
59 |
60 |
61 | //DECLARE_LEGACY_SOUND_DEVICE(K054539, k054539);
62 |
--------------------------------------------------------------------------------
/VGMPlay/chips/2608intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "fm.h"
4 | #include "ay8910.h"
5 | #include "emu2149.h"
6 |
7 | void ym2608_update_request(void *param);
8 |
9 | typedef struct _ym2608_interface ym2608_interface;
10 | struct _ym2608_interface
11 | {
12 | ay8910_interface ay8910_intf;
13 | //void ( *handler )( const device_config *device, int irq ); /* IRQ handler for the YM2608 */
14 | void ( *handler )( int irq ); /* IRQ handler for the YM2608 */
15 | };
16 |
17 | /*READ8_DEVICE_HANDLER( ym2608_r );
18 | WRITE8_DEVICE_HANDLER( ym2608_w );
19 |
20 | READ8_DEVICE_HANDLER( ym2608_read_port_r );
21 | READ8_DEVICE_HANDLER( ym2608_status_port_a_r );
22 | READ8_DEVICE_HANDLER( ym2608_status_port_b_r );
23 |
24 | WRITE8_DEVICE_HANDLER( ym2608_control_port_a_w );
25 | WRITE8_DEVICE_HANDLER( ym2608_control_port_b_w );
26 | WRITE8_DEVICE_HANDLER( ym2608_data_port_a_w );
27 | WRITE8_DEVICE_HANDLER( ym2608_data_port_b_w );
28 |
29 | DEVICE_GET_INFO( ym2608 );
30 | #define SOUND_YM2608 DEVICE_GET_INFO_NAME( ym2608 )*/
31 |
32 | void ym2608_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
33 | void ym2608_stream_update_ay(UINT8 ChipID, stream_sample_t **outputs, int samples);
34 |
35 | int device_start_ym2608(UINT8 ChipID, int clock, UINT8 AYDisable, UINT8 AYFlags, int* AYrate);
36 | void device_stop_ym2608(UINT8 ChipID);
37 | void device_reset_ym2608(UINT8 ChipID);
38 |
39 | UINT8 ym2608_r(UINT8 ChipID, offs_t offset);
40 | void ym2608_w(UINT8 ChipID, offs_t offset, UINT8 data);
41 |
42 | UINT8 ym2608_read_port_r(UINT8 ChipID, offs_t offset);
43 | UINT8 ym2608_status_port_a_r(UINT8 ChipID, offs_t offset);
44 | UINT8 ym2608_status_port_b_r(UINT8 ChipID, offs_t offset);
45 |
46 | void ym2608_control_port_a_w(UINT8 ChipID, offs_t offset, UINT8 data);
47 | void ym2608_control_port_b_w(UINT8 ChipID, offs_t offset, UINT8 data);
48 | void ym2608_data_port_a_w(UINT8 ChipID, offs_t offset, UINT8 data);
49 | void ym2608_data_port_b_w(UINT8 ChipID, offs_t offset, UINT8 data);
50 |
51 | void ym2608_set_ay_emu_core(UINT8 Emulator);
52 | void ym2608_write_data_pcmrom(UINT8 ChipID, UINT8 rom_id, offs_t ROMSize, offs_t DataStart,
53 | offs_t DataLength, const UINT8* ROMData);
54 | void ym2608_set_mute_mask(UINT8 ChipID, UINT32 MuteMaskFM, UINT32 MuteMaskAY);
55 | void ym2608_set_srchg_cb(UINT8 ChipID, SRATE_CALLBACK CallbackFunc, void* DataPtr, void* AYDataPtr);
56 |
--------------------------------------------------------------------------------
/VGMPlay/chips/2610intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "fm.h"
4 | #include "ay8910.h"
5 | #include "emu2149.h"
6 |
7 |
8 | void ym2610_update_request(void *param);
9 |
10 | /*typedef struct _ym2610_interface ym2610_interface;
11 | struct _ym2610_interface
12 | {
13 | //void ( *handler )( const device_config *device, int irq ); // IRQ handler for the YM2610
14 | void ( *handler )( int irq ); // IRQ handler for the YM2610
15 | };*/
16 |
17 | /*READ8_DEVICE_HANDLER( ym2610_r );
18 | WRITE8_DEVICE_HANDLER( ym2610_w );
19 |
20 | READ8_DEVICE_HANDLER( ym2610_status_port_a_r );
21 | READ8_DEVICE_HANDLER( ym2610_status_port_b_r );
22 | READ8_DEVICE_HANDLER( ym2610_read_port_r );
23 |
24 | WRITE8_DEVICE_HANDLER( ym2610_control_port_a_w );
25 | WRITE8_DEVICE_HANDLER( ym2610_control_port_b_w );
26 | WRITE8_DEVICE_HANDLER( ym2610_data_port_a_w );
27 | WRITE8_DEVICE_HANDLER( ym2610_data_port_b_w );
28 |
29 |
30 | DEVICE_GET_INFO( ym2610 );
31 | DEVICE_GET_INFO( ym2610b );
32 |
33 | #define SOUND_YM2610 DEVICE_GET_INFO_NAME( ym2610 )
34 | #define SOUND_YM2610B DEVICE_GET_INFO_NAME( ym2610b )*/
35 |
36 | void ym2610_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
37 | void ym2610b_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
38 | void ym2610_stream_update_ay(UINT8 ChipID, stream_sample_t **outputs, int samples);
39 |
40 | int device_start_ym2610(UINT8 ChipID, int clock, UINT8 AYDisable, int* AYrate);
41 | void device_stop_ym2610(UINT8 ChipID);
42 | void device_reset_ym2610(UINT8 ChipID);
43 |
44 | UINT8 ym2610_r(UINT8 ChipID, offs_t offset);
45 | void ym2610_w(UINT8 ChipID, offs_t offset, UINT8 data);
46 |
47 | UINT8 ym2610_status_port_a_r(UINT8 ChipID, offs_t offset);
48 | UINT8 ym2610_status_port_b_r(UINT8 ChipID, offs_t offset);
49 | UINT8 ym2610_read_port_r(UINT8 ChipID, offs_t offset);
50 |
51 | void ym2610_control_port_a_w(UINT8 ChipID, offs_t offset, UINT8 data);
52 | void ym2610_control_port_b_w(UINT8 ChipID, offs_t offset, UINT8 data);
53 | void ym2610_data_port_a_w(UINT8 ChipID, offs_t offset, UINT8 data);
54 | void ym2610_data_port_b_w(UINT8 ChipID, offs_t offset, UINT8 data);
55 |
56 | void ym2610_set_ay_emu_core(UINT8 Emulator);
57 | void ym2610_write_data_pcmrom(UINT8 ChipID, UINT8 rom_id, offs_t ROMSize, offs_t DataStart,
58 | offs_t DataLength, const UINT8* ROMData);
59 | void ym2610_set_mute_mask(UINT8 ChipID, UINT32 MuteMaskFM, UINT32 MuteMaskAY);
60 |
61 |
--------------------------------------------------------------------------------
/in_vgm/Winamp/ipc_pe.h:
--------------------------------------------------------------------------------
1 | #ifndef __IPC_PE_H
2 | #define __IPC_PE_H
3 |
4 | #define IPC_PE_GETCURINDEX 100 // returns current idx
5 | #define IPC_PE_GETINDEXTOTAL 101 // returns number of items
6 | #define IPC_PE_GETINDEXINFO 102 // (copydata) lpData is of type callbackinfo, callback is called with copydata/fileinfo structure and msg IPC_PE_GETINDEXINFORESULT
7 | #define IPC_PE_GETINDEXINFORESULT 103 // callback message for IPC_PE_GETINDEXINFO
8 | #define IPC_PE_DELETEINDEX 104 // lParam = index
9 | #define IPC_PE_SWAPINDEX 105 // (lParam & 0xFFFF0000) >> 16 = from, (lParam & 0xFFFF) = to
10 | #define IPC_PE_INSERTFILENAME 106 // (copydata) lpData is of type fileinfo
11 | #define IPC_PE_GETDIRTY 107 // returns 1 if the playlist changed since the last IPC_PE_SETCLEAN
12 | #define IPC_PE_SETCLEAN 108 // resets the dirty flag until next modification
13 | #define IPC_PE_GETIDXFROMPOINT 109 // pass a point parm, return a playlist index
14 | #define IPC_PE_SAVEEND 110 // pass index to save from
15 | #define IPC_PE_RESTOREEND 111 // no parm
16 | #define IPC_PE_GETNEXTSELECTED 112 // same as IPC_PLAYLIST_GET_NEXT_SELECTED for the main window
17 | #define IPC_PE_GETSELECTEDCOUNT 113
18 | #define IPC_PE_INSERTFILENAMEW 114 // (copydata) lpData is of type fileinfoW
19 | #define IPC_PE_GETINDEXINFO_TITLE 115 // like IPC_PE_GETINDEXINFO, but writes the title to char file[MAX_PATH] instead of filename
20 | #define IPC_PE_GETINDEXINFORESULT_TITLE 116 // callback message for IPC_PE_GETINDEXINFO
21 | typedef struct {
22 | char file[MAX_PATH];
23 | int index;
24 | } fileinfo;
25 |
26 | typedef struct {
27 | wchar_t file[MAX_PATH];
28 | int index;
29 | } fileinfoW;
30 |
31 | typedef struct {
32 | HWND callback;
33 | int index;
34 | } callbackinfo;
35 |
36 | // the following messages are in_process ONLY
37 |
38 | #define IPC_PE_GETINDEXTITLE 200 // lParam = pointer to fileinfo2 struct
39 | #define IPC_PE_GETINDEXTITLEW 201 // lParam = pointer to fileinfo2W struct
40 | #define IPC_PE_GETINDEXINFO_INPROC 202 // lParam = pointer to fileinfo struct
41 | #define IPC_PE_GETINDEXINFOW_INPROC 203 // lParam = pointer to fileinfoW struct
42 |
43 | typedef struct {
44 | int fileindex;
45 | char filetitle[256];
46 | char filelength[16];
47 | } fileinfo2;
48 |
49 | typedef struct
50 | {
51 | int fileindex;
52 | wchar_t filetitle[256];
53 | wchar_t filelength[16];
54 | } fileinfo2W;
55 |
56 | #endif
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # VGMPlay [](https://travis-ci.org/vgmrips/vgmplay)
2 |
3 | The official and always up-to-date player for all [VGM](https://en.wikipedia.org/wiki/VGM_(file_format)) files.
4 |
5 | In the future, the existing VGMPlay will be replaced by [libvgm](https://github.com/ValleyBell/libvgm), which is currently in development.
6 |
7 | ## Contact
8 |
9 | * [VGMRips Forums](http://vgmrips.net/forum/index.php)
10 | * IRC: irc.digibase.ca #vgmrips
11 |
12 | ## Compile VGMPlay under Windows
13 |
14 | ### Using MS Visual Studio 6.0:
15 |
16 | 1. Open `VGMPlay.dsw`.
17 | 2. Build the project.
18 | 3. Done.
19 |
20 | ### Using later versions of MS Visual Studio:
21 |
22 | 1. Open `VGMPlay.vcxproj`.
23 | 2. Build the project.
24 | 3. Done.
25 |
26 | ### Using MinGW/MSYS:
27 |
28 | 1. open MSYS and run `make WINDOWS=1` in VGMPlay's folder.
29 | 2. Done.
30 |
31 | Note: You can compile it without MSYS, but you need to manually create
32 | the OBJDIRS paths (or make them use the backslash '\'), because mkdir fails
33 | at paths with a forward slash.
34 |
35 | ## Compile VGMPlay under Linux
36 |
37 | 1. [optional step] If you have libao installed, you can edit the
38 | Makefile to make VGMPlay use `libao` instead of `OSS`.
39 | 2. run `make` in VGMPlay's folder
40 | 3. Done. Optionally `sudo make install` and `sudo make play_install`.
41 |
42 | ### Building on Ubuntu (16.04)
43 |
44 | #### Requirements
45 |
46 | The following packages are needed in order to compile the binaries
47 |
48 | ```sh
49 | sudo apt-get install make gcc zlib1g-dev libao-dev libdbus-1-dev
50 | ```
51 |
52 | #### Building
53 |
54 | ```sh
55 | make
56 | ```
57 |
58 | ## Compile VGMPlay under macOS
59 |
60 | 1. install libao by executing the line `brew install libao`
61 | 2. run `make install MACOSX=1 DISABLE_HWOPL_SUPPORT=1` in VGMPlay's folder
62 | (Alternatively edit the Makefile to set those constants and just run `make`.)
63 | 3. Done.
64 |
65 | Thanks to grauw for macOS compilation instructions.
66 |
67 | ## Compile VGMPlay under Android
68 | 1. Install [Termux](https://github.com/termux/termux-app) on [F-Droid](https://f-droid.org/en/packages/com.termux/) or [GitHub](https://github.com/termux/termux-app/releases). Do not download Termux from Play Store for security and depreciation reasons
69 | 2. Open Termux and do `pkg update`
70 | 3. When you do pkg update, do `pkg install clang dbus git libao make pkg-config -y`
71 | 4. After the installation is done, do `git clone https://github.com/vgmrips/vgmplay`
72 | 5. After Done Cloning, do `cd vgmplay/VGMPlay`
73 | 6. And then do `make`
74 |
--------------------------------------------------------------------------------
/VGMPlay/chips/es5506.h:
--------------------------------------------------------------------------------
1 | /**********************************************************************************************
2 | *
3 | * Ensoniq ES5505/6 driver
4 | * by Aaron Giles
5 | *
6 | **********************************************************************************************/
7 |
8 | #pragma once
9 |
10 | #ifndef __ES5506_H__
11 | #define __ES5506_H__
12 |
13 | //#include "devlegcy.h"
14 |
15 | /*typedef struct _es5505_interface es5505_interface;
16 | struct _es5505_interface
17 | {
18 | const char * region0; // memory region where the sample ROM lives
19 | const char * region1; // memory region where the sample ROM lives
20 | void (*irq_callback)(device_t *device, int state); // irq callback
21 | UINT16 (*read_port)(device_t *device); // input port read
22 | };*
23 |
24 | READ16_DEVICE_HANDLER( es5505_r );
25 | WRITE16_DEVICE_HANDLER( es5505_w );
26 | void es5505_voice_bank_w(device_t *device, int voice, int bank);
27 | void es5505_set_channel_volume(device_t *device, int channel, int volume);
28 |
29 | //DECLARE_LEGACY_SOUND_DEVICE(ES5505, es5505);
30 |
31 |
32 | typedef struct _es5506_interface es5506_interface;
33 | struct _es5506_interface
34 | {
35 | const char * region0; // memory region where the sample ROM lives
36 | const char * region1; // memory region where the sample ROM lives
37 | const char * region2; // memory region where the sample ROM lives
38 | const char * region3; // memory region where the sample ROM lives
39 | void (*irq_callback)(device_t *device, int state); // irq callback
40 | UINT16 (*read_port)(device_t *device); // input port read
41 | };*/
42 |
43 | //READ8_DEVICE_HANDLER( es5506_r );
44 | //WRITE8_DEVICE_HANDLER( es5506_w );
45 | UINT8 es550x_r(UINT8 ChipID, offs_t offset);
46 | void es550x_w(UINT8 ChipID, offs_t offset, UINT8 data);
47 | void es550x_w16(UINT8 ChipID, offs_t offset, UINT16 data);
48 |
49 | void es5506_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
50 | int device_start_es5506(UINT8 ChipID, int clock, int channels);
51 | void device_stop_es5506(UINT8 ChipID);
52 | void device_reset_es5506(UINT8 ChipID);
53 | //void es5506_set_base(running_device *device, UINT8 *wavemem);
54 |
55 | void es5506_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
56 | const UINT8* ROMData);
57 |
58 | void es5506_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
59 | void es5506_set_srchg_cb(UINT8 ChipID, SRATE_CALLBACK CallbackFunc, void* DataPtr);
60 |
61 | //void es5506_voice_bank_w(device_t *device, int voice, int bank);
62 |
63 | //DECLARE_LEGACY_SOUND_DEVICE(ES5506, es5506);
64 |
65 | #endif /* __ES5506_H__ */
66 |
--------------------------------------------------------------------------------
/VGMPlay/chips/panning.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include "panning.h"
4 |
5 | #ifndef PI
6 | #define PI 3.14159265359
7 | #endif
8 | #ifndef SQRT2
9 | #define SQRT2 1.414213562
10 | #endif
11 | #define RANGE 512
12 |
13 | //-----------------------------------------------------------------
14 | // Set the panning values for the two stereo channels (L,R)
15 | // for a position -256..0..256 L..C..R
16 | //-----------------------------------------------------------------
17 | void calc_panning(float channels[2], int position)
18 | {
19 | if ( position > RANGE / 2 )
20 | position = RANGE / 2;
21 | else if ( position < -RANGE / 2 )
22 | position = -RANGE / 2;
23 | position += RANGE / 2; // make -256..0..256 -> 0..256..512
24 |
25 | // Equal power law: equation is
26 | // right = sin( position / range * pi / 2) * sqrt( 2 )
27 | // left is equivalent to right with position = range - position
28 | // position is in the range 0 .. RANGE
29 | // RANGE / 2 = centre, result = 1.0f
30 | channels[1] = (float)( sin( (double)position / RANGE * PI / 2 ) * SQRT2 );
31 | position = RANGE - position;
32 | channels[0] = (float)( sin( (double)position / RANGE * PI / 2 ) * SQRT2 );
33 | }
34 |
35 | //-----------------------------------------------------------------
36 | // Reset the panning values to the centre position
37 | //-----------------------------------------------------------------
38 | void centre_panning(float channels[2])
39 | {
40 | channels[0] = channels[1] = 1.0f;
41 | }
42 |
43 | /*//-----------------------------------------------------------------
44 | // Generate a stereo position in the range 0..RANGE
45 | // with Gaussian distribution, mean RANGE/2, S.D. RANGE/5
46 | //-----------------------------------------------------------------
47 | int random_stereo()
48 | {
49 | int n = (int)(RANGE/2 + gauss_rand() * (RANGE * 0.2) );
50 | if ( n > RANGE ) n = RANGE;
51 | if ( n < 0 ) n = 0;
52 | return n;
53 | }
54 |
55 | //-----------------------------------------------------------------
56 | // Generate a Gaussian random number with mean 0, variance 1
57 | // Copied from an ancient C newsgroup FAQ
58 | //-----------------------------------------------------------------
59 | double gauss_rand()
60 | {
61 | static double V1, V2, S;
62 | static int phase = 0;
63 | double X;
64 |
65 | if(phase == 0) {
66 | do {
67 | double U1 = (double)rand() / RAND_MAX;
68 | double U2 = (double)rand() / RAND_MAX;
69 |
70 | V1 = 2 * U1 - 1;
71 | V2 = 2 * U2 - 1;
72 | S = V1 * V1 + V2 * V2;
73 | } while(S >= 1 || S == 0);
74 |
75 | X = V1 * sqrt(-2 * log(S) / S);
76 | } else
77 | X = V2 * sqrt(-2 * log(S) / S);
78 |
79 | phase = 1 - phase;
80 |
81 | return X;
82 | }*/
83 |
--------------------------------------------------------------------------------
/VGMPlay/chips/2612intf.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | void ym2612_update_request(void *param);
4 |
5 | /*typedef struct _ym2612_interface ym2612_interface;
6 | struct _ym2612_interface
7 | {
8 | //void (*handler)(const device_config *device, int irq);
9 | void (*handler)(int irq);
10 | };*/
11 |
12 | /*READ8_DEVICE_HANDLER( ym2612_r );
13 | WRITE8_DEVICE_HANDLER( ym2612_w );
14 |
15 | READ8_DEVICE_HANDLER( ym2612_status_port_a_r );
16 | READ8_DEVICE_HANDLER( ym2612_status_port_b_r );
17 | READ8_DEVICE_HANDLER( ym2612_data_port_a_r );
18 | READ8_DEVICE_HANDLER( ym2612_data_port_b_r );
19 |
20 | WRITE8_DEVICE_HANDLER( ym2612_control_port_a_w );
21 | WRITE8_DEVICE_HANDLER( ym2612_control_port_b_w );
22 | WRITE8_DEVICE_HANDLER( ym2612_data_port_a_w );
23 | WRITE8_DEVICE_HANDLER( ym2612_data_port_b_w );
24 |
25 |
26 | DEVICE_GET_INFO( ym2612 );
27 | #define SOUND_YM2612 DEVICE_GET_INFO_NAME( ym2612 )*/
28 | void ym2612_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
29 | int device_start_ym2612(UINT8 ChipID, int clock);
30 | void device_stop_ym2612(UINT8 ChipID);
31 | void device_reset_ym2612(UINT8 ChipID);
32 |
33 | UINT8 ym2612_r(UINT8 ChipID, offs_t offset);
34 | void ym2612_w(UINT8 ChipID, offs_t offset, UINT8 data);
35 |
36 | UINT8 ym2612_status_port_a_r(UINT8 ChipID, offs_t offset);
37 | UINT8 ym2612_status_port_b_r(UINT8 ChipID, offs_t offset);
38 | UINT8 ym2612_data_port_a_r(UINT8 ChipID, offs_t offset);
39 | UINT8 ym2612_data_port_b_r(UINT8 ChipID, offs_t offset);
40 |
41 | void ym2612_control_port_a_w(UINT8 ChipID, offs_t offset, UINT8 data);
42 | void ym2612_control_port_b_w(UINT8 ChipID, offs_t offset, UINT8 data);
43 | void ym2612_data_port_a_w(UINT8 ChipID, offs_t offset, UINT8 data);
44 | void ym2612_data_port_b_w(UINT8 ChipID, offs_t offset, UINT8 data);
45 |
46 | void ym2612_set_emu_core(UINT8 Emulator);
47 | void ym2612_set_options(UINT8 Flags);
48 | void ym2612_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
49 |
50 |
51 | /*typedef struct _ym3438_interface ym3438_interface;
52 | struct _ym3438_interface
53 | {
54 | //void (*handler)(const device_config *device, int irq);
55 | void (*handler)(int irq);
56 | };
57 |
58 |
59 | #define ym3438_r ym2612_r
60 | #define ym3438_w ym2612_w
61 |
62 | #define ym3438_status_port_a_r ym2612_status_port_a_r
63 | #define ym3438_status_port_b_r ym2612_status_port_b_r
64 | #define ym3438_data_port_a_r ym2612_data_port_a_r
65 | #define ym3438_data_port_b_r ym2612_data_port_b_r
66 |
67 | #define ym3438_control_port_a_w ym2612_control_port_a_w
68 | #define ym3438_control_port_b_w ym2612_control_port_b_w
69 | #define ym3438_data_port_a_w ym2612_data_port_a_w
70 | #define ym3438_data_port_b_w ym2612_data_port_b_w*/
71 |
72 |
73 | //DEVICE_GET_INFO( ym3438 );
74 | //#define SOUND_YM3438 DEVICE_GET_INFO_NAME( ym3438 )
75 |
--------------------------------------------------------------------------------
/in_vgm/Winamp/OUT.H:
--------------------------------------------------------------------------------
1 | #ifndef NULLSOFT_OUTH
2 | #define NULLSOFT_OUTH
3 | #include
4 | #include
5 | // ids:
6 | // waveout: 32
7 | // gapless: 64
8 | // xfade: 63
9 | // disk: 33
10 | // dsound: 38
11 | // NULL: 65
12 | // mm2: 69
13 |
14 | #if (_MSC_VER <= 1200)
15 | typedef int intptr_t;
16 | #endif
17 |
18 | #define OUT_VER 0x10
19 |
20 | typedef struct
21 | {
22 | int version; // module version (OUT_VER)
23 | char *description; // description of module, with version string
24 | intptr_t id; // module id. each input module gets its own. non-nullsoft modules should
25 | // be >= 65536.
26 |
27 | HWND hMainWindow; // winamp's main window (filled in by winamp)
28 | HINSTANCE hDllInstance; // DLL instance handle (filled in by winamp)
29 |
30 | void (*Config)(HWND hwndParent); // configuration dialog
31 | void (*About)(HWND hwndParent); // about dialog
32 |
33 | void (*Init)(); // called when loaded
34 | void (*Quit)(); // called when unloaded
35 |
36 | int (*Open)(int samplerate, int numchannels, int bitspersamp, int bufferlenms, int prebufferms);
37 | // returns >=0 on success, <0 on failure
38 |
39 | // NOTENOTENOTE: bufferlenms and prebufferms are ignored in most if not all output plug-ins.
40 | // ... so don't expect the max latency returned to be what you asked for.
41 | // returns max latency in ms (0 for diskwriters, etc)
42 | // bufferlenms and prebufferms must be in ms. 0 to use defaults.
43 | // prebufferms must be <= bufferlenms
44 | // pass bufferlenms==-666 to tell the output plugin that it's clock is going to be used to sync video
45 | // out_ds turns off silence-eating when -666 is passed
46 |
47 | void (*Close)(); // close the ol' output device.
48 |
49 | int (*Write)(char *buf, int len);
50 | // 0 on success. Len == bytes to write (<= 8192 always). buf is straight audio data.
51 | // 1 returns not able to write (yet). Non-blocking, always.
52 |
53 | int (*CanWrite)(); // returns number of bytes possible to write at a given time.
54 | // Never will decrease unless you call Write (or Close, heh)
55 |
56 | int (*IsPlaying)(); // non0 if output is still going or if data in buffers waiting to be
57 | // written (i.e. closing while IsPlaying() returns 1 would truncate the song
58 |
59 | int (*Pause)(int pause); // returns previous pause state
60 |
61 | void (*SetVolume)(int volume); // volume is 0-255
62 | void (*SetPan)(int pan); // pan is -128 to 128
63 |
64 | void (*Flush)(int t); // flushes buffers and restarts output at time t (in ms)
65 | // (used for seeking)
66 |
67 | int (*GetOutputTime)(); // returns played time in MS
68 | int (*GetWrittenTime)(); // returns time written in MS (used for synching up vis stuff)
69 |
70 | } Out_Module;
71 |
72 |
73 | #endif
--------------------------------------------------------------------------------
/VGMPlay/chips/ym2413hd.h:
--------------------------------------------------------------------------------
1 | /*-----------------------------------*/
2 | /* YM-2413 emulator using OPL */
3 | /* (c) by Hiromitsu Shioya */
4 | /* Modified by Omar Cornut */
5 | /*-----------------------------------*/
6 |
7 | //#ifndef __YM2413HD_H__
8 | //#define __YM2413HD_H__
9 | #define YM2413_REGISTERS (64) // 64 registers area
10 | #define YM2413_INSTRUMENTS (16) // 16 instruments (0 is user defined)
11 | #define YM2413_VOLUME_STEPS (16) // 16 different volume steps
12 | #define YM2413_VOLUME_MASK (0x0F)
13 |
14 | //-----------------------------------------------------------------------------
15 | // Instrument Data
16 | //-----------------------------------------------------------------------------
17 | // FIXME: Currently placed outside of the MEKA_OPL test, as it is being
18 | // used by the FM Editor.
19 | //-----------------------------------------------------------------------------
20 |
21 | typedef struct
22 | {
23 | unsigned char MKS, CKS; /* KSL */
24 | unsigned char MML, CML; /* MULTIPLE */
25 | unsigned char MA, CA; /* ATTACK RATE */
26 | unsigned char MSL, CSL; /* SUSTAIN LEVEL */
27 | unsigned char MS, CS; /* EG */
28 | unsigned char MD, CD; /* DECAY RATE */
29 | unsigned char MR, CR; /* RELEASE RATE */
30 | unsigned char MTL, CTL; /* TOTAL LEVEL */
31 | unsigned char MEV, CEV; /* KSR */
32 | unsigned char MW, CW; /* WAVE FORM */
33 | unsigned char FB, CON; /* FEEDBACK / Connection */
34 | } FM_OPL_Patch;
35 |
36 | //-----------------------------------------------------------------------------
37 |
38 | //#ifdef MEKA_OPL
39 |
40 | //-----------------------------------------------------------------------------
41 |
42 | // Registers
43 | byte FM_OPL_Regs [YM2413_REGISTERS];
44 | #define FM_OPL_Rhythm_Mode (FM_OPL_Regs [0x0E] & 0x20)
45 |
46 | // Functions
47 | int FM_OPL_Init (void *userdata);
48 | void FM_OPL_Close (void);
49 | //void FM_OPL_Active (void);
50 | void FM_OPL_Update (void);
51 | void FM_OPL_Set_Voice (int R, int V, int VL);
52 | void FM_OPL_Set_User_Voice (void);
53 |
54 | // Interface (see FMUNIT.C/.H)
55 | void FM_OPL_Reset (void);
56 | void FM_OPL_Write (int Register, int Value);
57 | //void FM_OPL_Mute (void);
58 | //void FM_OPL_Resume (void);
59 | //void FM_OPL_Regenerate (void);
60 |
61 | //-----------------------------------------------------------------------------
62 |
63 | /*#else
64 |
65 | // A fake set of registers is created as sound/fmunit.c reference it.
66 | // FIXME: This sucks.
67 | byte FM_OPL_Regs [YM2413_REGISTERS];
68 |
69 | #endif*/
70 |
71 | //#endif /* !__YM2413HD_H__ */
72 |
73 |
--------------------------------------------------------------------------------
/in_vgm/Winamp/DSP.H:
--------------------------------------------------------------------------------
1 | #ifndef NULLSOFT_WINAMP_DSP_H
2 | #define NULLSOFT_WINAMP_DSP_H
3 | // DSP plugin interface
4 |
5 | // notes:
6 | // any window that remains in foreground should optimally pass unused
7 | // keystrokes to the parent (winamp's) window, so that the user
8 | // can still control it. As for storing configuration,
9 | // Configuration data should be stored in \plugin.ini
10 | // (look at the vis plugin for configuration code)
11 |
12 | typedef struct winampDSPModule {
13 | char *description; // description
14 | HWND hwndParent; // parent window (filled in by calling app)
15 | HINSTANCE hDllInstance; // instance handle to this DLL (filled in by calling app)
16 |
17 | void (*Config)(struct winampDSPModule *this_mod); // configuration dialog (if needed)
18 | int (*Init)(struct winampDSPModule *this_mod); // 0 on success, creates window, etc (if needed)
19 |
20 | // modify waveform samples: returns number of samples to actually write
21 | // (typically numsamples, but no more than twice numsamples, and no less than half numsamples)
22 | // numsamples should always be at least 128. should, but I'm not sure
23 | int (*ModifySamples)(struct winampDSPModule *this_mod, short int *samples, int numsamples, int bps, int nch, int srate);
24 |
25 | void (*Quit)(struct winampDSPModule *this_mod); // called when unloading
26 |
27 | void *userData; // user data, optional
28 | } winampDSPModule;
29 |
30 | typedef struct {
31 | int version; // DSP_HDRVER
32 | char *description; // description of library
33 | winampDSPModule* (*getModule)(int); // module retrieval function
34 | int (*sf)(int key); // DSP_HDRVER == 0x21
35 | } winampDSPHeader;
36 |
37 | // exported symbols
38 | #ifdef USE_DSP_HDR_HWND
39 | typedef winampDSPHeader* (*winampDSPGetHeaderType)(HWND);
40 | #define DSP_HDRVER 0x22
41 |
42 | #else
43 |
44 | typedef winampDSPHeader* (*winampDSPGetHeaderType)(HWND);
45 | // header version: 0x20 == 0.20 == winamp 2.0
46 | #define DSP_HDRVER 0x20
47 | #endif
48 |
49 | // return values from the winampUninstallPlugin(HINSTANCE hdll, HWND parent, int param)
50 | // which determine if we can uninstall the plugin immediately or on winamp restart
51 | #define DSP_PLUGIN_UNINSTALL_NOW 0x0
52 | #define DSP_PLUGIN_UNINSTALL_REBOOT 0x1
53 | //
54 | // uninstall support was added from 5.0+ and uninstall now support from 5.5+
55 | // it is down to you to ensure that if uninstall now is returned that it will not cause a crash
56 | // (ie don't use if you've been subclassing the main window)
57 |
58 | // Version note:
59 | //
60 | // Added passing of Winamp's main hwnd in the call to the exported winampDSPHeader()
61 | // which allows for primarily the use of localisation features with the bundled plugins.
62 | // If you want to use the new version then either you can edit you version of dsp.h or
63 | // you can add USE_DSP_HDR_HWND to your project's defined list or before use of dsp.h
64 | //
65 | #endif
--------------------------------------------------------------------------------
/VGMPlay/chips/Ootake_PSG.h:
--------------------------------------------------------------------------------
1 | /*-----------------------------------------------------------------------------
2 | [PSG.h]
3 | PSGを記述するのに必要な定義および関数のプロトタイプ宣言を行ないます.
4 |
5 | Copyright (C) 2004 Ki
6 |
7 | This program is free software; you can redistribute it and/or modify
8 | it under the terms of the GNU General Public License as published by
9 | the Free Software Foundation; either version 2 of the License, or
10 | (at your option) any later version.
11 |
12 | This program is distributed in the hope that it will be useful,
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 | GNU General Public License for more details.
16 |
17 | You should have received a copy of the GNU General Public License
18 | along with this program; if not, write to the Free Software
19 | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 | **---------------------------------------------------------------------------*/
21 | //#include
22 | //#include "TypeDefs.h"
23 |
24 | typedef UINT8 Uint8;
25 | typedef INT16 Sint16;
26 | typedef INT32 Sint32;
27 | typedef UINT32 Uint32;
28 | typedef UINT8 BOOL;
29 | #define TRUE 1
30 | #define FALSE 0
31 |
32 | //#define PSG_FRQ 3579545.0
33 |
34 |
35 | /*-----------------------------------------------------------------------------
36 | ** 関数のプロトタイプ宣言を行ないます.
37 | **---------------------------------------------------------------------------*/
38 | //Sint32
39 | void*
40 | PSG_Init(
41 | Sint32 clock,
42 | Sint32 sampleRate);
43 |
44 | void
45 | PSG_Deinit(void* chip);
46 |
47 | void
48 | PSG_Mix(
49 | // Sint16* pDst, // 出力先バッファ
50 | void* chip,
51 | Sint32** pDst,
52 | Sint32 nSample); // 書き出すサンプル数
53 |
54 | /*void
55 | PSG_SetSampleRate(
56 | Uint32 sampleRate);
57 |
58 | void
59 | PSGDEBUG_ShowRegs();*/
60 |
61 | Uint8
62 | PSG_Read(void* chip, Uint32 regNum);
63 |
64 | void
65 | PSG_Write(
66 | void* chip,
67 | Uint32 regNum,
68 | Uint8 data);
69 |
70 | /*Sint32
71 | PSG_AdvanceClock(Sint32 clock);
72 |
73 | BOOL
74 | PSG_SaveState(
75 | FILE* p);
76 |
77 | BOOL
78 | PSG_LoadState(
79 | FILE* p);*/
80 |
81 | //Kitao追加。PSGのボリュームも個別に設定可能にした。
82 | /*void
83 | PSG_SetVolume(
84 | Uint32 volume); // 0 - 65535
85 |
86 | //Kitao追加。ボリュームミュート、ハーフなどをできるようにした。
87 | void
88 | PSG_SetVolumeEffect(
89 | Uint32 volumeEffect);*/
90 |
91 | //Kitao追加
92 | void
93 | PSG_ResetVolumeReg(void* chip);
94 |
95 | //Kitao追加
96 | void
97 | PSG_SetMutePsgChannel(
98 | void* chip,
99 | Sint32 num,
100 | BOOL bMute);
101 |
102 | void PSG_SetMuteMask(void* chip, Uint32 MuteMask);
103 |
104 | //Kitao追加
105 | BOOL
106 | PSG_GetMutePsgChannel(
107 | void* chip,
108 | Sint32 num);
109 |
110 | //Kitao追加。v2.60
111 | void
112 | PSG_SetHoneyInTheSky(
113 | void* chip,
114 | BOOL bHoneyInTheSky);
115 |
--------------------------------------------------------------------------------
/VGMPlay/chips/emu2149.h:
--------------------------------------------------------------------------------
1 | /* emu2149.h */
2 | #ifndef _EMU2149_H_
3 | #define _EMU2149_H_
4 | #include "emutypes.h"
5 |
6 | /*#ifdef EMU2149_DLL_EXPORTS
7 | #define EMU2149_API __declspec(dllexport)
8 | #elif EMU2149_DLL_IMPORTS
9 | #define EMU2149_API __declspec(dllimport)
10 | #else*/
11 | #define EMU2149_API
12 | //#endif
13 |
14 | #define EMU2149_VOL_DEFAULT 1
15 | #define EMU2149_VOL_YM2149 0
16 | #define EMU2149_VOL_AY_3_8910 1
17 |
18 | #define EMU2149_ZX_STEREO 0x80
19 |
20 | #define PSG_MASK_CH(x) (1<<(x))
21 |
22 | /*#ifdef __cplusplus
23 | extern "C"
24 | {
25 | #endif*/
26 |
27 | typedef struct __PSG
28 | {
29 |
30 | /* Volume Table */
31 | e_uint32 *voltbl;
32 |
33 | e_uint8 reg[0x20];
34 | e_int32 out;
35 | e_int32 cout[3];
36 |
37 | e_uint32 clk, rate, base_incr, quality;
38 |
39 | e_uint32 count[3];
40 | e_uint32 volume[3];
41 | e_uint32 freq[3];
42 | e_uint32 edge[3];
43 | e_uint32 tmask[3];
44 | e_uint32 nmask[3];
45 | e_uint32 mask;
46 | e_uint32 stereo_mask[3];
47 |
48 | e_uint32 base_count;
49 |
50 | e_uint32 env_volume;
51 | e_uint32 env_ptr;
52 | e_uint32 env_face;
53 |
54 | e_uint32 env_continue;
55 | e_uint32 env_attack;
56 | e_uint32 env_alternate;
57 | e_uint32 env_hold;
58 | e_uint32 env_pause;
59 | e_uint32 env_reset;
60 |
61 | e_uint32 env_freq;
62 | e_uint32 env_count;
63 |
64 | e_uint32 noise_seed;
65 | e_uint32 noise_count;
66 | e_uint32 noise_freq;
67 |
68 | /* rate converter */
69 | e_uint32 realstep;
70 | e_uint32 psgtime;
71 | e_uint32 psgstep;
72 | e_int32 prev, next;
73 | e_int32 sprev[2], snext[2];
74 |
75 | /* I/O Ctrl */
76 | e_uint32 adr;
77 |
78 | }
79 | PSG;
80 |
81 | EMU2149_API void PSG_set_quality (PSG * psg, e_uint32 q);
82 | EMU2149_API void PSG_set_clock(PSG * psg, e_uint32 c);
83 | EMU2149_API void PSG_set_rate (PSG * psg, e_uint32 r);
84 | EMU2149_API PSG *PSG_new (e_uint32 clk, e_uint32 rate);
85 | EMU2149_API void PSG_reset (PSG *);
86 | EMU2149_API void PSG_delete (PSG *);
87 | EMU2149_API void PSG_writeReg (PSG *, e_uint32 reg, e_uint32 val);
88 | EMU2149_API void PSG_writeIO (PSG * psg, e_uint32 adr, e_uint32 val);
89 | EMU2149_API e_uint8 PSG_readReg (PSG * psg, e_uint32 reg);
90 | EMU2149_API e_uint8 PSG_readIO (PSG * psg);
91 | EMU2149_API e_int16 PSG_calc (PSG *);
92 | EMU2149_API void PSG_calc_stereo (PSG * psg, e_int32 **out, e_int32 samples);
93 | EMU2149_API void PSG_setFlags (PSG * psg, e_uint8 flags);
94 | EMU2149_API void PSG_setVolumeMode (PSG * psg, int type);
95 | EMU2149_API e_uint32 PSG_setMask (PSG *, e_uint32 mask);
96 | EMU2149_API e_uint32 PSG_toggleMask (PSG *, e_uint32 mask);
97 | EMU2149_API void PSG_setStereoMask (PSG *psg, e_uint32 mask);
98 |
99 | /*#ifdef __cplusplus
100 | }
101 | #endif*/
102 |
103 | #endif
104 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ym2151.h:
--------------------------------------------------------------------------------
1 | /*
2 | ** File: ym2151.h - header file for software implementation of YM2151
3 | ** FM Operator Type-M(OPM)
4 | **
5 | ** (c) 1997-2002 Jarek Burczynski (s0246@poczta.onet.pl, bujar@mame.net)
6 | ** Some of the optimizing ideas by Tatsuyuki Satoh
7 | **
8 | ** Version 2.150 final beta May, 11th 2002
9 | **
10 | **
11 | ** I would like to thank following people for making this project possible:
12 | **
13 | ** Beauty Planets - for making a lot of real YM2151 samples and providing
14 | ** additional informations about the chip. Also for the time spent making
15 | ** the samples and the speed of replying to my endless requests.
16 | **
17 | ** Shigeharu Isoda - for general help, for taking time to scan his YM2151
18 | ** Japanese Manual first of all, and answering MANY of my questions.
19 | **
20 | ** Nao - for giving me some info about YM2151 and pointing me to Shigeharu.
21 | ** Also for creating fmemu (which I still use to test the emulator).
22 | **
23 | ** Aaron Giles and Chris Hardy - they made some samples of one of my favourite
24 | ** arcade games so I could compare it to my emulator.
25 | **
26 | ** Bryan McPhail and Tim (powerjaw) - for making some samples.
27 | **
28 | ** Ishmair - for the datasheet and motivation.
29 | */
30 |
31 | #pragma once
32 |
33 |
34 | /* 16- and 8-bit samples (signed) are supported*/
35 | #define SAMPLE_BITS 16
36 |
37 | typedef stream_sample_t SAMP;
38 | /*
39 | #if (SAMPLE_BITS==16)
40 | typedef INT16 SAMP;
41 | #endif
42 | #if (SAMPLE_BITS==8)
43 | typedef signed char SAMP;
44 | #endif
45 | */
46 |
47 | /*
48 | ** Initialize YM2151 emulator(s).
49 | **
50 | ** 'num' is the number of virtual YM2151's to allocate
51 | ** 'clock' is the chip clock in Hz
52 | ** 'rate' is sampling rate
53 | */
54 | void *ym2151_init(int clock, int rate);
55 |
56 | /* shutdown the YM2151 emulators*/
57 | void ym2151_shutdown(void *chip);
58 |
59 | /* reset all chip registers for YM2151 number 'num'*/
60 | void ym2151_reset_chip(void *chip);
61 |
62 | /*
63 | ** Generate samples for one of the YM2151's
64 | **
65 | ** 'num' is the number of virtual YM2151
66 | ** '**buffers' is table of pointers to the buffers: left and right
67 | ** 'length' is the number of samples that should be generated
68 | */
69 | void ym2151_update_one(void *chip, SAMP **buffers, int length);
70 |
71 | /* write 'v' to register 'r' on YM2151 chip number 'n'*/
72 | void ym2151_write_reg(void *chip, int r, int v);
73 |
74 | /* read status register on YM2151 chip number 'n'*/
75 | int ym2151_read_status(void *chip);
76 |
77 | /* set interrupt handler on YM2151 chip number 'n'*/
78 | //void ym2151_set_irq_handler(void *chip, void (*handler)(int irq));
79 |
80 | /* set port write handler on YM2151 chip number 'n'*/
81 | //void ym2151_set_port_write_handler(void *chip, write8_device_func handler);
82 |
83 | /* refresh chip when load state */
84 | //STATE_POSTLOAD( ym2151_postload );
85 | void ym2151_postload(void *param);
86 |
87 | void ym2151_set_mutemask(void *chip, UINT32 MuteMask);
88 |
--------------------------------------------------------------------------------
/in_vgm/ini_func.c:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 |
4 | #include "stdbool.h"
5 | #include "chips/mamedef.h" // for (U)INTxx types
6 |
7 | extern char IniFilePath[MAX_PATH];
8 |
9 | void ReadIni_Integer(const char* Section, const char* Key, UINT32* Value)
10 | {
11 | *Value = (INT32)GetPrivateProfileInt(Section, Key, *Value, IniFilePath);
12 |
13 | return;
14 | }
15 |
16 | void ReadIni_SIntSht(const char* Section, const char* Key, INT16* Value)
17 | {
18 | *Value = (INT16)GetPrivateProfileInt(Section, Key, *Value, IniFilePath);
19 |
20 | return;
21 | }
22 |
23 | void ReadIni_IntByte(const char* Section, const char* Key, UINT8* Value)
24 | {
25 | *Value = (UINT8)GetPrivateProfileInt(Section, Key, *Value, IniFilePath);
26 |
27 | return;
28 | }
29 |
30 | void ReadIni_Boolean(const char* Section, const char* Key, bool* Value)
31 | {
32 | char TempStr[0x10];
33 |
34 | GetPrivateProfileString(Section, Key, "", TempStr, 0x10, IniFilePath);
35 | if (! strcmp(TempStr, ""))
36 | return;
37 |
38 | if (! stricmp(TempStr, "True"))
39 | *Value = true;
40 | else if (! stricmp(TempStr, "False"))
41 | *Value = false;
42 | else
43 | *Value = strtol(TempStr, NULL, 0) ? true : false;
44 |
45 | return;
46 | }
47 |
48 | void ReadIni_String(const char* Section, const char* Key, char* String, UINT32 StrSize)
49 | {
50 | GetPrivateProfileString(Section, Key, String, String, StrSize, IniFilePath);
51 |
52 | return;
53 | }
54 |
55 | void ReadIni_Float(const char* Section, const char* Key, float* Value)
56 | {
57 | char TempStr[0x10];
58 |
59 | GetPrivateProfileString(Section, Key, "", TempStr, 0x10, IniFilePath);
60 | if (! strcmp(TempStr, ""))
61 | return;
62 |
63 | *Value = (float)strtod(TempStr, NULL);
64 |
65 | return;
66 | }
67 |
68 |
69 |
70 | void WriteIni_Integer(const char* Section, const char* Key, UINT32 Value)
71 | {
72 | char TempStr[0x10];
73 |
74 | sprintf(TempStr, "%u", Value);
75 | WritePrivateProfileString(Section, Key, TempStr, IniFilePath);
76 |
77 | return;
78 | }
79 |
80 | void WriteIni_SInteger(const char* Section, const char* Key, INT32 Value)
81 | {
82 | char TempStr[0x10];
83 |
84 | sprintf(TempStr, "%d", Value);
85 | WritePrivateProfileString(Section, Key, TempStr, IniFilePath);
86 |
87 | return;
88 | }
89 |
90 | void WriteIni_XInteger(const char* Section, const char* Key, UINT32 Value)
91 | {
92 | char TempStr[0x10];
93 |
94 | sprintf(TempStr, "0x%02X", Value);
95 | WritePrivateProfileString(Section, Key, TempStr, IniFilePath);
96 |
97 | return;
98 | }
99 |
100 | void WriteIni_Boolean(const char* Section, const char* Key, bool Value)
101 | {
102 | char TempStr[0x10];
103 |
104 | if (Value)
105 | strcpy(TempStr, "True");
106 | else
107 | strcpy(TempStr, "False");
108 | WritePrivateProfileString(Section, Key, TempStr, IniFilePath);
109 |
110 | return;
111 | }
112 |
113 | void WriteIni_String(const char* Section, const char* Key, char* String)
114 | {
115 | WritePrivateProfileString(Section, Key, String, IniFilePath);
116 |
117 | return;
118 | }
119 |
120 | void WriteIni_Float(const char* Section, const char* Key, float Value)
121 | {
122 | char TempStr[0x10];
123 |
124 | sprintf(TempStr, "%f", Value);
125 | WritePrivateProfileString(Section, Key, TempStr, IniFilePath);
126 |
127 | return;
128 | }
129 |
--------------------------------------------------------------------------------
/VGMPlay/chips/pokey.h:
--------------------------------------------------------------------------------
1 | /*****************************************************************************
2 | *
3 | * POKEY chip emulator 4.3
4 | * Copyright Nicola Salmoria and the MAME Team
5 | *
6 | * Based on original info found in Ron Fries' Pokey emulator,
7 | * with additions by Brad Oliver, Eric Smith and Juergen Buchmueller.
8 | * paddle (a/d conversion) details from the Atari 400/800 Hardware Manual.
9 | * Polynome algorithms according to info supplied by Perry McFarlane.
10 | *
11 | * This code is subject to the MAME license, which besides other
12 | * things means it is distributed as is, no warranties whatsoever.
13 | * For more details read mame.txt that comes with MAME.
14 | *
15 | *****************************************************************************/
16 |
17 | #pragma once
18 |
19 | //#include "devlegcy.h"
20 |
21 | /* CONSTANT DEFINITIONS */
22 |
23 | /* POKEY WRITE LOGICALS */
24 | #define AUDF1_C 0x00
25 | #define AUDC1_C 0x01
26 | #define AUDF2_C 0x02
27 | #define AUDC2_C 0x03
28 | #define AUDF3_C 0x04
29 | #define AUDC3_C 0x05
30 | #define AUDF4_C 0x06
31 | #define AUDC4_C 0x07
32 | #define AUDCTL_C 0x08
33 | #define STIMER_C 0x09
34 | #define SKREST_C 0x0A
35 | #define POTGO_C 0x0B
36 | #define SEROUT_C 0x0D
37 | #define IRQEN_C 0x0E
38 | #define SKCTL_C 0x0F
39 |
40 | /* POKEY READ LOGICALS */
41 | #define POT0_C 0x00
42 | #define POT1_C 0x01
43 | #define POT2_C 0x02
44 | #define POT3_C 0x03
45 | #define POT4_C 0x04
46 | #define POT5_C 0x05
47 | #define POT6_C 0x06
48 | #define POT7_C 0x07
49 | #define ALLPOT_C 0x08
50 | #define KBCODE_C 0x09
51 | #define RANDOM_C 0x0A
52 | #define SERIN_C 0x0D
53 | #define IRQST_C 0x0E
54 | #define SKSTAT_C 0x0F
55 |
56 | /* exact 1.79 MHz clock freq (of the Atari 800 that is) */
57 | #define FREQ_17_EXACT 1789790
58 |
59 |
60 | /*****************************************************************************
61 | * pot0_r to pot7_r:
62 | * Handlers for reading the pot values. Some Atari games use
63 | * ALLPOT to return dipswitch settings and other things.
64 | * serin_r, serout_w, interrupt_cb:
65 | * New function pointers for serial input/output and a interrupt callback.
66 | *****************************************************************************/
67 |
68 | /*typedef struct _pokey_interface pokey_interface;
69 | struct _pokey_interface
70 | {
71 | devcb_read8 pot_r[8];
72 | devcb_read8 allpot_r;
73 | devcb_read8 serin_r;
74 | devcb_write8 serout_w;
75 | void (*interrupt_cb)(device_t *device, int mask);
76 | };*/
77 |
78 |
79 | void pokey_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
80 | int device_start_pokey(UINT8 ChipID, int clock);
81 | void device_stop_pokey(UINT8 ChipID);
82 | void device_reset_pokey(UINT8 ChipID);
83 |
84 | //READ8_DEVICE_HANDLER( pokey_r );
85 | //WRITE8_DEVICE_HANDLER( pokey_w );
86 | UINT8 pokey_r(UINT8 ChipID, offs_t offset);
87 | void pokey_w(UINT8 ChipID, offs_t offset, UINT8 data);
88 |
89 | /* fix me: eventually this should be a single device with pokey subdevices */
90 | //READ8_HANDLER( quad_pokey_r );
91 | //WRITE8_HANDLER( quad_pokey_w );
92 |
93 | /*void pokey_serin_ready (device_t *device, int after);
94 | void pokey_break_w (device_t *device, int shift);
95 | void pokey_kbcode_w (device_t *device, int kbcode, int make);*/
96 |
97 | void pokey_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
98 |
99 | //DECLARE_LEGACY_SOUND_DEVICE(POKEY, pokey);
100 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ymdeltat.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #define YM_DELTAT_SHIFT (16)
4 |
5 | #define YM_DELTAT_EMULATION_MODE_NORMAL 0
6 | #define YM_DELTAT_EMULATION_MODE_YM2610 1
7 |
8 |
9 | typedef void (*STATUS_CHANGE_HANDLER)(void *chip, UINT8 status_bits);
10 |
11 |
12 | /* DELTA-T (adpcm type B) struct */
13 | typedef struct deltat_adpcm_state { /* AT: rearranged and tigntened structure */
14 | UINT8 *memory;
15 | INT32 *output_pointer;/* pointer of output pointers */
16 | INT32 *pan; /* pan : &output_pointer[pan] */
17 | double freqbase;
18 | #if 0
19 | double write_time; /* Y8950: 10 cycles of main clock; YM2608: 20 cycles of main clock */
20 | double read_time; /* Y8950: 8 cycles of main clock; YM2608: 18 cycles of main clock */
21 | #endif
22 | UINT32 memory_size;
23 | UINT32 memory_mask;
24 | int output_range;
25 | UINT32 now_addr; /* current address */
26 | UINT32 now_step; /* currect step */
27 | UINT32 step; /* step */
28 | UINT32 start; /* start address */
29 | UINT32 limit; /* limit address */
30 | UINT32 end; /* end address */
31 | UINT32 delta; /* delta scale */
32 | INT32 volume; /* current volume */
33 | INT32 acc; /* shift Measurement value*/
34 | INT32 adpcmd; /* next Forecast */
35 | INT32 adpcml; /* current value */
36 | INT32 prev_acc; /* leveling value */
37 | UINT8 now_data; /* current rom data */
38 | UINT8 CPU_data; /* current data from reg 08 */
39 | UINT8 portstate; /* port status */
40 | UINT8 control2; /* control reg: SAMPLE, DA/AD, RAM TYPE (x8bit / x1bit), ROM/RAM */
41 | UINT8 portshift; /* address bits shift-left:
42 | ** 8 for YM2610,
43 | ** 5 for Y8950 and YM2608 */
44 |
45 | UINT8 DRAMportshift; /* address bits shift-right:
46 | ** 0 for ROM and x8bit DRAMs,
47 | ** 3 for x1 DRAMs */
48 |
49 | UINT8 memread; /* needed for reading/writing external memory */
50 |
51 | /* handlers and parameters for the status flags support */
52 | STATUS_CHANGE_HANDLER status_set_handler;
53 | STATUS_CHANGE_HANDLER status_reset_handler;
54 |
55 | /* note that different chips have these flags on different
56 | ** bits of the status register
57 | */
58 | void * status_change_which_chip; /* this chip id */
59 | UINT8 status_change_EOS_bit; /* 1 on End Of Sample (record/playback/cycle time of AD/DA converting has passed)*/
60 | UINT8 status_change_BRDY_bit; /* 1 after recording 2 datas (2x4bits) or after reading/writing 1 data */
61 | UINT8 status_change_ZERO_bit; /* 1 if silence lasts for more than 290 miliseconds on ADPCM recording */
62 |
63 | /* neither Y8950 nor YM2608 can generate IRQ when PCMBSY bit changes, so instead of above,
64 | ** the statusflag gets ORed with PCM_BSY (below) (on each read of statusflag of Y8950 and YM2608)
65 | */
66 | UINT8 PCM_BSY; /* 1 when ADPCM is playing; Y8950/YM2608 only */
67 |
68 | UINT8 reg[16]; /* adpcm registers */
69 | UINT8 emulation_mode; /* which chip we're emulating */
70 | }YM_DELTAT;
71 |
72 | /*void YM_DELTAT_BRDY_callback(YM_DELTAT *DELTAT);*/
73 |
74 | UINT8 YM_DELTAT_ADPCM_Read(YM_DELTAT *DELTAT);
75 | void YM_DELTAT_ADPCM_Write(YM_DELTAT *DELTAT,int r,int v);
76 | void YM_DELTAT_ADPCM_Reset(YM_DELTAT *DELTAT,int pan,int emulation_mode);
77 | void YM_DELTAT_ADPCM_CALC(YM_DELTAT *DELTAT);
78 |
79 | /*void YM_DELTAT_postload(YM_DELTAT *DELTAT,UINT8 *regs);
80 | //void YM_DELTAT_savestate(const device_config *device,YM_DELTAT *DELTAT);
81 | void YM_DELTAT_savestate(YM_DELTAT *DELTAT);*/
82 |
83 | void YM_DELTAT_calc_mem_mask(YM_DELTAT* DELTAT);
--------------------------------------------------------------------------------
/VGMPlay/VGMFile.h:
--------------------------------------------------------------------------------
1 | // Header file for VGM file handling
2 |
3 | typedef struct _vgm_file_header
4 | {
5 | UINT32 fccVGM;
6 | UINT32 lngEOFOffset;
7 | UINT32 lngVersion;
8 | UINT32 lngHzPSG;
9 | UINT32 lngHzYM2413;
10 | UINT32 lngGD3Offset;
11 | UINT32 lngTotalSamples;
12 | UINT32 lngLoopOffset;
13 | UINT32 lngLoopSamples;
14 | UINT32 lngRate;
15 | UINT16 shtPSG_Feedback;
16 | UINT8 bytPSG_SRWidth;
17 | UINT8 bytPSG_Flags;
18 | UINT32 lngHzYM2612;
19 | UINT32 lngHzYM2151;
20 | UINT32 lngDataOffset;
21 | UINT32 lngHzSPCM;
22 | UINT32 lngSPCMIntf;
23 | UINT32 lngHzRF5C68;
24 | UINT32 lngHzYM2203;
25 | UINT32 lngHzYM2608;
26 | UINT32 lngHzYM2610;
27 | UINT32 lngHzYM3812;
28 | UINT32 lngHzYM3526;
29 | UINT32 lngHzY8950;
30 | UINT32 lngHzYMF262;
31 | UINT32 lngHzYMF278B;
32 | UINT32 lngHzYMF271;
33 | UINT32 lngHzYMZ280B;
34 | UINT32 lngHzRF5C164;
35 | UINT32 lngHzPWM;
36 | UINT32 lngHzAY8910;
37 | UINT8 bytAYType;
38 | UINT8 bytAYFlag;
39 | UINT8 bytAYFlagYM2203;
40 | UINT8 bytAYFlagYM2608;
41 | UINT8 bytVolumeModifier;
42 | UINT8 bytReserved2;
43 | INT8 bytLoopBase;
44 | UINT8 bytLoopModifier;
45 | UINT32 lngHzGBDMG;
46 | UINT32 lngHzNESAPU;
47 | UINT32 lngHzMultiPCM;
48 | UINT32 lngHzUPD7759;
49 | UINT32 lngHzOKIM6258;
50 | UINT8 bytOKI6258Flags;
51 | UINT8 bytK054539Flags;
52 | UINT8 bytC140Type;
53 | UINT8 bytReservedFlags;
54 | UINT32 lngHzOKIM6295;
55 | UINT32 lngHzK051649;
56 | UINT32 lngHzK054539;
57 | UINT32 lngHzHuC6280;
58 | UINT32 lngHzC140;
59 | UINT32 lngHzK053260;
60 | UINT32 lngHzPokey;
61 | UINT32 lngHzQSound;
62 | UINT32 lngHzSCSP;
63 | // UINT32 lngHzOKIM6376;
64 | //UINT8 bytReserved[0x04];
65 | UINT32 lngExtraOffset;
66 | UINT32 lngHzWSwan;
67 | UINT32 lngHzVSU;
68 | UINT32 lngHzSAA1099;
69 | UINT32 lngHzES5503;
70 | UINT32 lngHzES5506;
71 | UINT8 bytES5503Chns;
72 | UINT8 bytES5506Chns;
73 | UINT8 bytC352ClkDiv;
74 | UINT8 bytESReserved;
75 | UINT32 lngHzX1_010;
76 | UINT32 lngHzC352;
77 | UINT32 lngHzGA20;
78 | } VGM_HEADER;
79 | typedef struct _vgm_header_extra
80 | {
81 | UINT32 DataSize;
82 | UINT32 Chp2ClkOffset;
83 | UINT32 ChpVolOffset;
84 | } VGM_HDR_EXTRA;
85 | typedef struct _vgm_extra_chip_data32
86 | {
87 | UINT8 Type;
88 | UINT32 Data;
89 | } VGMX_CHIP_DATA32;
90 | typedef struct _vgm_extra_chip_data16
91 | {
92 | UINT8 Type;
93 | UINT8 Flags;
94 | UINT16 Data;
95 | } VGMX_CHIP_DATA16;
96 | typedef struct _vgm_extra_chip_extra32
97 | {
98 | UINT8 ChipCnt;
99 | VGMX_CHIP_DATA32* CCData;
100 | } VGMX_CHP_EXTRA32;
101 | typedef struct _vgm_extra_chip_extra16
102 | {
103 | UINT8 ChipCnt;
104 | VGMX_CHIP_DATA16* CCData;
105 | } VGMX_CHP_EXTRA16;
106 | typedef struct _vgm_header_extra_data
107 | {
108 | VGMX_CHP_EXTRA32 Clocks;
109 | VGMX_CHP_EXTRA16 Volumes;
110 | } VGM_EXTRA;
111 |
112 | #define VOLUME_MODIF_WRAP 0xC0
113 | typedef struct _vgm_gd3_tag
114 | {
115 | UINT32 fccGD3;
116 | UINT32 lngVersion;
117 | UINT32 lngTagLength;
118 | wchar_t* strTrackNameE;
119 | wchar_t* strTrackNameJ;
120 | wchar_t* strGameNameE;
121 | wchar_t* strGameNameJ;
122 | wchar_t* strSystemNameE;
123 | wchar_t* strSystemNameJ;
124 | wchar_t* strAuthorNameE;
125 | wchar_t* strAuthorNameJ;
126 | wchar_t* strReleaseDate;
127 | wchar_t* strCreator;
128 | wchar_t* strNotes;
129 | } GD3_TAG;
130 | typedef struct _vgm_pcm_bank_data
131 | {
132 | UINT32 DataSize;
133 | UINT8* Data;
134 | UINT32 DataStart;
135 | } VGM_PCM_DATA;
136 | typedef struct _vgm_pcm_bank
137 | {
138 | UINT32 BankCount;
139 | VGM_PCM_DATA* Bank;
140 | UINT32 DataSize;
141 | UINT8* Data;
142 | UINT32 DataPos;
143 | UINT32 BnkPos;
144 | } VGM_PCM_BANK;
145 |
146 | #define FCC_VGM 0x206D6756 // 'Vgm '
147 | #define FCC_GD3 0x20336447 // 'Gd3 '
148 |
--------------------------------------------------------------------------------
/VGMPlay/chips/c6280intf.c:
--------------------------------------------------------------------------------
1 | #include // for NULL
2 | #include "mamedef.h"
3 | #ifdef ENABLE_ALL_CORES
4 | #include "c6280.h"
5 | #endif
6 | #include "Ootake_PSG.h"
7 |
8 | #ifdef ENABLE_ALL_CORES
9 | #define EC_MAME 0x01
10 | #endif
11 | #define EC_OOTAKE 0x00
12 |
13 | typedef struct _c6280_state
14 | {
15 | void* chip;
16 | } c6280_state;
17 |
18 | extern UINT32 SampleRate;
19 | extern UINT8 CHIP_SAMPLING_MODE;
20 | extern INT32 CHIP_SAMPLE_RATE;
21 | static UINT8 EMU_CORE = 0x00;
22 |
23 | #define MAX_CHIPS 0x02
24 | static c6280_state C6280Data[MAX_CHIPS];
25 |
26 | void c6280_update(UINT8 ChipID, stream_sample_t **outputs, int samples)
27 | {
28 | c6280_state* info = &C6280Data[ChipID];
29 | switch(EMU_CORE)
30 | {
31 | #ifdef ENABLE_ALL_CORES
32 | case EC_MAME:
33 | c6280m_update(info->chip, outputs, samples);
34 | break;
35 | #endif
36 | case EC_OOTAKE:
37 | PSG_Mix(info->chip, outputs, samples);
38 | break;
39 | }
40 | }
41 |
42 | int device_start_c6280(UINT8 ChipID, int clock)
43 | {
44 | c6280_state* info;
45 | int rate = 0;
46 |
47 | if (ChipID >= MAX_CHIPS)
48 | return 0;
49 |
50 | info = &C6280Data[ChipID];
51 | switch(EMU_CORE)
52 | {
53 | #ifdef ENABLE_ALL_CORES
54 | case EC_MAME:
55 | rate = (clock & 0x7FFFFFFF)/16;
56 | if (((CHIP_SAMPLING_MODE & 0x01) && rate < CHIP_SAMPLE_RATE) ||
57 | CHIP_SAMPLING_MODE == 0x02)
58 | rate = CHIP_SAMPLE_RATE;
59 |
60 | info->chip = device_start_c6280m(clock, rate);
61 | if (info->chip == NULL)
62 | return 0;
63 | break;
64 | #endif
65 | case EC_OOTAKE:
66 | rate = SampleRate;
67 | info->chip = PSG_Init(clock, rate);
68 | if (info->chip == NULL)
69 | return 0;
70 | break;
71 | }
72 |
73 | return rate;
74 | }
75 |
76 | void device_stop_c6280(UINT8 ChipID)
77 | {
78 | c6280_state* info = &C6280Data[ChipID];
79 | switch(EMU_CORE)
80 | {
81 | #ifdef ENABLE_ALL_CORES
82 | case EC_MAME:
83 | device_stop_c6280m(info->chip);
84 | break;
85 | #endif
86 | case EC_OOTAKE:
87 | PSG_Deinit(info->chip);
88 | break;
89 | }
90 | info->chip = NULL;
91 |
92 | return;
93 | }
94 |
95 | void device_reset_c6280(UINT8 ChipID)
96 | {
97 | c6280_state* info = &C6280Data[ChipID];
98 | switch(EMU_CORE)
99 | {
100 | #ifdef ENABLE_ALL_CORES
101 | case EC_MAME:
102 | device_reset_c6280m(info->chip);
103 | break;
104 | #endif
105 | case EC_OOTAKE:
106 | PSG_ResetVolumeReg(info->chip);
107 | break;
108 | }
109 | return;
110 | }
111 |
112 | UINT8 c6280_r(UINT8 ChipID, offs_t offset)
113 | {
114 | c6280_state* info = &C6280Data[ChipID];
115 | switch(EMU_CORE)
116 | {
117 | #ifdef ENABLE_ALL_CORES
118 | case EC_MAME:
119 | return c6280m_r(info->chip, offset);
120 | #endif
121 | case EC_OOTAKE:
122 | return PSG_Read(info->chip, offset);
123 | default:
124 | return 0x00;
125 | }
126 | }
127 |
128 | void c6280_w(UINT8 ChipID, offs_t offset, UINT8 data)
129 | {
130 | c6280_state* info = &C6280Data[ChipID];
131 | switch(EMU_CORE)
132 | {
133 | #ifdef ENABLE_ALL_CORES
134 | case EC_MAME:
135 | c6280m_w(info->chip, offset, data);
136 | break;
137 | #endif
138 | case EC_OOTAKE:
139 | PSG_Write(info->chip, offset, data);
140 | break;
141 | }
142 |
143 | return;
144 | }
145 |
146 |
147 | void c6280_set_emu_core(UINT8 Emulator)
148 | {
149 | #ifdef ENABLE_ALL_CORES
150 | EMU_CORE = (Emulator < 0x02) ? Emulator : 0x00;
151 | #else
152 | EMU_CORE = EC_OOTAKE;
153 | #endif
154 |
155 | return;
156 | }
157 |
158 | void c6280_set_mute_mask(UINT8 ChipID, UINT32 MuteMask)
159 | {
160 | c6280_state* info = &C6280Data[ChipID];
161 | switch(EMU_CORE)
162 | {
163 | #ifdef ENABLE_ALL_CORES
164 | case EC_MAME:
165 | c6280m_set_mute_mask(info->chip, MuteMask);
166 | break;
167 | #endif
168 | case EC_OOTAKE:
169 | PSG_SetMuteMask(info->chip, MuteMask);
170 | break;
171 | }
172 |
173 | return;
174 | }
175 |
--------------------------------------------------------------------------------
/VGMPlay/chips/sn76489.h:
--------------------------------------------------------------------------------
1 | #ifndef _SN76489_H_
2 | #define _SN76489_H_
3 |
4 | // all these defines are defined in mamedef.h, but GCC's #ifdef doesn't seem to know typedefs
5 | /*#ifndef INT32
6 | #define INT32 signed long
7 | #endif
8 | #ifndef UINT16
9 | #define UINT16 unsigned short
10 | #endif
11 | #ifndef INT16
12 | #define INT16 signed short
13 | #endif
14 | #ifndef INT8
15 | #define INT8 signed char
16 | #endif*/
17 | #ifndef uint8
18 | #define uint8 signed char
19 | #endif
20 |
21 |
22 | /*#define MAX_SN76489 4*/
23 |
24 | /*
25 | More testing is needed to find and confirm feedback patterns for
26 | SN76489 variants and compatible chips.
27 | */
28 | enum feedback_patterns {
29 | FB_BBCMICRO = 0x8005, /* Texas Instruments TMS SN76489N (original) from BBC Micro computer */
30 | FB_SC3000 = 0x0006, /* Texas Instruments TMS SN76489AN (rev. A) from SC-3000H computer */
31 | FB_SEGAVDP = 0x0009, /* SN76489 clone in Sega's VDP chips (315-5124, 315-5246, 315-5313, Game Gear) */
32 | };
33 |
34 | enum sr_widths {
35 | SRW_SC3000BBCMICRO = 15,
36 | SRW_SEGAVDP = 16
37 | };
38 |
39 | enum volume_modes {
40 | VOL_TRUNC = 0, /* Volume levels 13-15 are identical */
41 | VOL_FULL = 1, /* Volume levels 13-15 are unique */
42 | };
43 |
44 | enum mute_values {
45 | MUTE_ALLOFF = 0, /* All channels muted */
46 | MUTE_TONE1 = 1, /* Tone 1 mute control */
47 | MUTE_TONE2 = 2, /* Tone 2 mute control */
48 | MUTE_TONE3 = 4, /* Tone 3 mute control */
49 | MUTE_NOISE = 8, /* Noise mute control */
50 | MUTE_ALLON = 15, /* All channels enabled */
51 | };
52 |
53 | typedef struct
54 | {
55 | int Mute; // per-channel muting
56 | int BoostNoise; // double noise volume when non-zero
57 |
58 | /* Variables */
59 | float Clock;
60 | float dClock;
61 | int PSGStereo;
62 | int NumClocksForSample;
63 | int WhiteNoiseFeedback;
64 | int SRWidth;
65 |
66 | /* PSG registers: */
67 | int Registers[8]; /* Tone, vol x4 */
68 | int LatchedRegister;
69 | int NoiseShiftRegister;
70 | int NoiseFreq; /* Noise channel signal generator frequency */
71 |
72 | /* Output calculation variables */
73 | int ToneFreqVals[4]; /* Frequency register values (counters) */
74 | int ToneFreqPos[4]; /* Frequency channel flip-flops */
75 | int Channels[4]; /* Value of each channel, before stereo is applied */
76 | float IntermediatePos[4]; /* intermediate values used at boundaries between + and - (does not need double accuracy)*/
77 |
78 | float panning[4][2]; /* fake stereo */
79 |
80 | int NgpFlags; /* bit 7 - NGP Mode on/off, bit 0 - is 2nd NGP chip */
81 | void* NgpChip2;
82 | } SN76489_Context;
83 |
84 | /* Function prototypes */
85 | SN76489_Context* SN76489_Init(int PSGClockValue, int SamplingRate);
86 | void SN76489_Reset(SN76489_Context* chip);
87 | void SN76489_Shutdown(SN76489_Context* chip);
88 | void SN76489_Config(SN76489_Context* chip, /*int mute,*/ int feedback, int sw_width, int boost_noise);
89 | /*
90 | void SN76489_SetContext(SN76489_Context* chip, uint8 *data);
91 | void SN76489_GetContext(SN76489_Context* chip, uint8 *data);
92 | uint8 *SN76489_GetContextPtr(int chip);
93 | int SN76489_GetContextSize(void);*/
94 | void SN76489_Write(SN76489_Context* chip, int data);
95 | void SN76489_GGStereoWrite(SN76489_Context* chip, int data);
96 | //void SN76489_Update(SN76489_Context* chip, INT16 **buffer, int length);
97 | void SN76489_Update(SN76489_Context* chip, INT32 **buffer, int length);
98 |
99 | /* Non-standard getters and setters */
100 | //int SN76489_GetMute(SN76489_Context* chip);
101 | void SN76489_SetMute(SN76489_Context* chip, int val);
102 |
103 | void SN76489_SetPanning(SN76489_Context* chip, int ch0, int ch1, int ch2, int ch3);
104 |
105 | /* and a non-standard data getter */
106 | //void SN76489_UpdateOne(SN76489_Context* chip, int *l, int *r);
107 |
108 | #endif /* _SN76489_H_ */
109 |
--------------------------------------------------------------------------------
/VGMPlay/chips/scsplfo.c:
--------------------------------------------------------------------------------
1 | /*
2 | SCSP LFO handling
3 |
4 | Part of the SCSP (YMF292-F) emulator package.
5 | (not compiled directly, #included from scsp.c)
6 |
7 | By ElSemi
8 | MAME/M1 conversion and cleanup by R. Belmont
9 | */
10 |
11 | #define LFO_SHIFT 8
12 |
13 | struct _LFO
14 | {
15 | unsigned short phase;
16 | UINT32 phase_step;
17 | int *table;
18 | int *scale;
19 | };
20 |
21 | #define LFIX(v) ((unsigned int) ((float) (1<phase+=LFO->phase_step;
119 | #if LFO_SHIFT!=8
120 | LFO->phase&=(1<<(LFO_SHIFT+8))-1;
121 | #endif
122 | p=LFO->table[LFO->phase>>LFO_SHIFT];
123 | p=LFO->scale[p+128];
124 | return p<<(SHIFT-LFO_SHIFT);
125 | }
126 |
127 | INLINE signed int ALFO_Step(struct _LFO *LFO)
128 | {
129 | int p;
130 | LFO->phase+=LFO->phase_step;
131 | #if LFO_SHIFT!=8
132 | LFO->phase&=(1<<(LFO_SHIFT+8))-1;
133 | #endif
134 | p=LFO->table[LFO->phase>>LFO_SHIFT];
135 | p=LFO->scale[p];
136 | return p<<(SHIFT-LFO_SHIFT);
137 | }
138 |
139 | static void LFO_ComputeStep(struct _LFO *LFO,UINT32 LFOF,UINT32 LFOWS,UINT32 LFOS,int ALFO)
140 | {
141 | float step=(float) LFOFreq[LFOF]*256.0/(float)44100;
142 | LFO->phase_step=(unsigned int) ((float) (1<table=ALFO_SAW; break;
148 | case 1: LFO->table=ALFO_SQR; break;
149 | case 2: LFO->table=ALFO_TRI; break;
150 | case 3: LFO->table=ALFO_NOI; break;
151 | }
152 | LFO->scale=ASCALES[LFOS];
153 | }
154 | else
155 | {
156 | switch(LFOWS)
157 | {
158 | case 0: LFO->table=PLFO_SAW; break;
159 | case 1: LFO->table=PLFO_SQR; break;
160 | case 2: LFO->table=PLFO_TRI; break;
161 | case 3: LFO->table=PLFO_NOI; break;
162 | }
163 | LFO->scale=PSCALES[LFOS];
164 | }
165 | }
166 |
--------------------------------------------------------------------------------
/VGMPlay/vgm2pcm.c:
--------------------------------------------------------------------------------
1 | #define _GNU_SOURCE
2 | #include
3 | #include
4 | #include
5 | #include
6 |
7 | #ifdef WIN32
8 | #include
9 | #else
10 | #include
11 | #define MAX_PATH PATH_MAX
12 | #include
13 | #include
14 | #endif
15 |
16 | #ifdef WIN32
17 | #define DIR_CHR '\\'
18 | #define DIR_STR "\\"
19 | #define QMARK_CHR '\"'
20 | #else
21 | #define DIR_CHR '/'
22 | #define DIR_STR "/"
23 | #define QMARK_CHR '\''
24 | #endif
25 |
26 | #include "chips/mamedef.h"
27 | #include "stdbool.h"
28 | #include "VGMPlay.h"
29 | #include "VGMPlay_Intf.h"
30 |
31 | #define SAMPLESIZE sizeof(WAVE_16BS)
32 |
33 | UINT8 CmdList[0x100]; // used by VGMPlay.c and VGMPlay_AddFmts.c
34 | bool ErrorHappened; // used by VGMPlay.c and VGMPlay_AddFmts.c
35 | extern VGM_HEADER VGMHead;
36 | extern UINT32 SampleRate;
37 | extern UINT32 VGMMaxLoopM;
38 | extern UINT32 FadeTime;
39 | extern bool EndPlay;
40 | extern char *AppPaths[8];
41 | static char AppPathBuffer[MAX_PATH * 2];
42 |
43 | static char* GetAppFileName(void)
44 | {
45 | char* AppPath;
46 | int RetVal;
47 |
48 | AppPath = (char*)malloc(MAX_PATH * sizeof(char));
49 | #ifdef WIN32
50 | RetVal = GetModuleFileName(NULL, AppPath, MAX_PATH);
51 | if (! RetVal)
52 | AppPath[0] = '\0';
53 | #else
54 | RetVal = readlink("/proc/self/exe", AppPath, MAX_PATH);
55 | if (RetVal == -1)
56 | AppPath[0] = '\0';
57 | #endif
58 |
59 | return AppPath;
60 | }
61 |
62 | INLINE int fputBE16(UINT16 Value, FILE* hFile)
63 | {
64 | int RetVal;
65 | int ResVal;
66 |
67 | RetVal = fputc((Value & 0xFF00) >> 8, hFile);
68 | RetVal = fputc((Value & 0x00FF) >> 0, hFile);
69 | ResVal = (RetVal != EOF) ? 0x02 : 0x00;
70 | return ResVal;
71 | }
72 |
73 | int main(int argc, char *argv[]) {
74 | UINT8 result;
75 | WAVE_16BS *sampleBuffer;
76 | UINT32 bufferedLength;
77 | FILE *outputFile;
78 | char *AppName;
79 | char* AppPathPtr;
80 | const char *StrPtr;
81 | UINT8 CurPath;
82 | UINT32 ChrPos;
83 |
84 | if (argc < 3) {
85 | fputs("usage: vgm2pcm vgm_file pcm_file\n", stderr);
86 | return 1;
87 | }
88 |
89 | VGMPlay_Init();
90 | // Path 2: exe's directory
91 | AppPathPtr = AppPathBuffer;
92 | AppName = GetAppFileName(); // "C:\VGMPlay\VGMPlay.exe"
93 | // Note: GetAppFileName always returns native directory separators.
94 | StrPtr = strrchr(AppName, DIR_CHR);
95 | if (StrPtr != NULL)
96 | {
97 | ChrPos = StrPtr + 1 - AppName;
98 | strncpy(AppPathPtr, AppName, ChrPos);
99 | AppPathPtr[ChrPos] = 0x00; // "C:\VGMPlay\"
100 | AppPaths[CurPath] = AppPathPtr;
101 | CurPath ++;
102 | AppPathPtr += ChrPos + 1;
103 | }
104 | VGMPlay_Init2();
105 |
106 | if (!OpenVGMFile(argv[1])) {
107 | fprintf(stderr, "vgm2pcm: error: failed to open vgm_file (%s)\n", argv[1]);
108 | return 1;
109 | }
110 |
111 | if(!strcmp(argv[2], "-")) {
112 | outputFile = stdout;
113 | } else {
114 | outputFile = fopen(argv[2], "wb");
115 | if (outputFile == NULL) {
116 | fprintf(stderr, "vgm2pcm: error: failed to open pcm_file (%s)\n", argv[2]);
117 | return 1;
118 | }
119 | }
120 |
121 | PlayVGM();
122 |
123 | sampleBuffer = (WAVE_16BS*)malloc(SAMPLESIZE * SampleRate);
124 | if (sampleBuffer == NULL) {
125 | fprintf(stderr, "vgm2pcm: error: failed to allocate %lu bytes of memory\n", SAMPLESIZE * SampleRate);
126 | return 1;
127 | }
128 |
129 | while (!EndPlay) {
130 | UINT32 bufferSize = SampleRate;
131 | bufferedLength = FillBuffer(sampleBuffer, bufferSize);
132 | if (bufferedLength) {
133 | UINT32 numberOfSamples;
134 | UINT32 currentSample;
135 | const UINT16* sampleData;
136 |
137 | sampleData = (UINT16*)sampleBuffer;
138 | numberOfSamples = SAMPLESIZE * bufferedLength / 0x02;
139 | for (currentSample = 0x00; currentSample < numberOfSamples; currentSample++) {
140 | fputBE16(sampleData[currentSample], outputFile);
141 | }
142 | }
143 | }
144 |
145 | StopVGM();
146 |
147 | CloseVGMFile();
148 |
149 | VGMPlay_Deinit();
150 |
151 | return 0;
152 | }
153 |
--------------------------------------------------------------------------------
/VGMPlay/vgmplay.1:
--------------------------------------------------------------------------------
1 | .TH vgmplay "1" "November 10" "Valley Bell" "User Commands"
2 | .nh
3 | .SH NAME
4 | vgmplay \- the official and always up-to-date player for all VGM files
5 | .SH SYNOPSIS
6 | \fBvgmplay\fP file
7 | .SH KEYS
8 | Cursor Left/Right - Seek 5 seconds backward/forward
9 | .PP
10 | Ctrl + Cursor Left/Right - Seek 1 minute backward/forward
11 | .PP
12 | Space - Pause
13 | .PP
14 | ESC/Q - Quit the program
15 | .PP
16 | F - Fade out
17 | .PP
18 | R - Restart current Track
19 | .PP
20 | PageUp/B - Previous Track
21 | .PP
22 | PageDown/N - Next Track
23 | .SH SUPPORTED FILETYPES
24 | Video Game Music Files (.vgm, .vgz)
25 | .PP
26 | Creative Music Files (.cmf)
27 | .PP
28 | DosBox RAW OPL Log Files (.dro)
29 | .PP
30 | Playlist files (.m3u)
31 | .SH SUPPORTED CHIPS
32 | .PP
33 | SN76496 (2) (Sega PSG) and T6W28 (2) (NeoGeo Pocket custom)
34 | .PP
35 | YM2413 (1) (OPLL)
36 | .PP
37 | YM2612 (OPN2)
38 | .PP
39 | YM2151 (OPM)
40 | .PP
41 | SegaPCM
42 | .PP
43 | RF5C68
44 | .PP
45 | YM2203 (OPN)
46 | .PP
47 | YM2608 (OPNA)
48 | .PP
49 | YM2610/B (OPNB)
50 | .PP
51 | YM3812 (1) (OPL2)
52 | .PP
53 | YM3526 (1) (OPL)
54 | .PP
55 | Y8950 (1) (MSX AUDIO)
56 | .PP
57 | YMF262 (1) (OP3)
58 | .PP
59 | YMF278B (3) (OPL4)
60 | .PP
61 | YMF271 (OPLX)
62 | .PP
63 | YMZ280B
64 | .PP
65 | RF5C164 (Sega MegaCD PCM)
66 | .PP
67 | PWM (from Sega 32x)
68 | .PP
69 | AY8910 (MSX PSG)
70 | .PP
71 | GameBoy DMG
72 | .PP
73 | NES APU (incl. FDS)
74 | .PP
75 | MultiPCM
76 | .PP
77 | UPD7759
78 | .PP
79 | OKI6258 (Sharp X68000 ADPCM)
80 | .PP
81 | OKI6295
82 | .PP
83 | K051649
84 | .PP
85 | K054539
86 | .PP
87 | HuC6280 (PC Engine)
88 | .PP
89 | C140
90 | .PP
91 | K053260
92 | .PP
93 | Pokey (Atari)
94 | .PP
95 | QSound
96 | .PP
97 | SCSP (Saturn Custom Sound Processor, YMF292-F)
98 | .PP
99 | (1) This chip can be emulated via OPL Hardware (like Soundblaster sound cards).
100 | .PP
101 | (2) OPL hardware emulation is available, but software emulation is prefered. Hardware emulation is used if another chip activates HW emulation or FMForce is True.
102 | (3) You need a sample ROM, called yrw801.rom, to make playback work. Place it in the directory where vgmplay lies or in /usr/local/share/vgmplay/.
103 | .PP
104 | OPL hardware emulation can be enabled by setting the "FMPort"-entry in the ini-file.
105 | Under Linux the program must be run as root to use hardware FM.
106 | .PP
107 | It's possible to write Wave files by editing the "LogSound"-line in the ini-file.
108 | Batch conversions are possible by opening a playlist.
109 | FM hardware cannot be logged to Wave files.
110 | .SH CONFIGURATION
111 | vgmplay is configured in the file VGMPlay.ini, which should be located in $XDG_CONFIG_HOME/vgmplay (thus, by default ~/.config/vgmplay/VGMPlay.ini). A sample configuration /usr/share/vgmplay/VGMPlay.ini is available for copying and general reference.
112 | .SH BUGS
113 | PauseEmulation is disabled under Linux if no FM Hardware is used.
114 | .PP
115 | You have to double-tap ESC to quit the program.
116 | .PP
117 | Sometimes MAME's sound cores tend to sound strange.
118 | .SH COMMENTS
119 | The T6W28 doesn't use MAME's T6W28 core. Instead the SN76496 core is modified to emulate the T6W28 with 2 SN76496 chips.
120 | The SN76496 OPL emulation is okay, but it's impossible to get the noise sound right.
121 | .PP
122 | EMU2413 Emulator was added, because sometimes the one of MAME sounds strange.
123 | The Gens YM2612 core was added for the same reason before MAME's YM2612 core was fixed.
124 | .PP
125 | .SH AUTHORS
126 | This program was written by Valley Bell.
127 | .PP
128 | Almost all software emulators are from MAME (http://mamedev.org)
129 | .PP
130 | EMU2413 and Gens YM2612 were ported from Maxim's in_vgm
131 | .PP
132 | The YMF278B core was ported from openMSX
133 | .PP
134 | zlib compression by Jean-loup Gailly and Mark Adler is used
135 | .PP
136 | All custom OPL Mappers were written using MAME software emulators and the OPL2/3 programming guides by Jeffrey S. Lee and Vladimir Arnost
137 | .PP
138 | one YM2413 OPL Mapper was ported from MEKA.
139 | .PP
140 | The RF5C164 and PWM cores were ported from Gens/GS
141 | .PP
142 | The MAME YM2612 core was fixed with the help of Blargg's MAME YM2612 fix and Genesis Plus GX' YM2612 core
143 | .PP
144 | AdLibEmu (OPL2 and OPL3 core) was ported from DOSBox
145 | .PP
146 | The default HuC6280 core is from Ootake.
147 | .PP
148 | EMU2149, the alternative NES APU core and the NES FDS core were ported from rainwarrior's NSFPlay.
149 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ay_intf.c:
--------------------------------------------------------------------------------
1 | /****************************************************************
2 |
3 | MAME / MESS functions
4 |
5 | ****************************************************************/
6 |
7 | #include // for free
8 | #include // for memset
9 | #include // for NULL
10 | #include "mamedef.h"
11 | //#include "sndintrf.h"
12 | //#include "streams.h"
13 | #include "ay8910.h" // must be always included (for YM2149_PIN26_LOW)
14 | #include "emu2149.h"
15 | #include "ay_intf.h"
16 |
17 |
18 | #ifdef ENABLE_ALL_CORES
19 | #define EC_MAME 0x01 // AY8910 core from MAME
20 | #endif
21 | #define EC_EMU2149 0x00 // EMU2149 from NSFPlay
22 |
23 |
24 | /* for stream system */
25 | typedef struct _ayxx_state ayxx_state;
26 | struct _ayxx_state
27 | {
28 | void *chip;
29 | };
30 |
31 | extern UINT8 CHIP_SAMPLING_MODE;
32 | extern INT32 CHIP_SAMPLE_RATE;
33 | static UINT8 EMU_CORE = 0x00;
34 |
35 | extern UINT32 SampleRate;
36 | #define MAX_CHIPS 0x02
37 | static ayxx_state AYxxData[MAX_CHIPS];
38 |
39 | void ayxx_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples)
40 | {
41 | ayxx_state *info = &AYxxData[ChipID];
42 | switch(EMU_CORE)
43 | {
44 | #ifdef ENABLE_ALL_CORES
45 | case EC_MAME:
46 | ay8910_update_one(info->chip, outputs, samples);
47 | break;
48 | #endif
49 | case EC_EMU2149:
50 | PSG_calc_stereo((PSG*)info->chip, outputs, samples);
51 | break;
52 | }
53 | }
54 |
55 | int device_start_ayxx(UINT8 ChipID, int clock, UINT8 chip_type, UINT8 Flags)
56 | {
57 | ayxx_state *info;
58 | int rate;
59 |
60 | if (ChipID >= MAX_CHIPS)
61 | return 0;
62 |
63 | info = &AYxxData[ChipID];
64 | if (Flags & YM2149_PIN26_LOW)
65 | rate = clock / 16;
66 | else
67 | rate = clock / 8;
68 | if (((CHIP_SAMPLING_MODE & 0x01) && rate < CHIP_SAMPLE_RATE) ||
69 | CHIP_SAMPLING_MODE == 0x02)
70 | rate = CHIP_SAMPLE_RATE;
71 |
72 | switch(EMU_CORE)
73 | {
74 | #ifdef ENABLE_ALL_CORES
75 | case EC_MAME:
76 | rate = ay8910_start(&info->chip, clock, chip_type, Flags);
77 | break;
78 | #endif
79 | case EC_EMU2149:
80 | if (Flags & YM2149_PIN26_LOW)
81 | clock /= 2;
82 | info->chip = PSG_new(clock, rate);
83 | if (info->chip == NULL)
84 | return 0;
85 | PSG_setVolumeMode((PSG*)info->chip, (chip_type & 0x10) ? 1 : 2);
86 | PSG_setFlags((PSG*)info->chip, Flags & ~YM2149_PIN26_LOW);
87 | break;
88 | }
89 |
90 | return rate;
91 | }
92 |
93 | void device_stop_ayxx(UINT8 ChipID)
94 | {
95 | ayxx_state *info = &AYxxData[ChipID];
96 | switch(EMU_CORE)
97 | {
98 | #ifdef ENABLE_ALL_CORES
99 | case EC_MAME:
100 | ay8910_stop_ym(info->chip);
101 | break;
102 | #endif
103 | case EC_EMU2149:
104 | PSG_delete((PSG*)info->chip);
105 | break;
106 | }
107 | info->chip = NULL;
108 | }
109 |
110 | void device_reset_ayxx(UINT8 ChipID)
111 | {
112 | ayxx_state *info = &AYxxData[ChipID];
113 | switch(EMU_CORE)
114 | {
115 | #ifdef ENABLE_ALL_CORES
116 | case EC_MAME:
117 | ay8910_reset_ym(info->chip);
118 | break;
119 | #endif
120 | case EC_EMU2149:
121 | PSG_reset((PSG*)info->chip);
122 | break;
123 | }
124 | }
125 |
126 |
127 | void ayxx_w(UINT8 ChipID, offs_t offset, UINT8 data)
128 | {
129 | ayxx_state *info = &AYxxData[ChipID];
130 | switch(EMU_CORE)
131 | {
132 | #ifdef ENABLE_ALL_CORES
133 | case EC_MAME:
134 | ay8910_write_ym(info->chip, offset, data);
135 | break;
136 | #endif
137 | case EC_EMU2149:
138 | PSG_writeIO((PSG*)info->chip, offset, data);
139 | break;
140 | }
141 | }
142 |
143 | void ayxx_set_emu_core(UINT8 Emulator)
144 | {
145 | #ifdef ENABLE_ALL_CORES
146 | EMU_CORE = (Emulator < 0x02) ? Emulator : 0x00;
147 | #else
148 | EMU_CORE = EC_EMU2149;
149 | #endif
150 |
151 | return;
152 | }
153 |
154 | void ayxx_set_mute_mask(UINT8 ChipID, UINT32 MuteMask)
155 | {
156 | ayxx_state *info = &AYxxData[ChipID];
157 | switch(EMU_CORE)
158 | {
159 | #ifdef ENABLE_ALL_CORES
160 | case EC_MAME:
161 | ay8910_set_mute_mask_ym(info->chip, MuteMask);
162 | break;
163 | #endif
164 | case EC_EMU2149:
165 | PSG_setMask((PSG*)info->chip, MuteMask);
166 | break;
167 | }
168 |
169 | return;
170 | }
171 |
172 | void ayxx_set_stereo_mask(UINT8 ChipID, UINT32 StereoMask)
173 | {
174 | ayxx_state *info = &AYxxData[ChipID];
175 | switch(EMU_CORE)
176 | {
177 | #ifdef ENABLE_ALL_CORES
178 | case EC_MAME:
179 | ay8910_set_stereo_mask_ym(info->chip, StereoMask);
180 | break;
181 | #endif
182 | case EC_EMU2149:
183 | PSG_setStereoMask((PSG*)info->chip, StereoMask);
184 | break;
185 | }
186 |
187 | return;
188 | }
189 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ws_initialIo.h:
--------------------------------------------------------------------------------
1 | ////////////////////////////////////////////////////////////////////////////////
2 | // Initial I/O values
3 | ////////////////////////////////////////////////////////////////////////////////
4 | //
5 | //
6 | //
7 | //
8 | //
9 | //
10 | //////////////////////////////////////////////////////////////////////////////
11 |
12 | uint8 initialIoValue[256]=
13 | {
14 | 0x00,//0
15 | 0x00,//1
16 | 0x9d,//2
17 | 0xbb,//3
18 | 0x00,//4
19 | 0x00,//5
20 | 0x00,//6
21 | 0x26,//7
22 | 0xfe,//8
23 | 0xde,//9
24 | 0xf9,//a
25 | 0xfb,//b
26 | 0xdb,//c
27 | 0xd7,//d
28 | 0x7f,//e
29 | 0xf5,//f
30 | 0x00,//10
31 | 0x00,//11
32 | 0x00,//12
33 | 0x00,//13
34 | 0x01,//14
35 | 0x00,//15
36 | 0x9e,//16
37 | 0x9b,//17
38 | 0x00,//18
39 | 0x00,//19
40 | 0x00,//1a
41 | 0x00,//1b
42 | 0x99,//1c
43 | 0xfd,//1d
44 | 0xb7,//1e
45 | 0xdf,//1f
46 | 0x30,//20
47 | 0x57,//21
48 | 0x75,//22
49 | 0x76,//23
50 | 0x15,//24
51 | 0x73,//25
52 | 0x77,//26
53 | 0x77,//27
54 | 0x20,//28
55 | 0x75,//29
56 | 0x50,//2a
57 | 0x36,//2b
58 | 0x70,//2c
59 | 0x67,//2d
60 | 0x50,//2e
61 | 0x77,//2f
62 | 0x57,//30
63 | 0x54,//31
64 | 0x75,//32
65 | 0x77,//33
66 | 0x75,//34
67 | 0x17,//35
68 | 0x37,//36
69 | 0x73,//37
70 | 0x50,//38
71 | 0x57,//39
72 | 0x60,//3a
73 | 0x77,//3b
74 | 0x70,//3c
75 | 0x77,//3d
76 | 0x10,//3e
77 | 0x73,//3f
78 | 0x00,//40
79 | 0x00,//41
80 | 0x00,//42
81 | 0x00,//43
82 | 0x00,//44
83 | 0x00,//45
84 | 0x00,//46
85 | 0x00,//47
86 | 0x00,//48
87 | 0x00,//49
88 | 0x00,//4a
89 | 0x00,//4b
90 | 0x00,//4c
91 | 0x00,//4d
92 | 0x00,//4e
93 | 0x00,//4f
94 | 0x00,//50
95 | 0x00,//51
96 | 0x00,//52
97 | 0x00,//53
98 | 0x00,//54
99 | 0x00,//55
100 | 0x00,//56
101 | 0x00,//57
102 | 0x00,//58
103 | 0x00,//59
104 | 0x00,//5a
105 | 0x00,//5b
106 | 0x00,//5c
107 | 0x00,//5d
108 | 0x00,//5e
109 | 0x00,//5f
110 | 0x0a,//60
111 | 0x00,//61
112 | 0x00,//62
113 | 0x00,//63
114 | 0x00,//64
115 | 0x00,//65
116 | 0x00,//66
117 | 0x00,//67
118 | 0x00,//68
119 | 0x00,//69
120 | 0x00,//6a
121 | 0x0f,//6b
122 | 0x00,//6c
123 | 0x00,//6d
124 | 0x00,//6e
125 | 0x00,//6f
126 | 0x00,//70
127 | 0x00,//71
128 | 0x00,//72
129 | 0x00,//73
130 | 0x00,//74
131 | 0x00,//75
132 | 0x00,//76
133 | 0x00,//77
134 | 0x00,//78
135 | 0x00,//79
136 | 0x00,//7a
137 | 0x00,//7b
138 | 0x00,//7c
139 | 0x00,//7d
140 | 0x00,//7e
141 | 0x00,//7f
142 | 0xFF,//80
143 | 0x07,//81
144 | 0xFF,//82
145 | 0x07,//83
146 | 0xFF,//84
147 | 0x07,//85
148 | 0xFF,//86
149 | 0x07,//87
150 | 0x00,//88
151 | 0x00,//89
152 | 0x00,//8a
153 | 0x00,//8b
154 | 0x00,//8c
155 | 0x1f,//8d 1d ?
156 | 0x00,//8e
157 | 0x00,//8f
158 | 0x00,//90
159 | 0x00,//91
160 | 0x00,//92
161 | 0x00,//93
162 | 0x00,//94
163 | 0x00,//95
164 | 0x00,//96
165 | 0x00,//97
166 | 0x00,//98
167 | 0x00,//99
168 | 0x00,//9a
169 | 0x00,//9b
170 | 0x00,//9c
171 | 0x00,//9d
172 | 0x03,//9e
173 | 0x00,//9f
174 | 0x87-2,//a0
175 | 0x00,//a1
176 | 0x00,//a2
177 | 0x00,//a3
178 | 0x0,//a4 2b
179 | 0x0,//a5 7f
180 | 0x4f,//a6
181 | 0xff,//a7 cf ?
182 | 0x00,//a8
183 | 0x00,//a9
184 | 0x00,//aa
185 | 0x00,//ab
186 | 0x00,//ac
187 | 0x00,//ad
188 | 0x00,//ae
189 | 0x00,//af
190 | 0x00,//b0
191 | 0xdb,//b1
192 | 0x00,//b2
193 | 0x00,//b3
194 | 0x00,//b4
195 | 0x40,//b5
196 | 0x00,//b6
197 | 0x00,//b7
198 | 0x00,//b8
199 | 0x00,//b9
200 | 0x01,//ba
201 | 0x00,//bb
202 | 0x42,//bc
203 | 0x00,//bd
204 | 0x83,//be
205 | 0x00,//bf
206 | 0x2f,//c0
207 | 0x3f,//c1
208 | 0xff,//c2
209 | 0xff,//c3
210 | 0x00,//c4
211 | 0x00,//c5
212 | 0x00,//c6
213 | 0x00,//c7
214 |
215 | 0xd1,//c8?
216 | 0xd1,//c9
217 | 0xd1,//ca
218 | 0xd1,//cb
219 | 0xd1,//cc
220 | 0xd1,//cd
221 | 0xd1,//ce
222 | 0xd1,//cf
223 | 0xd1,//d0
224 | 0xd1,//d1
225 | 0xd1,//d2
226 | 0xd1,//d3
227 | 0xd1,//d4
228 | 0xd1,//d5
229 | 0xd1,//d6
230 | 0xd1,//d7
231 | 0xd1,//d8
232 | 0xd1,//d9
233 | 0xd1,//da
234 | 0xd1,//db
235 | 0xd1,//dc
236 | 0xd1,//dd
237 | 0xd1,//de
238 | 0xd1,//df
239 | 0xd1,//e0
240 | 0xd1,//e1
241 | 0xd1,//e2
242 | 0xd1,//e3
243 | 0xd1,//e4
244 | 0xd1,//e5
245 | 0xd1,//e6
246 | 0xd1,//e7
247 | 0xd1,//e8
248 | 0xd1,//e9
249 | 0xd1,//ea
250 | 0xd1,//eb
251 | 0xd1,//ec
252 | 0xd1,//ed
253 | 0xd1,//ee
254 | 0xd1,//ef
255 | 0xd1,//f0
256 | 0xd1,//f1
257 | 0xd1,//f2
258 | 0xd1,//f3
259 | 0xd1,//f4
260 | 0xd1,//f5
261 | 0xd1,//f6
262 | 0xd1,//f7
263 | 0xd1,//f8
264 | 0xd1,//f9
265 | 0xd1,//fa
266 | 0xd1,//fb
267 | 0xd1,//fc
268 | 0xd1,//fd
269 | 0xd1,//fe
270 | 0xd1 //ff
271 | };
272 |
--------------------------------------------------------------------------------
/VGMPlay/chips/fmopl.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //#include "attotime.h"
4 |
5 | /* --- select emulation chips --- */
6 | //#define BUILD_YM3812 (HAS_YM3812)
7 | //#define BUILD_YM3526 (HAS_YM3526)
8 | //#define BUILD_Y8950 (HAS_Y8950)
9 | #define BUILD_YM3812 1
10 | #define BUILD_YM3526 1
11 | #ifndef NO_Y8950
12 | #define BUILD_Y8950 1
13 | #else
14 | #define BUILD_Y8950 0
15 | #endif
16 |
17 | /* select output bits size of output : 8 or 16 */
18 | #define OPL_SAMPLE_BITS 16
19 |
20 | /* compiler dependence */
21 | /*#ifndef __OSDCOMM_H__
22 | #define __OSDCOMM_H__
23 | typedef unsigned char UINT8; // unsigned 8bit
24 | typedef unsigned short UINT16; // unsigned 16bit
25 | typedef unsigned int UINT32; // unsigned 32bit
26 | typedef signed char INT8; // signed 8bit
27 | typedef signed short INT16; // signed 16bit
28 | typedef signed int INT32; // signed 32bit
29 | #endif*/ /* __OSDCOMM_H__ */
30 |
31 | typedef stream_sample_t OPLSAMPLE;
32 | /*
33 | #if (OPL_SAMPLE_BITS==16)
34 | typedef INT16 OPLSAMPLE;
35 | #endif
36 | #if (OPL_SAMPLE_BITS==8)
37 | typedef INT8 OPLSAMPLE;
38 | #endif
39 | */
40 |
41 | //typedef void (*OPL_TIMERHANDLER)(void *param,int timer,attotime period);
42 | typedef void (*OPL_TIMERHANDLER)(void *param,int timer,int period);
43 | typedef void (*OPL_IRQHANDLER)(void *param,int irq);
44 | typedef void (*OPL_UPDATEHANDLER)(void *param/*,int min_interval_us*/);
45 | typedef void (*OPL_PORTHANDLER_W)(void *param,unsigned char data);
46 | typedef unsigned char (*OPL_PORTHANDLER_R)(void *param);
47 |
48 |
49 | #if BUILD_YM3812
50 |
51 | void *ym3812_init(UINT32 clock, UINT32 rate);
52 | void ym3812_shutdown(void *chip);
53 | void ym3812_reset_chip(void *chip);
54 | int ym3812_write(void *chip, int a, int v);
55 | unsigned char ym3812_read(void *chip, int a);
56 | int ym3812_timer_over(void *chip, int c);
57 | void ym3812_update_one(void *chip, OPLSAMPLE **buffer, int length);
58 |
59 | void ym3812_set_timer_handler(void *chip, OPL_TIMERHANDLER TimerHandler, void *param);
60 | void ym3812_set_irq_handler(void *chip, OPL_IRQHANDLER IRQHandler, void *param);
61 | void ym3812_set_update_handler(void *chip, OPL_UPDATEHANDLER UpdateHandler, void *param);
62 |
63 | #endif /* BUILD_YM3812 */
64 |
65 |
66 | #if BUILD_YM3526
67 |
68 | /*
69 | ** Initialize YM3526 emulator(s).
70 | **
71 | ** 'num' is the number of virtual YM3526's to allocate
72 | ** 'clock' is the chip clock in Hz
73 | ** 'rate' is sampling rate
74 | */
75 | void *ym3526_init(UINT32 clock, UINT32 rate);
76 | /* shutdown the YM3526 emulators*/
77 | void ym3526_shutdown(void *chip);
78 | void ym3526_reset_chip(void *chip);
79 | int ym3526_write(void *chip, int a, int v);
80 | unsigned char ym3526_read(void *chip, int a);
81 | int ym3526_timer_over(void *chip, int c);
82 | /*
83 | ** Generate samples for one of the YM3526's
84 | **
85 | ** 'which' is the virtual YM3526 number
86 | ** '*buffer' is the output buffer pointer
87 | ** 'length' is the number of samples that should be generated
88 | */
89 | void ym3526_update_one(void *chip, OPLSAMPLE **buffer, int length);
90 |
91 | void ym3526_set_timer_handler(void *chip, OPL_TIMERHANDLER TimerHandler, void *param);
92 | void ym3526_set_irq_handler(void *chip, OPL_IRQHANDLER IRQHandler, void *param);
93 | void ym3526_set_update_handler(void *chip, OPL_UPDATEHANDLER UpdateHandler, void *param);
94 |
95 | #endif /* BUILD_YM3526 */
96 |
97 |
98 | #if BUILD_Y8950
99 |
100 | /* Y8950 port handlers */
101 | void y8950_set_port_handler(void *chip, OPL_PORTHANDLER_W PortHandler_w, OPL_PORTHANDLER_R PortHandler_r, void *param);
102 | void y8950_set_keyboard_handler(void *chip, OPL_PORTHANDLER_W KeyboardHandler_w, OPL_PORTHANDLER_R KeyboardHandler_r, void *param);
103 | void y8950_set_delta_t_memory(void *chip, void * deltat_mem_ptr, int deltat_mem_size );
104 | void y8950_write_pcmrom(void *chip, offs_t ROMSize, offs_t DataStart,
105 | offs_t DataLength, const UINT8* ROMData);
106 |
107 | void * y8950_init(UINT32 clock, UINT32 rate);
108 | void y8950_shutdown(void *chip);
109 | void y8950_reset_chip(void *chip);
110 | int y8950_write(void *chip, int a, int v);
111 | unsigned char y8950_read (void *chip, int a);
112 | int y8950_timer_over(void *chip, int c);
113 | void y8950_update_one(void *chip, OPLSAMPLE **buffer, int length);
114 |
115 | void y8950_set_timer_handler(void *chip, OPL_TIMERHANDLER TimerHandler, void *param);
116 | void y8950_set_irq_handler(void *chip, OPL_IRQHANDLER IRQHandler, void *param);
117 | void y8950_set_update_handler(void *chip, OPL_UPDATEHANDLER UpdateHandler, void *param);
118 |
119 | #endif /* BUILD_Y8950 */
120 |
121 | void opl_set_mute_mask(void *chip, UINT32 MuteMask);
122 |
123 |
--------------------------------------------------------------------------------
/VGMPlay/chips/sn764intf.c:
--------------------------------------------------------------------------------
1 | /****************************************************************
2 |
3 | MAME / MESS functions
4 |
5 | ****************************************************************/
6 |
7 | #include // for NULL
8 | #include "mamedef.h"
9 | //#include "sndintrf.h"
10 | //#include "streams.h"
11 | #include "sn76496.h"
12 | #include "sn76489.h"
13 | #include "sn764intf.h"
14 |
15 |
16 | #define EC_MAME 0x00 // SN76496 core from MAME
17 | #ifdef ENABLE_ALL_CORES
18 | #define EC_MAXIM 0x01 // SN76489 core by Maxim (from in_vgm)
19 | #endif
20 |
21 | /* for stream system */
22 | typedef struct _sn764xx_state sn764xx_state;
23 | struct _sn764xx_state
24 | {
25 | void *chip;
26 | };
27 |
28 | static UINT8 EMU_CORE = 0x00;
29 |
30 | extern UINT32 SampleRate;
31 | #define MAX_CHIPS 0x02
32 | static sn764xx_state SN764xxData[MAX_CHIPS];
33 |
34 | void sn764xx_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples)
35 | {
36 | sn764xx_state *info = &SN764xxData[ChipID];
37 | switch(EMU_CORE)
38 | {
39 | case EC_MAME:
40 | SN76496Update(info->chip, outputs, samples);
41 | break;
42 | #ifdef ENABLE_ALL_CORES
43 | case EC_MAXIM:
44 | SN76489_Update((SN76489_Context*)info->chip, outputs, samples);
45 | break;
46 | #endif
47 | }
48 | }
49 |
50 | int device_start_sn764xx(UINT8 ChipID, int clock, int shiftregwidth, int noisetaps,
51 | int negate, int stereo, int clockdivider, int freq0)
52 | {
53 | sn764xx_state *info;
54 | int rate = 0;
55 |
56 | if (ChipID >= MAX_CHIPS)
57 | return 0;
58 |
59 | info = &SN764xxData[ChipID];
60 | /* emulator create */
61 | switch(EMU_CORE)
62 | {
63 | case EC_MAME:
64 | rate = sn76496_start(&info->chip, clock, shiftregwidth, noisetaps,
65 | negate, stereo, clockdivider, freq0);
66 | sn76496_freq_limiter(clock & 0x3FFFFFFF, clockdivider, SampleRate);
67 | break;
68 | #ifdef ENABLE_ALL_CORES
69 | case EC_MAXIM:
70 | rate = SampleRate;
71 | info->chip = SN76489_Init(clock, rate);
72 | if (info->chip == NULL)
73 | return 0;
74 | SN76489_Config((SN76489_Context*)info->chip, noisetaps, shiftregwidth, 0);
75 | break;
76 | #endif
77 | }
78 |
79 | return rate;
80 | }
81 |
82 | void device_stop_sn764xx(UINT8 ChipID)
83 | {
84 | sn764xx_state *info = &SN764xxData[ChipID];
85 | switch(EMU_CORE)
86 | {
87 | case EC_MAME:
88 | sn76496_shutdown(info->chip);
89 | break;
90 | #ifdef ENABLE_ALL_CORES
91 | case EC_MAXIM:
92 | SN76489_Shutdown((SN76489_Context*)info->chip);
93 | break;
94 | #endif
95 | }
96 | }
97 |
98 | void device_reset_sn764xx(UINT8 ChipID)
99 | {
100 | sn764xx_state *info = &SN764xxData[ChipID];
101 | switch(EMU_CORE)
102 | {
103 | case EC_MAME:
104 | sn76496_reset(info->chip);
105 | break;
106 | #ifdef ENABLE_ALL_CORES
107 | case EC_MAXIM:
108 | SN76489_Reset((SN76489_Context*)info->chip);
109 | break;
110 | #endif
111 | }
112 | }
113 |
114 |
115 | void sn764xx_w(UINT8 ChipID, offs_t offset, UINT8 data)
116 | {
117 | sn764xx_state *info = &SN764xxData[ChipID];
118 | switch(EMU_CORE)
119 | {
120 | case EC_MAME:
121 | switch(offset)
122 | {
123 | case 0x00:
124 | sn76496_write_reg(info->chip, offset & 1, data);
125 | break;
126 | case 0x01:
127 | sn76496_stereo_w(info->chip, offset, data);
128 | break;
129 | }
130 | break;
131 | #ifdef ENABLE_ALL_CORES
132 | case EC_MAXIM:
133 | switch(offset)
134 | {
135 | case 0x00:
136 | SN76489_Write((SN76489_Context*)info->chip, data);
137 | break;
138 | case 0x01:
139 | SN76489_GGStereoWrite((SN76489_Context*)info->chip, data);
140 | break;
141 | }
142 | break;
143 | #endif
144 | }
145 | }
146 |
147 | void sn764xx_set_emu_core(UINT8 Emulator)
148 | {
149 | #ifdef ENABLE_ALL_CORES
150 | EMU_CORE = (Emulator < 0x02) ? Emulator : 0x00;
151 | #else
152 | EMU_CORE = EC_MAME;
153 | #endif
154 |
155 | return;
156 | }
157 |
158 | void sn764xx_set_mute_mask(UINT8 ChipID, UINT32 MuteMask)
159 | {
160 | sn764xx_state *info = &SN764xxData[ChipID];
161 | switch(EMU_CORE)
162 | {
163 | case EC_MAME:
164 | sn76496_set_mutemask(info->chip, MuteMask);
165 | break;
166 | #ifdef ENABLE_ALL_CORES
167 | case EC_MAXIM:
168 | SN76489_SetMute(info->chip, ~MuteMask & 0x0F);
169 | break;
170 | #endif
171 | }
172 |
173 | return;
174 | }
175 |
176 | void sn764xx_set_panning(UINT8 ChipID, INT16* PanVals)
177 | {
178 | sn764xx_state *info = &SN764xxData[ChipID];
179 | switch(EMU_CORE)
180 | {
181 | case EC_MAME:
182 | break;
183 | #ifdef ENABLE_ALL_CORES
184 | case EC_MAXIM:
185 | SN76489_SetPanning(info->chip, PanVals[0x00], PanVals[0x01], PanVals[0x02], PanVals[0x03]);
186 | break;
187 | #endif
188 | }
189 |
190 | return;
191 | }
192 |
--------------------------------------------------------------------------------
/VGMPlay/chips/ay8910.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | //#include "devcb.h"
4 | #define DEVCB_TYPE_NULL (0)
5 | #define DEVCB_NULL { DEVCB_TYPE_NULL }
6 |
7 | /*
8 | AY-3-8910A: 2 I/O ports
9 | AY-3-8912A: 1 I/O port
10 | AY-3-8913A: 0 I/O port
11 | AY8930: upper compatible with 8910.
12 | In extended mode, it has higher resolution and duty ratio setting
13 | YM2149: higher resolution
14 | YM3439: same as 2149
15 | YMZ284: 0 I/O port, different clock divider
16 | YMZ294: 0 I/O port
17 | */
18 |
19 | #define ALL_8910_CHANNELS -1
20 |
21 | /* Internal resistance at Volume level 7. */
22 |
23 | #define AY8910_INTERNAL_RESISTANCE (356)
24 | #define YM2149_INTERNAL_RESISTANCE (353)
25 |
26 | /*
27 | * Default values for resistor loads.
28 | * The macro should be used in AY8910interface if
29 | * the real values are unknown.
30 | */
31 | #define AY8910_DEFAULT_LOADS {1000, 1000, 1000}
32 |
33 | /*
34 | * The following is used by all drivers not reviewed yet.
35 | * This will like the old behaviour, output between
36 | * 0 and 7FFF
37 | */
38 | #define AY8910_LEGACY_OUTPUT (1)
39 |
40 | /*
41 | * Specifing the next define will simulate the special
42 | * cross channel mixing if outputs are tied together.
43 | * The driver will only provide one stream in this case.
44 | */
45 | #define AY8910_SINGLE_OUTPUT (2)
46 |
47 | /*
48 | * The follwoing define is the default behaviour.
49 | * Output level 0 is 0V and 7ffff corresponds to 5V.
50 | * Use this to specify that a discrete mixing stage
51 | * follows.
52 | */
53 | #define AY8910_DISCRETE_OUTPUT (4)
54 |
55 | /*
56 | * The follwoing define causes the driver to output
57 | * raw volume levels, i.e. 0 .. 15 and 0..31.
58 | * This is intended to be used in a subsequent
59 | * mixing modul (i.e. mpatrol ties 6 channels from
60 | * AY-3-8910 together). Do not use it now.
61 | */
62 | /* TODO: implement mixing module */
63 | #define AY8910_RAW_OUTPUT (8)
64 |
65 | #define AY8910_ZX_STEREO 0x80
66 | /*
67 | * This define specifies the initial state of YM2149
68 | * pin 26 (SEL pin). By default it is set to high,
69 | * compatible with AY8910.
70 | */
71 | /* TODO: make it controllable while it's running (used by any hw???) */
72 | #define YM2149_PIN26_HIGH (0x00) /* or N/C */
73 | #define YM2149_PIN26_LOW (0x10)
74 |
75 | typedef struct _ay8910_interface ay8910_interface;
76 | struct _ay8910_interface
77 | {
78 | int flags; /* Flags */
79 | int res_load[3]; /* Load on channel in ohms */
80 | //devcb_read8 portAread;
81 | //devcb_read8 portBread;
82 | //devcb_write8 portAwrite;
83 | //devcb_write8 portBwrite;
84 | };
85 |
86 |
87 | //void ay8910_set_volume(UINT8 ChipID,int channel,int volume);
88 |
89 | /*READ8_DEVICE_HANDLER( ay8910_r );
90 | WITE8_DEVICE_HANDLER( ay8910_address_w );
91 | WRITE8_DEVICE_HANDLER( ay8910_data_w );*/
92 | /*UINT8 ay8910_r(UINT8 ChipID, offs_t offset);
93 | void ay8910_address_w(UINT8 ChipID, offs_t offset, UINT8 data);
94 | void ay8910_data_w(UINT8 ChipID, offs_t offset, UINT8 data);*/
95 |
96 | /* use this when BC1 == A0; here, BC1=0 selects 'data' and BC1=1 selects 'latch address' */
97 | //WRITE8_DEVICE_HANDLER( ay8910_data_address_w );
98 | //void ay8910_data_address_w(UINT8 ChipID, offs_t offset, UINT8 data);
99 |
100 | /* use this when BC1 == !A0; here, BC1=0 selects 'latch address' and BC1=1 selects 'data' */
101 | //WRITE8_DEVICE_HANDLER( ay8910_address_data_w );
102 | //void ay8910_address_data_w(UINT8 ChipID, offs_t offset, UINT8 data);
103 |
104 |
105 | /*********** An interface for SSG of YM2203 ***********/
106 |
107 | //void *ay8910_start_ym(void *infoptr, sound_type chip_type, const device_config *device, int clock, const ay8910_interface *intf);
108 | void *ay8910_start_ym(void *infoptr, unsigned char chip_type, int clock, const ay8910_interface *intf);
109 |
110 | void ay8910_stop_ym(void *chip);
111 | void ay8910_reset_ym(void *chip);
112 | void ay8910_set_clock_ym(void *chip, int clock);
113 | void ay8910_write_ym(void *chip, int addr, int data);
114 | int ay8910_read_ym(void *chip);
115 |
116 | //void ay8910_update(UINT8 ChipID, stream_sample_t **outputs, int samples);
117 | void ay8910_update_one(void *param, stream_sample_t **outputs, int samples);
118 | int ay8910_start(void **chip, int clock, UINT8 chip_type, UINT8 Flags);
119 | /*int device_start_ay8910(UINT8 ChipID, int clock, unsigned char chip_type, unsigned char Flags);
120 | void device_stop_ay8910(UINT8 ChipID);
121 | void device_reset_ay8910(UINT8 ChipID);*/
122 |
123 | void ay8910_set_mute_mask_ym(void *chip, UINT32 MuteMask);
124 | void ay8910_set_stereo_mask_ym(void *chip, UINT32 StereoMask);
125 | //void ay8910_set_mute_mask(UINT8 ChipID, UINT32 MuteMask);
126 | void ay8910_set_srchg_cb_ym(void *chip, SRATE_CALLBACK CallbackFunc, void* DataPtr);
127 |
128 | /*DEVICE_GET_INFO( ay8910 );
129 | DEVICE_GET_INFO( ay8912 );
130 | DEVICE_GET_INFO( ay8913 );
131 | DEVICE_GET_INFO( ay8930 );
132 | DEVICE_GET_INFO( ym2149 );
133 | DEVICE_GET_INFO( ym3439 );
134 | DEVICE_GET_INFO( ymz284 );
135 | DEVICE_GET_INFO( ymz294 );
136 |
137 | #define SOUND_AY8910 DEVICE_GET_INFO_NAME( ay8910 )
138 | #define SOUND_AY8912 DEVICE_GET_INFO_NAME( ay8912 )
139 | #define SOUND_AY8913 DEVICE_GET_INFO_NAME( ay8913 )
140 | #define SOUND_AY8930 DEVICE_GET_INFO_NAME( ay8930 )
141 | #define SOUND_YM2149 DEVICE_GET_INFO_NAME( ym2149 )
142 | #define SOUND_YM3439 DEVICE_GET_INFO_NAME( ym3439 )
143 | #define SOUND_YMZ284 DEVICE_GET_INFO_NAME( ymz284 )
144 | #define SOUND_YMZ294 DEVICE_GET_INFO_NAME( ymz294 )*/
145 |
--------------------------------------------------------------------------------
/VGMPlay/chips/qsound_intf.c:
--------------------------------------------------------------------------------
1 | //#include "emu.h"
2 | #include "mamedef.h"
3 | #ifdef _DEBUG
4 | #include
5 | #endif
6 | #include
7 | #include // for memset
8 | #include // for NULL
9 | #include
10 | #include "qsound_intf.h"
11 | #include "qsound_mame.h"
12 | #include "qsound_ctr.h"
13 |
14 | #ifdef ENABLE_ALL_CORES
15 | #define EC_MAME 0x01 // QSound HLE core from MAME
16 | #endif
17 | #define EC_CTR 0x00 // superctr custom HLE
18 |
19 | static UINT8 EMU_CORE = 0x00;
20 | // fix broken optimization of old VGMs causing problems with the new core
21 | static UINT8 key_on_hack = 0x00;
22 | static UINT16 start_addr_cache[2][16];
23 | static UINT16 pitch_cache[2][16];
24 | static UINT16 data_latch[2];
25 |
26 | int device_start_qsound(UINT8 ChipID, int clock)
27 | {
28 | memset(start_addr_cache[ChipID], 0, sizeof(UINT16)*16);
29 | memset(pitch_cache[ChipID], 0, sizeof(UINT16)*16);
30 | switch(EMU_CORE)
31 | {
32 | #ifdef ENABLE_ALL_CORES
33 | case EC_MAME:
34 | return device_start_qsoundm(ChipID, clock);
35 | #endif
36 | case EC_CTR:
37 | if(clock < 10000000)
38 | {
39 | clock *= 15;
40 | key_on_hack = 1;
41 | }
42 | return device_start_qsound_ctr(ChipID, clock);
43 | }
44 | return 0;
45 | }
46 |
47 | void device_stop_qsound(UINT8 ChipID)
48 | {
49 | switch(EMU_CORE)
50 | {
51 | #ifdef ENABLE_ALL_CORES
52 | case EC_MAME:
53 | device_stop_qsoundm(ChipID); return;
54 | #endif
55 | case EC_CTR:
56 | device_stop_qsound_ctr(ChipID); return;
57 | }
58 | }
59 |
60 | void device_reset_qsound(UINT8 ChipID)
61 | {
62 | switch(EMU_CORE)
63 | {
64 | #ifdef ENABLE_ALL_CORES
65 | case EC_MAME:
66 | device_reset_qsoundm(ChipID); return;
67 | #endif
68 | case EC_CTR:
69 | device_reset_qsound_ctr(ChipID);
70 |
71 | // need to wait until the chip is ready before we start writing to it ...
72 | // we do this by time travel.
73 | qsoundc_wait_busy(ChipID);
74 | return;
75 | }
76 | }
77 |
78 | void qsound_w(UINT8 ChipID, offs_t offset, UINT8 data)
79 | {
80 | switch(EMU_CORE)
81 | {
82 | #ifdef ENABLE_ALL_CORES
83 | case EC_MAME:
84 | qsoundm_w(ChipID, offset, data); return;
85 | #endif
86 | case EC_CTR:
87 | if(key_on_hack)
88 | {
89 | int ch;
90 | switch (offset)
91 | {
92 | // need to handle three cases, as vgm_cmp can remove writes to both phase and bank
93 | // registers, depending on version.
94 | // - start address was written before end/loop, but phase register is written
95 | // - as above, but phase is not written (we use bank as a backup then)
96 | // - voice parameters are written during a note (we can't rewrite the address then)
97 | case 0:
98 | data_latch[ChipID] = (data_latch[ChipID] & 0x00ff) | (data << 8);
99 | break;
100 | case 1:
101 | data_latch[ChipID] = (data_latch[ChipID] & 0xff00) | data;
102 | break;
103 | case 2:
104 | if(data > 0x7f)
105 | break;
106 | ch = data>>3;
107 |
108 | switch(data & 7)
109 | {
110 | case 1: // Start addr. write
111 | start_addr_cache[ChipID][ch] = data_latch[ChipID];
112 | break;
113 | case 2: // Pitch write
114 | // (old HLE assumed writing a non-zero value after a zero value was Key On)
115 | if(pitch_cache[ChipID][ch] == 0 && data_latch[ChipID] != 0)
116 | qsoundc_write_data(ChipID, (ch << 3) + 1, start_addr_cache[ChipID][ch]);
117 | pitch_cache[ChipID][ch] = data_latch[ChipID];
118 | break;
119 | case 3: // Phase (old HLE also assumed this was Key On)
120 | qsoundc_write_data(ChipID, (ch << 3) + 1, start_addr_cache[ChipID][ch]);
121 | default:
122 | break;
123 | }
124 | }
125 | }
126 | qsoundc_w(ChipID, offset, data);
127 |
128 | // need to wait until the chip is ready before we start writing to it ...
129 | // we do this by time travel.
130 | if(offset == 2 && data == 0xe3)
131 | qsoundc_wait_busy(ChipID);
132 |
133 | return;
134 | }
135 | }
136 |
137 | UINT8 qsound_r(UINT8 ChipID, offs_t offset)
138 | {
139 | switch(EMU_CORE)
140 | {
141 | #ifdef ENABLE_ALL_CORES
142 | case EC_MAME:
143 | return qsoundm_r(ChipID, offset);
144 | #endif
145 | case EC_CTR:
146 | return qsoundc_r(ChipID, offset);
147 | }
148 | return 0;
149 | }
150 |
151 | void qsound_update(UINT8 ChipID, stream_sample_t **outputs, int samples)
152 | {
153 | switch(EMU_CORE)
154 | {
155 | #ifdef ENABLE_ALL_CORES
156 | case EC_MAME:
157 | qsoundm_update(ChipID, outputs, samples); return;
158 | #endif
159 | case EC_CTR:
160 | qsoundc_update(ChipID, outputs, samples); return;
161 | }
162 | }
163 |
164 | void qsound_write_rom(UINT8 ChipID, offs_t ROMSize, offs_t DataStart, offs_t DataLength,
165 | const UINT8* ROMData)
166 | {
167 | switch(EMU_CORE)
168 | {
169 | #ifdef ENABLE_ALL_CORES
170 | case EC_MAME:
171 | qsoundm_write_rom(ChipID, ROMSize, DataStart, DataLength, ROMData); return;
172 | #endif
173 | case EC_CTR:
174 | qsoundc_write_rom(ChipID, ROMSize, DataStart, DataLength, ROMData); return;
175 | }
176 | }
177 |
178 | void qsound_set_mute_mask(UINT8 ChipID, UINT32 MuteMask)
179 | {
180 | switch(EMU_CORE)
181 | {
182 | #ifdef ENABLE_ALL_CORES
183 | case EC_MAME:
184 | qsoundm_set_mute_mask(ChipID, MuteMask); return;
185 | #endif
186 | case EC_CTR:
187 | qsoundc_set_mute_mask(ChipID, MuteMask); return;
188 | }
189 | }
190 |
191 | void qsound_set_emu_core(UINT8 Emulator)
192 | {
193 | #ifdef ENABLE_ALL_CORES
194 | EMU_CORE = (Emulator < 0x02) ? Emulator : 0x00;
195 | #else
196 | EMU_CORE = EC_CTR;
197 | #endif
198 |
199 | return;
200 | }
201 |
--------------------------------------------------------------------------------
/VGMPlay/chips/nes_defs.h:
--------------------------------------------------------------------------------
1 | /*****************************************************************************
2 |
3 | MAME/MESS NES APU CORE
4 |
5 | Based on the Nofrendo/Nosefart NES N2A03 sound emulation core written by
6 | Matthew Conte (matt@conte.com) and redesigned for use in MAME/MESS by
7 | Who Wants to Know? (wwtk@mail.com)
8 |
9 | This core is written with the advise and consent of Matthew Conte and is
10 | released under the GNU Public License. This core is freely avaiable for
11 | use in any freeware project, subject to the following terms:
12 |
13 | Any modifications to this code must be duly noted in the source and
14 | approved by Matthew Conte and myself prior to public submission.
15 |
16 | *****************************************************************************
17 |
18 | NES_DEFS.H
19 |
20 | NES APU internal type definitions and constants.
21 |
22 | *****************************************************************************/
23 |
24 | #pragma once
25 |
26 | #ifndef __NES_DEFS_H__
27 | #define __NES_DEFS_H__
28 |
29 | /* BOOLEAN CONSTANTS */
30 | #ifndef TRUE
31 | #define TRUE 1
32 | #define FALSE 0
33 | #endif
34 |
35 | /* REGULAR TYPE DEFINITIONS */
36 | typedef INT8 int8;
37 | typedef INT16 int16;
38 | typedef INT32 int32;
39 | typedef UINT8 uint8;
40 | typedef UINT16 uint16;
41 | typedef UINT32 uint32;
42 | typedef UINT8 boolean;
43 |
44 |
45 | /* QUEUE TYPES */
46 | #ifdef USE_QUEUE
47 |
48 | #define QUEUE_SIZE 0x2000
49 | #define QUEUE_MAX (QUEUE_SIZE-1)
50 |
51 | typedef struct queue_s
52 | {
53 | int pos;
54 | unsigned char reg,val;
55 | } queue_t;
56 |
57 | #endif
58 |
59 | /* REGISTER DEFINITIONS */
60 | #define APU_WRA0 0x00
61 | #define APU_WRA1 0x01
62 | #define APU_WRA2 0x02
63 | #define APU_WRA3 0x03
64 | #define APU_WRB0 0x04
65 | #define APU_WRB1 0x05
66 | #define APU_WRB2 0x06
67 | #define APU_WRB3 0x07
68 | #define APU_WRC0 0x08
69 | #define APU_WRC1 0x09
70 | #define APU_WRC2 0x0A
71 | #define APU_WRC3 0x0B
72 | #define APU_WRD0 0x0C
73 | #define APU_WRD2 0x0E
74 | #define APU_WRD3 0x0F
75 | #define APU_WRE0 0x10
76 | #define APU_WRE1 0x11
77 | #define APU_WRE2 0x12
78 | #define APU_WRE3 0x13
79 | #define APU_SMASK 0x15
80 | #define APU_IRQCTRL 0x17
81 |
82 | #define NOISE_LONG 0x4000
83 | #define NOISE_SHORT 93
84 |
85 | /* CHANNEL TYPE DEFINITIONS */
86 |
87 | /* Square Wave */
88 | typedef struct square_s
89 | {
90 | uint8 regs[4];
91 | int vbl_length;
92 | int freq;
93 | float phaseacc;
94 | float output_vol;
95 | float env_phase;
96 | float sweep_phase;
97 | uint8 adder;
98 | uint8 env_vol;
99 | boolean enabled;
100 | boolean Muted;
101 | } square_t;
102 |
103 | /* Triangle Wave */
104 | typedef struct triangle_s
105 | {
106 | uint8 regs[4]; /* regs[1] unused */
107 | int linear_length;
108 | int vbl_length;
109 | int write_latency;
110 | float phaseacc;
111 | float output_vol;
112 | uint8 adder;
113 | boolean counter_started;
114 | boolean enabled;
115 | boolean Muted;
116 | } triangle_t;
117 |
118 | /* Noise Wave */
119 | typedef struct noise_s
120 | {
121 | uint8 regs[4]; /* regs[1] unused */
122 | int cur_pos;
123 | int vbl_length;
124 | float phaseacc;
125 | float output_vol;
126 | float env_phase;
127 | uint8 env_vol;
128 | boolean enabled;
129 | boolean Muted;
130 | } noise_t;
131 |
132 | /* DPCM Wave */
133 | typedef struct dpcm_s
134 | {
135 | uint8 regs[4];
136 | uint32 address;
137 | uint32 length;
138 | int bits_left;
139 | float phaseacc;
140 | float output_vol;
141 | uint8 cur_byte;
142 | boolean enabled;
143 | boolean irq_occurred;
144 | //address_space *memory;
145 | const uint8 *memory;
146 | //signed char vol;
147 | signed short vol;
148 | boolean Muted;
149 | } dpcm_t;
150 |
151 | /* APU type */
152 | typedef struct apu
153 | {
154 | /* Sound channels */
155 | square_t squ[2];
156 | triangle_t tri;
157 | noise_t noi;
158 | dpcm_t dpcm;
159 |
160 | /* APU registers */
161 | unsigned char regs[0x20];
162 |
163 | /* Sound pointers */
164 | void *buffer;
165 |
166 | #ifdef USE_QUEUE
167 |
168 | /* Event queue */
169 | queue_t queue[QUEUE_SIZE];
170 | int head, tail;
171 |
172 | #else
173 |
174 | int buf_pos;
175 |
176 | #endif
177 |
178 | int step_mode;
179 | } apu_t;
180 |
181 | /* CONSTANTS */
182 |
183 | /* vblank length table used for squares, triangle, noise */
184 | static const uint8 vbl_length[32] =
185 | {
186 | 5, 127, 10, 1, 19, 2, 40, 3, 80, 4, 30, 5, 7, 6, 13, 7,
187 | 6, 8, 12, 9, 24, 10, 48, 11, 96, 12, 36, 13, 8, 14, 16, 15
188 | };
189 |
190 | /* frequency limit of square channels */
191 | static const int freq_limit[8] =
192 | {
193 | //0x3FF, 0x555, 0x666, 0x71C, 0x787, 0x7C1, 0x7E0, 0x7F0,
194 | // Fixed, thanks to Delek
195 | 0x3FF, 0x555, 0x666, 0x71C, 0x787, 0x7C1, 0x7E0, 0x7F2,
196 | };
197 |
198 | /* table of noise frequencies */
199 | static const int noise_freq[16] =
200 | {
201 | //4, 8, 16, 32, 64, 96, 128, 160, 202, 254, 380, 508, 762, 1016, 2034, 2046
202 | // Fixed, thanks to Delek
203 | 4, 8, 16, 32, 64, 96, 128, 160, 202, 254, 380, 508, 762, 1016, 2034, 4068
204 | };
205 |
206 | /* dpcm transfer freqs */
207 | static const int dpcm_clocks[16] =
208 | {
209 | 428, 380, 340, 320, 286, 254, 226, 214, 190, 160, 142, 128, 106, 85, 72, 54
210 | };
211 |
212 | /* ratios of pos/neg pulse for square waves */
213 | /* 2/16 = 12.5%, 4/16 = 25%, 8/16 = 50%, 12/16 = 75% */
214 | static const int duty_lut[4] =
215 | {
216 | 2, 4, 8, 12
217 | };
218 |
219 | #endif /* __NES_DEFS_H__ */
220 |
--------------------------------------------------------------------------------
/in_vgm/resource.h:
--------------------------------------------------------------------------------
1 | //{{NO_DEPENDENCIES}}
2 | // Microsoft Developer Studio generated include file.
3 | // Used by in_vgm.rc
4 | //
5 | #define MainIcon 101
6 | #define TabIcons 102
7 | #define LogoBitmap 103
8 | #define DlgConfigMain 201
9 | #define DlgFileInfo 202
10 | #define DlgCfgPlayback 203
11 | #define DlgCfgTags 204
12 | #define DlgCfgVgm7z 205
13 | #define DlgCfgMuting 206
14 | #define DlgCfgOptPan 207
15 | #define TabCollection 1001
16 | #define ImmediateUpdCheck 1002
17 | #define HelpButton 1003
18 | #define LoopText 1101
19 | #define FadeText 1102
20 | #define PauseNlText 1103
21 | #define PauseLpText 1104
22 | #define RateRecRadio 1105
23 | #define Rate60HzRadio 1106
24 | #define Rate50HzRadio 1107
25 | #define RateOtherRadio 1108
26 | #define RateText 1109
27 | #define RateLabel 1110
28 | #define VolumeSlider 1111
29 | #define VolumeText 1112
30 | #define SmplPbRateText 1113
31 | #define ResmpModeList 1114
32 | #define SmplChipRateText 1115
33 | #define ChipSmpModeList 1116
34 | #define SurroundCheck 1117
35 | #define SmplChipRateLabel 1118
36 | #define SmplChipRateHzLabel 1119
37 | #define LoopTimesLabel 1120
38 | #define TitleFormatText 1201
39 | #define PreferJapCheck 1202
40 | #define FM2413Check 1203
41 | #define TrimWhitespcCheck 1204
42 | #define StdSeparatorsCheck 1205
43 | #define MLTypeText 1206
44 | #define TagFallbackCheck 1207
45 | #define NoInfoCacheCheck 1208
46 | #define MutingChipList 1301
47 | #define MutingChipNumList 1302
48 | #define MuteChn1Check 1303
49 | #define MuteChn2Check 1304
50 | #define MuteChn3Check 1305
51 | #define MuteChn4Check 1306
52 | #define MuteChn5Check 1307
53 | #define MuteChn6Check 1308
54 | #define MuteChn7Check 1309
55 | #define MuteChn8Check 1310
56 | #define MuteChn9Check 1311
57 | #define MuteChn10Check 1312
58 | #define MuteChn11Check 1313
59 | #define MuteChn12Check 1314
60 | #define MuteChn13Check 1315
61 | #define MuteChn14Check 1316
62 | #define MuteChn15Check 1317
63 | #define MuteChn16Check 1318
64 | #define MuteChn17Check 1319
65 | #define MuteChn18Check 1320
66 | #define MuteChn19Check 1321
67 | #define MuteChn20Check 1322
68 | #define MuteChn21Check 1323
69 | #define MuteChn22Check 1324
70 | #define MuteChn23Check 1325
71 | #define MuteChn24Check 1326
72 | #define ResetMuteCheck 1327
73 | #define MuteChipCheck 1328
74 | #define TrkTitleText 2001
75 | #define TrkAuthorText 2002
76 | #define GameNameText 2003
77 | #define GameSysText 2004
78 | #define GameDateText 2005
79 | #define VGMFileText 2006
80 | #define VGMCrtText 2007
81 | #define VGMVerText 2008
82 | #define VGMGainText 2009
83 | #define VGMSizeText 2010
84 | #define VGMLenText 2011
85 | #define VGMNotesText 2012
86 | #define ChipUseText 2013
87 | #define LangEngCheck 2014
88 | #define LangJapCheck 2015
89 | #define ConfigPluginButton 2016
90 | #define BrwsrInfoButton 2017
91 | #define EmuOptChipList 3001
92 | #define EmuOptChipNumList 3002
93 | #define EmuCoreRadio1 3003
94 | #define EmuCoreRadio2 3004
95 | #define PanChn1Label 3005
96 | #define PanChn2Label 3006
97 | #define PanChn3Label 3007
98 | #define PanChn4Label 3008
99 | #define PanChn5Label 3009
100 | #define PanChn6Label 3010
101 | #define PanChn7Label 3011
102 | #define PanChn8Label 3012
103 | #define PanChn9Label 3013
104 | #define PanChn10Label 3014
105 | #define PanChn11Label 3015
106 | #define PanChn12Label 3016
107 | #define PanChn13Label 3017
108 | #define PanChn14Label 3018
109 | #define PanChn15Label 3019
110 | #define PanChn1Slider 3020
111 | #define PanChn2Slider 3021
112 | #define PanChn3Slider 3022
113 | #define PanChn4Slider 3023
114 | #define PanChn5Slider 3024
115 | #define PanChn6Slider 3025
116 | #define PanChn7Slider 3026
117 | #define PanChn8Slider 3027
118 | #define PanChn9Slider 3028
119 | #define PanChn10Slider 3029
120 | #define PanChn11Slider 3030
121 | #define PanChn12Slider 3031
122 | #define PanChn13Slider 3032
123 | #define PanChn14Slider 3033
124 | #define PanChn15Slider 3034
125 |
126 | // Next default values for new objects
127 | //
128 | #ifdef APSTUDIO_INVOKED
129 | #ifndef APSTUDIO_READONLY_SYMBOLS
130 | #define _APS_NEXT_RESOURCE_VALUE 212
131 | #define _APS_NEXT_COMMAND_VALUE 40001
132 | #define _APS_NEXT_CONTROL_VALUE 3038
133 | #define _APS_NEXT_SYMED_VALUE 101
134 | #endif
135 | #endif
136 |
--------------------------------------------------------------------------------
/VGMPlay/chips/opll.h:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2019 Nuke.YKT
3 | *
4 | * This program is free software; you can redistribute it and/or
5 | * modify it under the terms of the GNU General Public License
6 | * as published by the Free Software Foundation; either version 2
7 | * of the License, or (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | *
15 | * Yamaha YM2413 emulator
16 | * Thanks:
17 | * siliconpr0n.org(digshadow, John McMaster):
18 | * VRC VII decap and die shot.
19 | *
20 | * version: 1.0
21 | */
22 |
23 | #ifndef OPLL_H
24 | #define OPLL_H
25 |
26 | #include "emutypes.h"
27 |
28 | #define RSM_FRAC 10
29 | #define OPLL_WRITEBUF_SIZE 2048
30 | #define OPLL_WRITEBUF_DELAY 20
31 |
32 | enum {
33 | opll_type_ym2413 = 0x00, /* Yamaha YM2413 */
34 | opll_type_ds1001, /* Konami VRC VII */
35 | opll_type_ym2413b, /* Yamaha YM2413B */
36 | opll_type_ymf281, /* Yamaha YMF281 */
37 | opll_type_ymf281b, /* Yamaha YMF281B */
38 | opll_type_ym2420, /* Yamaha YM2420 */
39 | opll_type_ym2423, /* Yamaha YM2423 */
40 | };
41 |
42 | enum {
43 | opll_patch_1 = 0x00,
44 | opll_patch_2,
45 | opll_patch_3,
46 | opll_patch_4,
47 | opll_patch_5,
48 | opll_patch_6,
49 | opll_patch_7,
50 | opll_patch_8,
51 | opll_patch_9,
52 | opll_patch_10,
53 | opll_patch_11,
54 | opll_patch_12,
55 | opll_patch_13,
56 | opll_patch_14,
57 | opll_patch_15,
58 | opll_patch_drum_0,
59 | opll_patch_drum_1,
60 | opll_patch_drum_2,
61 | opll_patch_drum_3,
62 | opll_patch_drum_4,
63 | opll_patch_drum_5,
64 | opll_patch_max
65 | };
66 |
67 | typedef struct _opll_writebuf {
68 | uint64_t time;
69 | uint8_t port;
70 | uint8_t data;
71 | } opll_writebuf;
72 |
73 | typedef struct {
74 | uint8_t tl;
75 | uint8_t dc;
76 | uint8_t dm;
77 | uint8_t fb;
78 | uint8_t am[2];
79 | uint8_t vib[2];
80 | uint8_t et[2];
81 | uint8_t ksr[2];
82 | uint8_t multi[2];
83 | uint8_t ksl[2];
84 | uint8_t ar[2];
85 | uint8_t dr[2];
86 | uint8_t sl[2];
87 | uint8_t rr[2];
88 | } opll_patch_t;
89 |
90 | typedef struct {
91 | uint32_t chip_type;
92 | uint32_t cycles;
93 | uint32_t slot;
94 | const opll_patch_t *patchrom;
95 | /* IO */
96 | uint8_t write_data;
97 | uint8_t write_a;
98 | uint8_t write_d;
99 | uint8_t write_a_en;
100 | uint8_t write_d_en;
101 | uint8_t write_fm_address;
102 | uint8_t write_fm_data;
103 | uint8_t write_mode_address;
104 | uint8_t address;
105 | uint8_t data;
106 | /* Envelope generator */
107 | uint8_t eg_counter_state;
108 | uint8_t eg_counter_state_prev;
109 | uint32_t eg_timer;
110 | uint8_t eg_timer_low_lock;
111 | uint8_t eg_timer_carry;
112 | uint8_t eg_timer_shift;
113 | uint8_t eg_timer_shift_lock;
114 | uint8_t eg_timer_shift_stop;
115 | uint8_t eg_state[18];
116 | uint8_t eg_level[18];
117 | uint8_t eg_kon;
118 | uint32_t eg_dokon;
119 | uint8_t eg_off;
120 | uint8_t eg_rate;
121 | uint8_t eg_maxrate;
122 | uint8_t eg_zerorate;
123 | uint8_t eg_inc_lo;
124 | uint8_t eg_inc_hi;
125 | uint8_t eg_rate_hi;
126 | uint16_t eg_sl;
127 | uint16_t eg_ksltl;
128 | uint8_t eg_out;
129 | uint8_t eg_silent;
130 | /* Phase generator */
131 | uint16_t pg_fnum;
132 | uint8_t pg_block;
133 | uint16_t pg_out;
134 | uint32_t pg_inc;
135 | uint32_t pg_phase[18];
136 | uint32_t pg_phase_next;
137 | /* Operator */
138 | int16_t op_fb1[9];
139 | int16_t op_fb2[9];
140 | int16_t op_fbsum;
141 | int16_t op_mod;
142 | uint8_t op_neg;
143 | uint16_t op_logsin;
144 | uint16_t op_exp_m;
145 | uint16_t op_exp_s;
146 | /* Channel */
147 | int16_t ch_out;
148 | int16_t ch_out_hh;
149 | int16_t ch_out_tm;
150 | int16_t ch_out_bd;
151 | int16_t ch_out_sd;
152 | int16_t ch_out_tc;
153 | /* LFO */
154 | uint16_t lfo_counter;
155 | uint8_t lfo_vib_counter;
156 | uint16_t lfo_am_counter;
157 | uint8_t lfo_am_step;
158 | uint8_t lfo_am_dir;
159 | uint8_t lfo_am_car;
160 | uint8_t lfo_am_out;
161 | /* Register set */
162 | uint16_t fnum[9];
163 | uint8_t block[9];
164 | uint8_t kon[9];
165 | uint8_t son[9];
166 | uint8_t vol[9];
167 | uint8_t inst[9];
168 | uint8_t rhythm;
169 | uint8_t testmode;
170 | opll_patch_t patch;
171 | uint8_t c_instr;
172 | uint8_t c_op;
173 | uint8_t c_tl;
174 | uint8_t c_dc;
175 | uint8_t c_dm;
176 | uint8_t c_fb;
177 | uint8_t c_am;
178 | uint8_t c_vib;
179 | uint8_t c_et;
180 | uint8_t c_ksr;
181 | uint8_t c_ksr_freq;
182 | uint8_t c_ksl_freq;
183 | uint8_t c_ksl_block;
184 | uint8_t c_multi;
185 | uint8_t c_ksl;
186 | uint8_t c_adrr[3];
187 | uint8_t c_sl;
188 | uint16_t c_fnum;
189 | uint16_t c_block;
190 | /* Rhythm mode */
191 | int8_t rm_enable;
192 | uint32_t rm_noise;
193 | uint32_t rm_select;
194 | uint8_t rm_hh_bit2;
195 | uint8_t rm_hh_bit3;
196 | uint8_t rm_hh_bit7;
197 | uint8_t rm_hh_bit8;
198 | uint8_t rm_tc_bit3;
199 | uint8_t rm_tc_bit5;
200 |
201 | int16_t output_m;
202 | int16_t output_r;
203 |
204 | uint32_t mute[14];
205 | int32_t rateratio;
206 | int32_t samplecnt;
207 | int32_t oldsamples[2];
208 | int32_t samples[2];
209 |
210 | uint64_t writebuf_samplecnt;
211 | uint32_t writebuf_cur;
212 | uint32_t writebuf_last;
213 | uint64_t writebuf_lasttime;
214 | opll_writebuf writebuf[OPLL_WRITEBUF_SIZE];
215 |
216 | } opll_t;
217 |
218 | void OPLL_Reset(opll_t *chip, uint32_t chip_type, uint32_t rate, uint32_t clock);
219 | void OPLL_Clock(opll_t *chip, int32_t *buffer);
220 | void OPLL_Write(opll_t *chip, uint32_t port, uint8_t data);
221 |
222 | void OPLL_WriteBuffered(opll_t*chip, uint32_t port, uint8_t data);
223 | void OPLL_GenerateStream(opll_t*chip, int32_t **sndptr, uint32_t numsamples);
224 | void OPLL_SetMute(opll_t*chip, uint32_t mute);
225 | #endif
--------------------------------------------------------------------------------
/in_vgm/Winamp/IN2.H:
--------------------------------------------------------------------------------
1 |
2 | #ifndef NULLSOFT_WINAMP_IN2H
3 | #define NULLSOFT_WINAMP_IN2H
4 | #include "out.h"
5 |
6 | // note: exported symbol is now winampGetInModule2.
7 |
8 | #define IN_UNICODE 0x0F000000
9 |
10 | #ifdef UNICODE_INPUT_PLUGIN
11 | #define in_char wchar_t
12 | #define IN_VER (IN_UNICODE | 0x100)
13 | #else
14 | #define in_char char
15 | #define IN_VER 0x100
16 | #endif
17 |
18 | #define IN_MODULE_FLAG_USES_OUTPUT_PLUGIN 1
19 | // By default, Winamp assumes that your input plugin wants to use Winamp's EQ, and doesn't do replay gain
20 | // if you handle any of these yourself (EQ, Replay Gain adjustments), then set these flags accordingly
21 | #define IN_MODULE_FLAG_EQ 2 // set this if you do your own EQ
22 | #define IN_MODULE_FLAG_REPLAYGAIN 8 // set this if you adjusted volume for replay gain
23 | // for tracks with no replay gain metadata, you should clear this flag
24 | // UNLESS you handle "non_replaygain" gain adjustment yourself
25 | #define IN_MODULE_FLAG_REPLAYGAIN_PREAMP 16 // use this if you queried for the replay gain preamp parameter and used it
26 | // this parameter is new to 5.54
27 | typedef struct
28 | {
29 | int version; // module type (IN_VER)
30 | char *description; // description of module, with version string
31 |
32 | HWND hMainWindow; // winamp's main window (filled in by winamp)
33 | HINSTANCE hDllInstance; // DLL instance handle (Also filled in by winamp)
34 |
35 | char *FileExtensions; // "mp3\0Layer 3 MPEG\0mp2\0Layer 2 MPEG\0mpg\0Layer 1 MPEG\0"
36 | // May be altered from Config, so the user can select what they want
37 |
38 | int is_seekable; // is this stream seekable?
39 | int UsesOutputPlug; // does this plug-in use the output plug-ins? (musn't ever change, ever :)
40 | // note that this has turned into a "flags" field
41 | // see IN_MODULE_FLAG_*
42 |
43 | void (*Config)(HWND hwndParent); // configuration dialog
44 | void (*About)(HWND hwndParent); // about dialog
45 |
46 | void (*Init)(); // called at program init
47 | void (*Quit)(); // called at program quit
48 |
49 | #define GETFILEINFO_TITLE_LENGTH 2048
50 | void (*GetFileInfo)(const in_char *file, in_char *title, int *length_in_ms); // if file == NULL, current playing is used
51 |
52 | #define INFOBOX_EDITED 0
53 | #define INFOBOX_UNCHANGED 1
54 | int (*InfoBox)(const in_char *file, HWND hwndParent);
55 |
56 | int (*IsOurFile)(const in_char *fn); // called before extension checks, to allow detection of mms://, etc
57 | // playback stuff
58 | int (*Play)(const in_char *fn); // return zero on success, -1 on file-not-found, some other value on other (stopping winamp) error
59 | void (*Pause)(); // pause stream
60 | void (*UnPause)(); // unpause stream
61 | int (*IsPaused)(); // ispaused? return 1 if paused, 0 if not
62 | void (*Stop)(); // stop (unload) stream
63 |
64 | // time stuff
65 | int (*GetLength)(); // get length in ms
66 | int (*GetOutputTime)(); // returns current output time in ms. (usually returns outMod->GetOutputTime()
67 | void (*SetOutputTime)(int time_in_ms); // seeks to point in stream (in ms). Usually you signal your thread to seek, which seeks and calls outMod->Flush()..
68 |
69 | // volume stuff
70 | void (*SetVolume)(int volume); // from 0 to 255.. usually just call outMod->SetVolume
71 | void (*SetPan)(int pan); // from -127 to 127.. usually just call outMod->SetPan
72 |
73 | // in-window builtin vis stuff
74 |
75 | void (*SAVSAInit)(int maxlatency_in_ms, int srate); // call once in Play(). maxlatency_in_ms should be the value returned from outMod->Open()
76 | // call after opening audio device with max latency in ms and samplerate
77 | void (*SAVSADeInit)(); // call in Stop()
78 |
79 |
80 | // simple vis supplying mode
81 | void (*SAAddPCMData)(void *PCMData, int nch, int bps, int timestamp);
82 | // sets the spec data directly from PCM data
83 | // quick and easy way to get vis working :)
84 | // needs at least 576 samples :)
85 |
86 | // advanced vis supplying mode, only use if you're cool. Use SAAddPCMData for most stuff.
87 | int (*SAGetMode)(); // gets csa (the current type (4=ws,2=osc,1=spec))
88 | // use when calling SAAdd()
89 | int (*SAAdd)(void *data, int timestamp, int csa); // sets the spec data, filled in by winamp
90 |
91 |
92 | // vis stuff (plug-in)
93 | // simple vis supplying mode
94 | void (*VSAAddPCMData)(void *PCMData, int nch, int bps, int timestamp); // sets the vis data directly from PCM data
95 | // quick and easy way to get vis working :)
96 | // needs at least 576 samples :)
97 |
98 | // advanced vis supplying mode, only use if you're cool. Use VSAAddPCMData for most stuff.
99 | int (*VSAGetMode)(int *specNch, int *waveNch); // use to figure out what to give to VSAAdd
100 | int (*VSAAdd)(void *data, int timestamp); // filled in by winamp, called by plug-in
101 |
102 |
103 | // call this in Play() to tell the vis plug-ins the current output params.
104 | void (*VSASetInfo)(int srate, int nch); // <-- Correct (benski, dec 2005).. old declaration had the params backwards
105 |
106 |
107 | // dsp plug-in processing:
108 | // (filled in by winamp, calld by input plug)
109 |
110 | // returns 1 if active (which means that the number of samples returned by dsp_dosamples
111 | // could be greater than went in.. Use it to estimate if you'll have enough room in the
112 | // output buffer
113 | int (*dsp_isactive)();
114 |
115 | // returns number of samples to output. This can be as much as twice numsamples.
116 | // be sure to allocate enough buffer for samples, then.
117 | int (*dsp_dosamples)(short int *samples, int numsamples, int bps, int nch, int srate);
118 |
119 |
120 | // eq stuff
121 | void (*EQSet)(int on, char data[10], int preamp); // 0-64 each, 31 is +0, 0 is +12, 63 is -12. Do nothing to ignore.
122 |
123 | // info setting (filled in by winamp)
124 | void (*SetInfo)(int bitrate, int srate, int stereo, int synched); // if -1, changes ignored? :)
125 |
126 | Out_Module *outMod; // filled in by winamp, optionally used :)
127 | } In_Module;
128 |
129 | // return values from the winampUninstallPlugin(HINSTANCE hdll, HWND parent, int param)
130 | // which determine if we can uninstall the plugin immediately or on winamp restart
131 | //
132 | // uninstall support was added from 5.0+ and uninstall now support from 5.5+
133 | // it is down to you to ensure that if uninstall now is returned that it will not cause a crash
134 | // (ie don't use if you've been subclassing the main window)
135 | #define IN_PLUGIN_UNINSTALL_NOW 0x1
136 | #define IN_PLUGIN_UNINSTALL_REBOOT 0x0
137 |
138 | #endif
--------------------------------------------------------------------------------