mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-05 20:35:06 +00:00
e0e6a45000
Prepare for reducing duplicates for 4op FM related codes Add and correct bunch of presets - mostly based on MAME source. - Neo Geo AES uses slightly difference clock for NTSC, PAL colorbust frequency. - Turbosound FM + SAA: Some Turbosound FM has additional SAA1099, for additional sound channel and Plays SAM coupe tune? - PC-98: - Sound Orchestra: OPN with hardpanned stereo, some model has with OPL family FM addons. V variation has Y8950 and supports ADPCM. - Sound Blaster 16 for PC-9800: This famous PC sound card is also exists for PC-98, with optional OPN PC-9801-26(K) compatibility on some models. - IBM PCjr: PC with SN PSG sound, but less popular than previous models, and compatible Tandy 1000. - Tandy 1000: PCjr and previous IBM PC compatible, also has SN PSG (later embedded in their ASIC, like Sega). - Hexion: One of konami's budget arcade hardware with SCC + MSM6295 sound system, like their amusement hardware in this era. - DJ Boy, Atari JSA IIIs, Skimaxx: How to panning sound or plays stereo sound on MSM6295 - just use MSM6295s per each output! - Air Buster: One of arcade hardware with OPN + MSM6295 sound system, Used this configuration is also some hardwares. - Tecmo system: One of arcade hardware with pretty unique sound system: OPL3, YMZ280B, MSM6295; first 2 entry is mostly used in music, last entry is mostly used in sound effect. - Sunsoft Shanghai 3: Predecessor of Sunsoft Arcade is using YM2149 rather than FM, MSM6295 is still there. - Atari Klax: example of arcade hardware sound system with single MSM6295 only. - Ikari warriors: This early SNK Triple-Z80 hardware uses 2 OPL1s and no ADPCM supports. - Coreland Cyber Tank: This rare arcade machine's stereo sound is like SB Pro, but it's actually produced in 2 Y8950s. - Data East MLC: Latest arcade hardware from Data East, with single YMZ280B for sound. - Kaneko Jackie Chan: Predecessor of Super Kaneko Nova System hardware, also with YMZ280B. - Super Kaneko Nova System: Latest arcade hardware from Kaneko, with single YMZ280B for sound. this announced 3D acceleration addon, but finally cancelled. - Toaplan 1: Home of Late 80-Early 90s Good ol' stuffs, Example of arcade sound system with single OPL2 - Namco Pac-Land: and this era, Namco start to change Custom 15 WSG to their Custom 30 WSG with featured RAM based waveform, and mailbox feature. - Namco System 1: One of latest usage of Custom 30 WSG, with OPM FM hardware and 8 bit DAC and Stereo output. Add various clock, type options for chips - SN7: Prepare to add 17 bit noise variation, Game gear stereo extentsion, NCR PSG variation (MAME core only for now) - OPN, OPNA: Add placeholder for prescaler option - OPL: Prepare for OPL3L, OPL4 downscaled output rate option
84 lines
1.8 KiB
C
84 lines
1.8 KiB
C
// Copyright (C) 2021 Nuke.YKT
|
|
// License: GPLv2+
|
|
// Version 1.0.1
|
|
#ifndef _YMPSG_H_
|
|
#define _YMPSG_H_
|
|
#include <stdint.h>
|
|
|
|
#define YMPSG_WRITEBUF_SIZE 2048
|
|
#define YMPSG_WRITEBUF_DELAY 8
|
|
|
|
typedef struct _ympsg_writebuf {
|
|
uint64_t time;
|
|
uint8_t stat;
|
|
uint8_t data;
|
|
} ympsg_writebuf;
|
|
|
|
typedef struct {
|
|
// IO
|
|
uint8_t data;
|
|
uint8_t latch;
|
|
uint8_t write_flag;
|
|
uint8_t write_flag_l;
|
|
|
|
uint8_t prescaler_1;
|
|
uint8_t prescaler_2;
|
|
uint8_t prescaler_2_l;
|
|
uint8_t reset_latch;
|
|
uint8_t ic;
|
|
uint8_t ic_latch1;
|
|
uint8_t ic_latch2;
|
|
uint8_t data_mask;
|
|
uint8_t reg_reset;
|
|
uint8_t volume[4];
|
|
uint16_t freq[3];
|
|
uint8_t noise_data;
|
|
uint8_t noise_of;
|
|
uint8_t noise_trig;
|
|
uint8_t noise_trig_l;
|
|
uint8_t rot;
|
|
|
|
uint8_t chan_sel;
|
|
|
|
uint16_t counter[4];
|
|
uint8_t counter_of;
|
|
uint8_t sign;
|
|
uint8_t sign_l;
|
|
uint8_t noise_sign_l;
|
|
uint16_t noise;
|
|
uint8_t noise_tap1;
|
|
uint8_t noise_tap2;
|
|
uint32_t noise_size;
|
|
uint8_t test;
|
|
uint8_t volume_out[4];
|
|
|
|
//
|
|
uint64_t writebuf_samplecnt;
|
|
uint32_t writebuf_cur;
|
|
uint32_t writebuf_last;
|
|
uint64_t writebuf_lasttime;
|
|
ympsg_writebuf writebuf[YMPSG_WRITEBUF_SIZE];
|
|
|
|
//
|
|
short vol_table[17];
|
|
|
|
|
|
uint8_t mute;
|
|
} ympsg_t;
|
|
|
|
|
|
void YMPSG_Write(ympsg_t *chip, uint8_t data);
|
|
uint16_t YMPSG_Read(ympsg_t *chip);
|
|
void YMPSG_Init(ympsg_t *chip, uint8_t real_sn, uint8_t noise_tap1, uint8_t noise_tap2, uint32_t noise_size);
|
|
void YMPSG_SetIC(ympsg_t *chip, uint32_t ic);
|
|
void YMPSG_Clock(ympsg_t *chip);
|
|
int YMPSG_GetOutput(ympsg_t *chip);
|
|
void YMPSG_Test(ympsg_t *chip, uint16_t test);
|
|
|
|
|
|
void YMPSG_Generate(ympsg_t *chip, int32_t *buf);
|
|
void YMPSG_WriteBuffered(ympsg_t *chip, uint8_t data);
|
|
|
|
void YMPSG_SetMute(ympsg_t *chip, uint8_t mute);
|
|
|
|
#endif
|