SMS driver: use our SN psg, force pal timing for xenon2, msx mapper WIP
This commit is contained in:
parent
42e4232961
commit
eb1d8b0bbd
|
@ -3,6 +3,7 @@
|
|||
#include "tiles_generic.h"
|
||||
#include "smsshared.h"
|
||||
#include "z80_intf.h"
|
||||
#include "sn76496.h"
|
||||
|
||||
static UINT8 *AllMem;
|
||||
static UINT8 *MemEnd;
|
||||
|
@ -83,6 +84,8 @@ INT32 SMSExit()
|
|||
cart.rom = NULL;
|
||||
}
|
||||
|
||||
system_shutdown();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -145,19 +148,6 @@ INT32 SMSFrame()
|
|||
system_frame(0);
|
||||
ZetClose();
|
||||
|
||||
if (pBurnSoundOut) {
|
||||
INT32 length = nBurnSoundLen;
|
||||
INT16 *pSoundBuf = pBurnSoundOut;
|
||||
if (snd.buffer_size < length) length = snd.buffer_size;
|
||||
memset(pBurnSoundOut, 0, nBurnSoundLen * 4);
|
||||
|
||||
for(INT32 i = 0; i < length; i++) {
|
||||
pSoundBuf[0] = snd.output[0][i]; //nLeftSample;
|
||||
pSoundBuf[1] = snd.output[1][i]; //nRightSample;
|
||||
pSoundBuf += 2;
|
||||
}
|
||||
}
|
||||
|
||||
if (pBurnDraw)
|
||||
SMSDraw();
|
||||
|
||||
|
@ -183,6 +173,17 @@ rominfo_t game_list[] = {
|
|||
{0xA577CE46, MAPPER_CODIES, DISPLAY_PAL, TERRITORY_EXPORT, "Micro Machines"},
|
||||
{0x8813514B, MAPPER_CODIES, DISPLAY_PAL, TERRITORY_EXPORT, "Excellent Dizzy (Proto)"},
|
||||
{0xAA140C9C, MAPPER_CODIES, DISPLAY_PAL, TERRITORY_EXPORT, "Excellent Dizzy (Proto - GG)"},
|
||||
{0x5c205ee1, MAPPER_SEGA, DISPLAY_PAL, TERRITORY_EXPORT, "Xenon 2"},
|
||||
{0xec726c0d, MAPPER_SEGA, DISPLAY_PAL, TERRITORY_EXPORT, "Xenon 2"},
|
||||
{0x445525E2, MAPPER_MSX, DISPLAY_NTSC, TERRITORY_EXPORT, "Penguin Adventure (KR)"},
|
||||
{0x83F0EEDE, MAPPER_MSX, DISPLAY_NTSC, TERRITORY_EXPORT, "Street Master (KR)"},
|
||||
{0xA05258F5, MAPPER_MSX, DISPLAY_NTSC, TERRITORY_EXPORT, "Won-Si-In (KR)"},
|
||||
{0x06965ED9, MAPPER_MSX, DISPLAY_NTSC, TERRITORY_EXPORT, "F-1 Spirit - The way to Formula-1 (KR)"},
|
||||
{0x77EFE84A, MAPPER_MSX, DISPLAY_NTSC, TERRITORY_EXPORT, "Cyborg Z (KR)"},
|
||||
{0xF89AF3CC, MAPPER_MSX, DISPLAY_NTSC, TERRITORY_EXPORT, "Knightmare II - The Maze of Galious (KR)"},
|
||||
{0x9195C34C, MAPPER_MSX, DISPLAY_NTSC, TERRITORY_EXPORT, "Super Boy 3 (KR)"},
|
||||
{0xE316C06D, MAPPER_MSX_NEMESIS, DISPLAY_NTSC, TERRITORY_EXPORT, "Nemesis (KR)"},
|
||||
{0x0A77FA5E, MAPPER_MSX, DISPLAY_NTSC, TERRITORY_EXPORT, "Nemesis 2 (KR)"},
|
||||
{0 , -1 , -1, -1, NULL},
|
||||
};
|
||||
|
||||
|
@ -291,8 +292,6 @@ INT32 SMSInit()
|
|||
sms.territory = 0;
|
||||
sms.use_fm = 0;
|
||||
|
||||
//system_poweron(); (alias for sms_reset())
|
||||
//sms_reset(); (reset on system_init() automatically)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -318,21 +317,13 @@ static void system_load_state()
|
|||
|
||||
INT32 SMSScan(INT32 nAction, INT32 *pnMin)
|
||||
{
|
||||
struct BurnArea ba;
|
||||
|
||||
if (pnMin) {
|
||||
*pnMin = 0x029708;
|
||||
}
|
||||
|
||||
if (nAction & ACB_VOLATILE) {
|
||||
memset(&ba, 0, sizeof(ba));
|
||||
|
||||
ba.Data = SN76489_GetContextPtr(0);
|
||||
ba.nLen = SN76489_GetContextSize();
|
||||
ba.szName = "SMSPSG";
|
||||
BurnAcb(&ba);
|
||||
|
||||
ZetScan(nAction);
|
||||
SN76496Scan(nAction, pnMin);
|
||||
SCAN_VAR(vdp);
|
||||
SCAN_VAR(sms);
|
||||
SCAN_VAR(cart.fcr);
|
||||
|
|
|
@ -39,11 +39,21 @@ void __fastcall writemem_mapper_codies(UINT16 offset, UINT8 data)
|
|||
sms_mapper_w(3, data);
|
||||
return;
|
||||
case 0xC000:
|
||||
//cpu_writemap[offset >> 10][offset & 0x03FF] = data;
|
||||
sms.wram[offset & 0x1fff] = data; // maybe..
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void __fastcall writemem_mapper_msx(UINT16 offset, UINT8 data)
|
||||
{
|
||||
if (offset <= 0x0003) {
|
||||
bprintf(0, _T("msx %X %X,"), offset, data);
|
||||
sms_mapper8k_w(offset & 3, data);
|
||||
return;
|
||||
}
|
||||
|
||||
sms.wram[offset & 0x1fff] = data;
|
||||
//z80_writemap[address >> 10][address & 0x03FF] = data;
|
||||
}
|
||||
|
||||
void sms_init(void)
|
||||
|
@ -58,6 +68,8 @@ void sms_init(void)
|
|||
/* Assign mapper */
|
||||
if(cart.mapper == MAPPER_CODIES)
|
||||
ZetSetWriteHandler(writemem_mapper_codies);
|
||||
else if (cart.mapper == MAPPER_MSX || cart.mapper == MAPPER_MSX_NEMESIS)
|
||||
{ bprintf(0, _T("msx mapper!\n"));ZetSetWriteHandler(writemem_mapper_msx);}
|
||||
else
|
||||
ZetSetWriteHandler(writemem_mapper_sega);
|
||||
|
||||
|
@ -153,9 +165,62 @@ void sms_reset(void)
|
|||
cart.fcr[0] = 0x00;
|
||||
cart.fcr[1] = 0x00;
|
||||
cart.fcr[2] = 0x01;
|
||||
cart.fcr[3] = 0x00;
|
||||
cart.fcr[3] = 0x00;
|
||||
|
||||
switch (cart.mapper) // WIP!!
|
||||
{
|
||||
case MAPPER_MSX_NEMESIS:
|
||||
case MAPPER_MSX: {
|
||||
cart.fcr[2] = 0x00;
|
||||
UINT32 poffset = ((cart.pages * 2)-1) << 13;
|
||||
ZetOpen(0);
|
||||
ZetMapMemory(cart.rom + poffset, 0x0000, 0x1fff, MAP_READ);
|
||||
ZetClose();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*// INIT ??
|
||||
// Nemesis special case
|
||||
if (slot.mapper == MAPPER_MSX_NEMESIS)
|
||||
{
|
||||
// first 8k page is mapped to last 8k ROM bank
|
||||
for (i = 0x00; i < 0x08; i++)
|
||||
{
|
||||
z80_readmap[i] = &slot.rom[(0x0f << 13) | ((i & 0x07) << 10)];
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
void sms_mapper8k_w(INT32 address, UINT8 data) // WIP
|
||||
{
|
||||
/* Calculate ROM page index */
|
||||
UINT32 poffset = (data % (cart.pages * 2)) << 13;
|
||||
|
||||
/* Save frame control register data */
|
||||
cart.fcr[address] = data;
|
||||
|
||||
/* 4 x 8k banks */
|
||||
switch (address & 3)
|
||||
{
|
||||
case 0: /* cartridge ROM bank (8k) at $8000-$9FFF */
|
||||
ZetMapMemory(cart.rom + poffset, 0x8000, 0x9fff, MAP_ROM);
|
||||
break;
|
||||
|
||||
case 1: /* cartridge ROM bank (8k) at $A000-$BFFF */
|
||||
ZetMapMemory(cart.rom + poffset, 0xa000, 0xbfff, MAP_ROM);
|
||||
break;
|
||||
|
||||
case 2: /* cartridge ROM bank (8k) at $4000-$5FFF */
|
||||
ZetMapMemory(cart.rom + poffset, 0x4000, 0x5fff, MAP_ROM);
|
||||
break;
|
||||
|
||||
case 3: /* cartridge ROM bank (8k) at $6000-$7FFF */
|
||||
ZetMapMemory(cart.rom + poffset, 0x6000, 0x7fff, MAP_ROM);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void sms_mapper_w(INT32 address, UINT8 data)
|
||||
{
|
||||
|
@ -206,7 +271,6 @@ uint8 z80_read_unmapped(void)
|
|||
uint8 data;
|
||||
pc = (pc - 1) & 0xFFFF;
|
||||
data = ZetReadProg(pc);
|
||||
//bprintf(0, _T("Read unmapped: %X data %X.\n"), pc, data);
|
||||
|
||||
return ((data | data_bus_pullup) & ~data_bus_pulldown);
|
||||
}
|
||||
|
@ -221,7 +285,7 @@ void memctrl_w(uint8 data)
|
|||
/*--------------------------------------------------------------------------*/
|
||||
|
||||
void _fastcall sms_port_w(UINT16 port, UINT8 data)
|
||||
{ //bprintf(0, _T("pw %X %X,"), port, data);
|
||||
{
|
||||
switch(port & 0xC1)
|
||||
{
|
||||
case 0x00:
|
||||
|
@ -249,7 +313,7 @@ void _fastcall sms_port_w(UINT16 port, UINT8 data)
|
|||
}
|
||||
|
||||
UINT8 _fastcall sms_port_r(UINT16 port)
|
||||
{ //bprintf(0, _T("pr %X,"), port);
|
||||
{
|
||||
switch(port & 0xC0)
|
||||
{
|
||||
case 0x00:
|
||||
|
|
|
@ -12,7 +12,9 @@ enum {
|
|||
enum {
|
||||
MAPPER_NONE = 0,
|
||||
MAPPER_SEGA = 1,
|
||||
MAPPER_CODIES = 2
|
||||
MAPPER_CODIES = 2,
|
||||
MAPPER_MSX = 3,
|
||||
MAPPER_MSX_NEMESIS = 4
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -105,6 +107,7 @@ void sms_init(void);
|
|||
void sms_reset(void);
|
||||
void sms_shutdown(void);
|
||||
void sms_mapper_w(INT32 address, UINT8 data);
|
||||
void sms_mapper8k_w(INT32 address, UINT8 data);
|
||||
|
||||
/* port-map Function prototypes */
|
||||
uint8 z80_read_unmapped(void);
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include "smsvdp.h"
|
||||
#include "smsrender.h"
|
||||
#include "smstms.h"
|
||||
#include "smssn76489.h"
|
||||
//#include "smssn76489.h"
|
||||
#include "smsfmintf.h"
|
||||
#include "smssound.h"
|
||||
#include "smssystem.h"
|
||||
|
|
|
@ -4,27 +4,12 @@
|
|||
*/
|
||||
#include "tiles_generic.h"
|
||||
#include "smsshared.h"
|
||||
#include "sn76496.h"
|
||||
|
||||
snd_t snd;
|
||||
static int16 **fm_buffer;
|
||||
static int16 **psg_buffer;
|
||||
int *smptab;
|
||||
int smptab_len;
|
||||
|
||||
int sound_init(void)
|
||||
{
|
||||
uint8 *buf = NULL;
|
||||
int restore_fm = 0;
|
||||
int i;
|
||||
|
||||
/* Save register settings */
|
||||
if(snd.enabled && sms.use_fm)
|
||||
{
|
||||
restore_fm = 1;
|
||||
buf = (uint8 *)malloc(FM_GetContextSize());
|
||||
FM_GetContext(buf);
|
||||
}
|
||||
|
||||
/* If we are reinitializing, shut down sound emulation */
|
||||
if(snd.enabled)
|
||||
{
|
||||
|
@ -38,104 +23,32 @@ int sound_init(void)
|
|||
if(snd.sample_rate < 8000 || snd.sample_rate > 48000)
|
||||
return 0;
|
||||
|
||||
/* Assign stream mixing callback if none provided */
|
||||
if(!snd.mixer_callback)
|
||||
snd.mixer_callback = sound_mixer_callback;
|
||||
// Init sound emulation
|
||||
SN76489Init(0, snd.psg_clock, 0);
|
||||
SN76496SetRoute(0, 1.00, BURN_SND_ROUTE_BOTH);
|
||||
|
||||
/* Calculate number of samples generated per frame */
|
||||
snd.sample_count = (snd.sample_rate / snd.fps);
|
||||
|
||||
/* Calculate size of sample buffer */
|
||||
snd.buffer_size = snd.sample_count * 2;
|
||||
|
||||
/* Free sample buffer position table if previously allocated */
|
||||
if(smptab)
|
||||
{
|
||||
free(smptab);
|
||||
smptab = NULL;
|
||||
}
|
||||
|
||||
/* Prepare incremental info */
|
||||
snd.done_so_far = 0;
|
||||
smptab_len = (sms.display == DISPLAY_NTSC) ? 262 : 313;
|
||||
smptab = (int *)malloc(smptab_len * sizeof(int));
|
||||
if(!smptab) return 0;
|
||||
for (i = 0; i < smptab_len; i++)
|
||||
{
|
||||
double calc = (snd.sample_count * i);
|
||||
calc = calc / (double)smptab_len;
|
||||
smptab[i] = (int)calc;
|
||||
}
|
||||
|
||||
/* Allocate emulated sound streams */
|
||||
for(i = 0; i < STREAM_MAX; i++)
|
||||
{
|
||||
snd.stream[i] = (int16 *)malloc(snd.buffer_size);
|
||||
if(!snd.stream[i]) return 0;
|
||||
memset(snd.stream[i], 0, snd.buffer_size);
|
||||
}
|
||||
|
||||
/* Allocate sound output streams */
|
||||
snd.output[0] = (int16 *)malloc(snd.buffer_size);
|
||||
snd.output[1] = (int16 *)malloc(snd.buffer_size);
|
||||
if(!snd.output[0] || !snd.output[1]) return 0;
|
||||
|
||||
/* Set up buffer pointers */
|
||||
fm_buffer = (int16 **)&snd.stream[STREAM_FM_MO];
|
||||
psg_buffer = (int16 **)&snd.stream[STREAM_PSG_L];
|
||||
|
||||
/* Set up SN76489 emulation */
|
||||
SN76489_Init(0, snd.psg_clock, snd.sample_rate);
|
||||
|
||||
/* Set up YM2413 emulation */
|
||||
FM_Init();
|
||||
FM_Init();
|
||||
|
||||
/* Inform other functions that we can use sound */
|
||||
snd.enabled = 1;
|
||||
|
||||
/* Restore YM2413 register settings */
|
||||
if(restore_fm)
|
||||
{
|
||||
FM_SetContext(buf);
|
||||
free(buf);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
void sound_shutdown(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if(!snd.enabled)
|
||||
return;
|
||||
|
||||
/* Free emulated sound streams */
|
||||
for(i = 0; i < STREAM_MAX; i++)
|
||||
{
|
||||
if(snd.stream[i])
|
||||
{
|
||||
free(snd.stream[i]);
|
||||
snd.stream[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Free sound output buffers */
|
||||
for(i = 0; i < 2; i++)
|
||||
{
|
||||
if(snd.output[i])
|
||||
{
|
||||
free(snd.output[i]);
|
||||
snd.output[i] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
/* Shut down SN76489 emulation */
|
||||
SN76489_Shutdown();
|
||||
//SN76489_Shutdown();
|
||||
SN76496Exit();
|
||||
|
||||
/* Shut down YM2413 emulation */
|
||||
FM_Shutdown();
|
||||
FM_Shutdown();
|
||||
|
||||
snd.enabled = 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -145,78 +58,13 @@ void sound_reset(void)
|
|||
return;
|
||||
|
||||
/* Reset SN76489 emulator */
|
||||
SN76489_Reset(0);
|
||||
//SN76489_Reset(0);
|
||||
|
||||
/* Reset YM2413 emulator */
|
||||
FM_Reset();
|
||||
}
|
||||
|
||||
|
||||
void sound_update(int line)
|
||||
{
|
||||
int16 *fm[2], *psg[2];
|
||||
|
||||
if(!snd.enabled)
|
||||
return;
|
||||
|
||||
/* Finish buffers at end of frame */
|
||||
if(line == smptab_len - 1)
|
||||
{
|
||||
psg[0] = psg_buffer[0] + snd.done_so_far;
|
||||
psg[1] = psg_buffer[1] + snd.done_so_far;
|
||||
fm[0] = fm_buffer[0] + snd.done_so_far;
|
||||
fm[1] = fm_buffer[1] + snd.done_so_far;
|
||||
|
||||
/* Generate SN76489 sample data */
|
||||
SN76489_Update(0, psg, snd.sample_count - snd.done_so_far);
|
||||
|
||||
/* Generate YM2413 sample data */
|
||||
FM_Update(fm, snd.sample_count - snd.done_so_far);
|
||||
|
||||
/* Mix streams into output buffer */
|
||||
snd.mixer_callback(snd.stream, snd.output, snd.sample_count);
|
||||
|
||||
/* Reset */
|
||||
snd.done_so_far = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
int tinybit;
|
||||
|
||||
tinybit = smptab[line] - snd.done_so_far;
|
||||
|
||||
/* Do a tiny bit */
|
||||
psg[0] = psg_buffer[0] + snd.done_so_far;
|
||||
psg[1] = psg_buffer[1] + snd.done_so_far;
|
||||
fm[0] = fm_buffer[0] + snd.done_so_far;
|
||||
fm[1] = fm_buffer[1] + snd.done_so_far;
|
||||
|
||||
/* Generate SN76489 sample data */
|
||||
SN76489_Update(0, psg, tinybit);
|
||||
|
||||
/* Generate YM2413 sample data */
|
||||
FM_Update(fm, tinybit);
|
||||
|
||||
/* Sum total */
|
||||
snd.done_so_far += tinybit;
|
||||
}
|
||||
}
|
||||
|
||||
/* Generic FM+PSG stereo mixer callback */
|
||||
void sound_mixer_callback(int16 **stream, int16 **output, int length)
|
||||
{
|
||||
int i;
|
||||
for(i = 0; i < length; i++)
|
||||
{
|
||||
//int16 temp = (fm_buffer[0][i] + fm_buffer[1][i]) / 2; // FM is disabled.
|
||||
//output[0][i] = temp + psg_buffer[0][i];
|
||||
//output[1][i] = temp + psg_buffer[1][i];
|
||||
output[0][i] = psg_buffer[0][i];
|
||||
output[1][i] = psg_buffer[1][i];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
/* Sound chip access handlers */
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
@ -225,11 +73,8 @@ void psg_stereo_w(int data)
|
|||
{
|
||||
if(!snd.enabled)
|
||||
return;
|
||||
SN76489_GGStereoWrite(0, data);
|
||||
}
|
||||
|
||||
void stream_update(int which, int position)
|
||||
{
|
||||
//SN76489_GGStereoWrite(0, data);
|
||||
SN76496Write(0, data); // wrong - needs stereo -dink
|
||||
}
|
||||
|
||||
|
||||
|
@ -237,7 +82,8 @@ void psg_write(int data)
|
|||
{
|
||||
if(!snd.enabled)
|
||||
return;
|
||||
SN76489_Write(0, data);
|
||||
//SN76489_Write(0, data);
|
||||
SN76496Write(0, data);
|
||||
}
|
||||
|
||||
/*--------------------------------------------------------------------------*/
|
||||
|
@ -263,6 +109,3 @@ void fmunit_write(int offset, int data)
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ void fmunit_write(int offset, int data);
|
|||
int sound_init(void);
|
||||
void sound_shutdown(void);
|
||||
void sound_reset(void);
|
||||
void sound_update(int line);
|
||||
void sound_mixer_callback(int16 **stream, int16 **output, int length);
|
||||
//void sound_update(int line);
|
||||
//void sound_mixer_callback(int16 **stream, int16 **output, int length);
|
||||
|
||||
#endif /* _SOUND_H_ */
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include "smsshared.h"
|
||||
#include "burnint.h"
|
||||
#include "z80_intf.h"
|
||||
#include "sn76496.h"
|
||||
|
||||
|
||||
bitmap_t bitmap;
|
||||
|
@ -31,6 +32,7 @@ void system_frame(int skip_render)
|
|||
static int iline_table[] = {0xC0, 0xE0, 0xF0};
|
||||
int lpf = (sms.display == DISPLAY_NTSC) ? 262 : 313;
|
||||
int iline;
|
||||
INT32 nSoundBufferPos = 0;
|
||||
|
||||
/* Debounce pause key */
|
||||
if(input.system & INPUT_PAUSE)
|
||||
|
@ -100,13 +102,29 @@ void system_frame(int skip_render)
|
|||
}
|
||||
}
|
||||
|
||||
sound_update(vdp.line);
|
||||
// sound_update(vdp.line);
|
||||
// Render Sound Segment
|
||||
if (pBurnSoundOut) {
|
||||
INT32 nSegmentLength = nBurnSoundLen / lpf;
|
||||
INT16* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1);
|
||||
SN76496Update(0, pSoundBuf, nSegmentLength);
|
||||
nSoundBufferPos += nSegmentLength;
|
||||
}
|
||||
|
||||
++vdp.line;
|
||||
|
||||
if(vdp.mode <= 7)
|
||||
parse_line(vdp.line);
|
||||
}
|
||||
|
||||
// Make sure the buffer is entirely filled.
|
||||
if (pBurnSoundOut) {
|
||||
INT32 nSegmentLength = nBurnSoundLen - nSoundBufferPos;
|
||||
INT16* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1);
|
||||
if (nSegmentLength) {
|
||||
SN76496Update(0, pSoundBuf, nSegmentLength);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -114,8 +132,6 @@ void system_frame(int skip_render)
|
|||
|
||||
void system_init(void)
|
||||
{
|
||||
//error_init();
|
||||
|
||||
sms_init();
|
||||
pio_init();
|
||||
vdp_init();
|
||||
|
@ -149,9 +165,6 @@ void system_shutdown(void)
|
|||
error("SG:%04X\n", vdp.sg);
|
||||
|
||||
error("\n");*/
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
sms_shutdown();
|
||||
|
@ -159,8 +172,6 @@ void system_shutdown(void)
|
|||
vdp_shutdown();
|
||||
render_shutdown();
|
||||
sound_shutdown();
|
||||
|
||||
//error_shutdown();
|
||||
}
|
||||
|
||||
void system_reset(void)
|
||||
|
@ -184,4 +195,3 @@ void system_poweroff(void)
|
|||
}
|
||||
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue