📄 smashtv.c
字号:
WRITE_WORD(&GFX_ROM[i+2],(unsigned int)((unsigned int)(d1) | ((unsigned int)(d2)<<8)));
}
free(Machine->memory_region[2]);
Machine->memory_region[2] = 0;
}
static void load_adpcm_roms_512k(void)
{
unsigned char *mem_reg4;
unsigned char *mem_reg5;
unsigned char *mem_reg6;
mem_reg4 = Machine->memory_region[4];
mem_reg5 = Machine->memory_region[5];
mem_reg6 = Machine->memory_region[6];
memcpy(mem_reg4+0x40000, mem_reg4+0x00000, 0x40000); /* copy u12 */
memcpy(mem_reg5+0x60000, mem_reg4+0x00000, 0x20000); /* copy u12 */
memcpy(mem_reg5+0x20000, mem_reg4+0x20000, 0x20000); /* copy u12 */
memcpy(mem_reg6+0x60000, mem_reg4+0x00000, 0x20000); /* copy u12 */
memcpy(mem_reg6+0x20000, mem_reg4+0x20000, 0x20000); /* copy u12 */
memcpy(mem_reg6+0x40000, mem_reg5+0x00000, 0x20000); /* copy u13 */
memcpy(mem_reg6+0x00000, mem_reg5+0x40000, 0x20000); /* copy u13 */
}
static void wms_modify_pen(int i, int rgb)
{
extern unsigned short *shrinked_pens;
#define rgbpenindex(r,g,b) ((Machine->scrbitmap->depth==16) ? ((((r)>>3)<<10)+(((g)>>3)<<5)+((b)>>3)) : ((((r)>>5)<<5)+(((g)>>5)<<2)+((b)>>6)))
int r,g,b;
r = (rgb >> 10) & 0x1f;
g = (rgb >> 5) & 0x1f;
b = (rgb >> 0) & 0x1f;
r = (r << 3) | (r >> 2);
g = (g << 3) | (g >> 2);
b = (b << 3) | (b >> 2);
Machine->pens[i] = shrinked_pens[rgbpenindex(r,g,b)];
}
static void wms_8bit_paletteram_xRRRRRGGGGGBBBBB_word_w(int offset,int data)
{
int i;
int oldword = READ_WORD(&paletteram[offset]);
int newword = COMBINE_WORD(oldword,data);
int base = offset / 2;
WRITE_WORD(&paletteram[offset],newword);
for (i = 0; i < 8; i++)
{
wms_modify_pen(base | (i << 13), newword);
}
}
static void wms_6bit_paletteram_xRRRRRGGGGGBBBBB_word_w(int offset,int data)
{
/*
* the palette entry to find is mapped like this:
* Bit 15 - Not Used
* Bit 14 - Not Used
* Bit 13 - Not Used
* Bit 12 - Not Used
* Bit 11 - PAL Bit 03
* Bit 10 - PAL Bit 02
* Bit 09 - PAL Bit 01
* Bit 08 - PAL Bit 00
* Bit 07 - PAL Bit 07
* Bit 06 - PAL Bit 06
* Bit 05 - DATA Bit 05
* Bit 04 - DATA Bit 04
* Bit 03 - DATA Bit 03
* Bit 02 - DATA Bit 02
* Bit 01 - DATA Bit 01
* Bit 00 - DATA Bit 00
*/
int i;
int oldword = READ_WORD(&paletteram[offset]);
int newword = COMBINE_WORD(oldword,data);
int base = offset / 2;
base = (base & 0xf3f) | ((base & 0xc0) << 8);
WRITE_WORD(&paletteram[offset],newword);
for (i = 0; i < 16; i++)
{
wms_modify_pen(base | ((i & 3) << 6) | ((i & 0x0c) << 10), newword);
}
}
static void wms_4bit_paletteram_xRRRRRGGGGGBBBBB_word_w(int offset,int data)
{
/*
* the palette entry to find is mapped like this:
* Bit 07 - PAL Bit 07
* Bit 06 - PAL Bit 06
* Bit 05 - PAL Bit 05
* Bit 04 - PAL Bit 04
* Bit 03 - DATA Bit 03
* Bit 02 - DATA Bit 02
* Bit 01 - DATA Bit 01
* Bit 00 - DATA Bit 00
*/
int i;
int oldword = READ_WORD(&paletteram[offset]);
int newword = COMBINE_WORD(oldword,data);
int base = offset / 2;
base = (base & 0x0f) | ((base & 0xf0) << 8);
WRITE_WORD(&paletteram[offset],newword);
for (i = 0; i < 256; i++)
{
wms_modify_pen(base | (i << 4), newword);
}
}
static void init_8bit(void)
{
install_mem_write_handler(0, TOBYTE(0x01800000), TOBYTE(0x0181ffff), wms_8bit_paletteram_xRRRRRGGGGGBBBBB_word_w);
install_mem_read_handler (0, TOBYTE(0x01800000), TOBYTE(0x0181ffff), paletteram_word_r);
}
static void init_6bit(void)
{
install_mem_write_handler(0, TOBYTE(0x01810000), TOBYTE(0x0181ffff), wms_6bit_paletteram_xRRRRRGGGGGBBBBB_word_w);
install_mem_read_handler (0, TOBYTE(0x01810000), TOBYTE(0x0181ffff), paletteram_word_r);
}
static void init_4bit(void)
{
install_mem_write_handler(0, TOBYTE(0x0181f000), TOBYTE(0x0181ffff), wms_4bit_paletteram_xRRRRRGGGGGBBBBB_word_w);
install_mem_read_handler (0, TOBYTE(0x0181f000), TOBYTE(0x0181ffff), paletteram_word_r);
}
/* driver_init functions */
void narc_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x0101b300), TOBYTE(0x0101b31f), narc_speedup_r);
install_mem_read_handler(1, 0x0228, 0x0228, narc_music_speedup_r);
install_mem_read_handler(2, 0x0228, 0x0228, narc_digitizer_speedup_r);
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x1000000));
}
void trog_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x010a20a0), TOBYTE(0x010a20bf), trog_speedup_r);
install_mem_read_handler(1, 0x0218, 0x0218, smashtv_sound_speedup_r);
wms_protect_s = 0xffe47c40;
wms_protect_d = 0xffe47af0;
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x1000000));
}
void trog3_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x010a2080), TOBYTE(0x010a209f), trog3_speedup_r);
install_mem_read_handler(1, 0x0218, 0x0218, smashtv_sound_speedup_r);
wms_protect_s = 0xffe47c70;
wms_protect_d = 0xffe47b20;
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x1000000));
}
void trogp_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x010a1ee0), TOBYTE(0x010a1eff), trogp_speedup_r);
install_mem_read_handler(1, 0x0218, 0x0218, smashtv_sound_speedup_r);
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x1000000));
}
void smashtv_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x01086760), TOBYTE(0x0108677f), smashtv_speedup_r);
install_mem_read_handler(1, 0x0218, 0x0218, smashtv_sound_speedup_r);
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x01000000));
}
void hiimpact_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x01053140), TOBYTE(0x0105315f), hiimpact_speedup_r);
install_mem_read_handler(1, 0x0218, 0x0218, smashtv_sound_speedup_r);
wms_protect_s = 0xffe77c20;
wms_protect_d = 0xffe77ad0;
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x1000000));
}
void shimpact_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x01052060), TOBYTE(0x0105207f), shimpact_speedup_r);
install_mem_read_handler(1, 0x0218, 0x0218, smashtv_sound_speedup_r);
wms_protect_s = 0xffe07a40;
wms_protect_d = 0xffe078f0;
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x1000000));
}
void strkforc_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x01071dc0), TOBYTE(0x01071ddf), strkforc_speedup_r);
install_mem_read_handler(1, 0x0218, 0x0218, smashtv_sound_speedup_r);
wms_protect_s = 0xffe4c100;
wms_protect_d = 0xffe4c1d0;
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x1000000));
}
void mk_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x0104f040), TOBYTE(0x0104f05f), mk_speedup_r);
install_mem_read_handler(1, 0x0218, 0x0218, mk_sound_speedup_r);
wms_protect_s = 0xffc98930;
wms_protect_d = 0xffc987f0;
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x1000000));
}
void term2_driver_init(void)
{
/* extra input handler */
install_mem_read_handler(0, TOBYTE(0x01600020), TOBYTE(0x0160005f), term2_input_lo_r ); /* ??? */
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x010aa040), TOBYTE(0x010aa05f), term2_speedup_r);
install_mem_read_handler(1, 0x0218, 0x0218, mk_sound_speedup_r);
wms_protect_s = 0xffd64f30;
wms_protect_d = 0xffd64de0;
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x1000000));
}
void totcarn_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x0107dde0), TOBYTE(0x0107ddff), totcarn_speedup_r);
install_mem_read_handler(1, 0x0218, 0x0218, mk_sound_speedup_r);
wms_protect_s = 0xffd1fd30;
wms_protect_d = 0xffd1fbf0;
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x1000000));
}
void totcarnp_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x0107dde0), TOBYTE(0x0107ddff), totcarn_speedup_r);
install_mem_read_handler(1, 0x0218, 0x0218, mk_sound_speedup_r);
wms_protect_s = 0xffd1edd0;
wms_protect_d = 0xffd1ec90;
TMS34010_set_stack_base(0, SCRATCH_RAM, TOBYTE(0x1000000));
}
void mk2_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x01068e60), TOBYTE(0x01068e7f), mk2_speedup_r);
}
void nbajam_driver_init(void)
{
/* set up speedup loops */
install_mem_read_handler(0, TOBYTE(0x010754c0), TOBYTE(0x010754df), nbajam_speedup_r);
}
/* init_machine functions */
void narc_init_machine(void)
{
/*
* Z-Unit
*
* music board is 6809 driving YM2151, DAC
* effect board is 6809 driving CVSD, DAC
*
*/
/* set up ROMs */
if (!wms_rom_loaded)
{
wms_load_code_roms();
load_gfx_roms_8bit();
wms_rom_loaded = 1;
}
/* set up palette */
init_8bit();
/* get rid of unmapped access errors during tests */
remove_access_errors();
/* set up sound board */
narc_music_bank_select_w(0,0);
narc_digitizer_bank_select_w(0,0);
m6809_Flags = M6809_FAST_S;
install_mem_write_handler(0, TOBYTE(0x01e00000), TOBYTE(0x01e0001f), narc_sound_w);
/* special input handler */
install_mem_read_handler(0, TOBYTE(0x01c00000), TOBYTE(0x01c0005f), narc_input_r );
install_mem_read_handler(0, TOBYTE(0x09afffd0), TOBYTE(0x09afffef), narc_unknown_r); /* bug? */
install_mem_read_handler(0, TOBYTE(0x38383900), TOBYTE(0x383839ff), narc_unknown_r); /* bug? */
TMS34010_set_shiftreg_functions(0, wms_to_shiftreg, wms_from_shiftreg);
}
void smashtv_init_machine(void)
{
/*
* Y-Unit
*
* sound board is 6809 driving YM2151, DAC, and CVSD
*
*/
/* set up ROMs */
if (!wms_rom_loaded)
{
wms_load_code_roms();
load_gfx_roms_6bit();
wms_rom_loaded = 1;
}
/* set up palette */
init_6bit();
/* get rid of unmapped access errors during tests */
remove_access_errors();
/* set up sound board */
smashtv_sound_bank_select_w(0,0);
m6809_Flags = M6809_FAST_NONE;
pia_startup (&smashtv_pia_intf);
pia_1_ca1_w (0, (1));
install_mem_write_handler(0, TOBYTE(0x01e00000), TOBYTE(0x01e0001f), smashtv_sound_w);
TMS34010_set_shiftreg_functions(0, wms_to_shiftreg, wms_from_shiftreg);
}
void mk_init_machine(void)
{
/*
* Y-Unit
*
* sound board is 6809 driving YM2151, DAC, and OKIM6295
*
*/
/* set up ROMs */
if (!wms_rom_loaded)
{
wms_load_code_roms();
load_gfx_roms_6bit();
load_adpcm_roms_512k();
wms_rom_loaded = 1;
}
/* set up palette */
init_6bit();
/* get rid of unmapped access errors during tests */
remove_access_errors();
/* set up sound board */
mk_sound_bank_select_w(0,0);
m6809_Flags = M6809_FAST_NONE;
install_mem_write_handler(0, TOBYTE(0x01e00000), TOBYTE(0x01e0001f), mk_sound_w);
TMS34010_set_shiftreg_functions(0, wms_to_shiftreg, wms_from_shiftreg);
}
void trog_init_machine(void)
{
/*
* Y-Unit
*
* sound board is 6809 driving YM2151, DAC, and OKIM6295
*
*/
/* set up ROMs */
if (!wms_rom_loaded)
{
wms_load_code_roms();
load_gfx_roms_4bit();
wms_rom_loaded = 1;
}
/* set up palette */
init_4bit();
/* get rid of unmapped access errors during tests */
remove_access_errors();
/* set up sound board */
smashtv_sound_bank_select_w(0,0);
m6809_Flags = M6809_FAST_NONE;
pia_startup (&smashtv_pia_intf);
pia_1_ca1_w (0, (1));
/* fix sound (hack) */
install_mem_write_handler(0, TOBYTE(0x01e00000), TOBYTE(0x01e0001f), trog_sound_w);
TMS34010_set_shiftreg_functions(0, wms_to_shiftreg, wms_from_shiftreg);
}
void mk2_init_machine(void)
{
unsigned int i,j;
if (!wms_rom_loaded)
{
wms_load_code_roms();
load_gfx_roms_8bit();
wms_rom_loaded = 1;
}
/* set up palette */
init_8bit();
/*for (i=0;i<256;i++)
{
for (j=0;j<256;j++)
{
wms_conv_table[(i<<8)+j] = ((i&0x1f)<<8) | j;
}
}*/
wms_videoram_size = 0x80000*2;
TMS34010_set_shiftreg_functions(0, wms_to_shiftreg, wms_from_shiftreg);
}
void nbajam_init_machine(void)
{
unsigned int i,j;
if (!wms_rom_loaded)
{
wms_load_code_roms();
load_gfx_roms_8bit();
wms_rom_loaded = 1;
}
/* set up palette */
init_8bit();
/*for (i=0;i<256;i++)
{
for (j=0;j<256;j++)
{
wms_conv_table[(i<<8)+j] = ((i&0x1f)<<8) | j;
}
}*/
wms_videoram_size = 0x80000*2;
/* set up sound board */
mk_sound_bank_select_w(0,0);
m6809_Flags = M6809_FAST_NONE;
TMS34010_set_shiftreg_functions(0, wms_to_shiftreg, wms_from_shiftreg);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -