diff --git a/src/burn/drv/sms/d_sms.cpp b/src/burn/drv/sms/d_sms.cpp index 416bb4344..5b7b492d5 100644 --- a/src/burn/drv/sms/d_sms.cpp +++ b/src/burn/drv/sms/d_sms.cpp @@ -20,7 +20,6 @@ UINT8 SMSDips[3]; static struct BurnDIPInfo SMSDIPList[] = { {0x3d, 0xff, 0xff, 0x00, NULL }, - }; STDDIPINFO(SMS) @@ -63,9 +62,13 @@ static INT32 MemIndex() return 0; } +INT32 SMSInit(); + static INT32 DrvDoReset() { memset (AllRam, 0, RamEnd - AllRam); + vdp_init(); // gets rid of crap on the screen w/GG + render_init(); // "" sms_reset(); return 0; @@ -288,10 +291,11 @@ static INT32 load_rom() } } - /* Figure out game image type */ - //if(stricmp(strrchr(game_name, '.'), ".gg") == 0) <- this causes crash -dink - // sms.console = CONSOLE_GG; - //else + /* Figure out game image type */ + if (strstr(BurnDrvGetTextA(DRV_NAME), "sms_ggaleste")) { + sms.console = CONSOLE_GG; // Temp. hack for GG Aleste, since GG games aren't "officially" supported yet. + } + else sms.console = CONSOLE_SMS; system_assign_device(PORT_A, DEVICE_PAD2B); @@ -737,6 +741,25 @@ struct BurnDriver BurnDrvsms_aleste2gg2sms = { 256, 192, 4, 3 }; +// GG Aleste + +static struct BurnRomInfo sms_alesteggRomDesc[] = { + { "gg aleste (japan).bin", 0x40000, 0x1b80a75b, BRF_PRG | BRF_ESS }, +}; + +STD_ROM_PICK(sms_alestegg) +STD_ROM_FN(sms_alestegg) + +struct BurnDriver BurnDrvsms_alestegg = { + "sms_ggaleste", NULL, NULL, NULL, "1993", + "Aleste GG\0", NULL, "Sega", "Sega Mastersystem", + NULL, NULL, NULL, NULL, + BDF_GAME_WORKING, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0, + SMSGetZipName, sms_alesteggRomInfo, sms_alesteggRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo, + SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000, + 256, 192, 4, 3 +}; + // Alex Kidd BMX Trial (Jpn) diff --git a/src/burn/drv/sms/sms.cpp b/src/burn/drv/sms/sms.cpp index 628553a9f..c3138281a 100644 --- a/src/burn/drv/sms/sms.cpp +++ b/src/burn/drv/sms/sms.cpp @@ -89,9 +89,6 @@ void sms_init(void) case CONSOLE_SMS: ZetSetOutHandler(sms_port_w); ZetSetInHandler(sms_port_r); - //bprintf(0, _T("sms!\n")); - //smscpu_writeport16 = sms_port_w; - //smscpu_readport16 = sms_port_r; break; case CONSOLE_SMSJ: @@ -106,8 +103,8 @@ void sms_init(void) break; case CONSOLE_GG: - //smscpu_writeport16 = gg_port_w; - //smscpu_readport16 = gg_port_r; + ZetSetOutHandler(gg_port_w); + ZetSetInHandler(gg_port_r); data_bus_pullup = 0xFF; break; @@ -144,8 +141,8 @@ void sms_reset(void) ZetOpen(0); /* Clear SMS context */ - memset(dummy_write, 0, sizeof(dummy_write)); - memset(sms.wram, 0, sizeof(sms.wram)); + memset(&dummy_write, 0, sizeof(dummy_write)); + memset(&sms.wram, 0, sizeof(sms.wram)); memset(cart.sram, 0, sizeof(cart.sram)); sms.paused = 0x00; @@ -432,7 +429,7 @@ UINT8 smsj_port_r(UINT16 port) /* Game Gear port handlers */ /*--------------------------------------------------------------------------*/ -void gg_port_w(UINT16 port, UINT8 data) +void _fastcall gg_port_w(UINT16 port, UINT8 data) { port &= 0xFF; @@ -464,7 +461,7 @@ void gg_port_w(UINT16 port, UINT8 data) } -UINT8 gg_port_r(UINT16 port) +UINT8 _fastcall gg_port_r(UINT16 port) { port &= 0xFF; diff --git a/src/burn/drv/sms/sms.h b/src/burn/drv/sms/sms.h index a31b7eac8..892315430 100644 --- a/src/burn/drv/sms/sms.h +++ b/src/burn/drv/sms/sms.h @@ -109,8 +109,8 @@ void sms_mapper8k_w(INT32 address, UINT8 data); /* port-map Function prototypes */ uint8 z80_read_unmapped(void); -void gg_port_w(uint16 port, uint8 data); -uint8 gg_port_r(uint16 port); +void _fastcall gg_port_w(UINT16 port, UINT8 data); +UINT8 _fastcall gg_port_r(UINT16 port); void ggms_port_w(uint16 port, uint8 data); uint8 ggms_port_r(uint16 port); void _fastcall sms_port_w(UINT16 port, UINT8 data); diff --git a/src/burn/drv/sms/smsrender.cpp b/src/burn/drv/sms/smsrender.cpp index 34db4df39..4dcc380be 100644 --- a/src/burn/drv/sms/smsrender.cpp +++ b/src/burn/drv/sms/smsrender.cpp @@ -17,7 +17,7 @@ void (*render_obj)(int line) = NULL; uint8 *linebuf; /* Internal buffer for drawing non 8-bit displays */ -uint8 internal_buffer[0x100]; +uint8 internal_buffer[0x200]; /* Precalculated pixel table */ uint16 pixel[PALETTE_SIZE]; @@ -108,6 +108,8 @@ void render_init(void) int bx, sx, b, s, bp, bf, sf, c; make_tms_tables(); + memset(&lut, 0, sizeof(lut)); + memset(&bp_lut, 0, sizeof(bp_lut)); /* Generate 64k of data for the look up table */ for(bx = 0; bx < 0x100; bx++) @@ -218,7 +220,7 @@ void render_reset(void) int i; /* Clear display bitmap */ - memset(bitmap.data, 0, bitmap.pitch * bitmap.height); + memset(bitmap.data, 0, bitmap.width * bitmap.height); /* Clear palette */ for(i = 0; i < PALETTE_SIZE; i++) @@ -227,11 +229,11 @@ void render_reset(void) } /* Invalidate pattern cache */ - memset(bg_name_dirty, 0, sizeof(bg_name_dirty)); - memset(bg_name_list, 0, sizeof(bg_name_list)); + memset(&bg_name_dirty, 0, sizeof(bg_name_dirty)); + memset(&bg_name_list, 0, sizeof(bg_name_list)); bg_list_index = 0; - memset(bg_pattern_cache, 0, sizeof(bg_pattern_cache)); - + memset(&bg_pattern_cache, 0, sizeof(bg_pattern_cache)); + memset(&internal_buffer, 0, sizeof(internal_buffer)); /* Pick render routine */ render_bg = render_bg_sms; render_obj = render_obj_sms; @@ -251,7 +253,11 @@ void render_line(int line) /* Update pattern cache */ update_bg_pattern_cache(); - /* Blank line (full width) */ + /* Blank line (full width) */ + if((IS_GG) && line < 8) { // fix for crap at top of screen in GG -dink + //char bg = (char)linebuf[0]; + memset(linebuf, 0, bitmap.width); + } else if(!(vdp.reg[1] & 0x40)) { memset(linebuf, BACKDROP_COLOR, bitmap.width); @@ -263,8 +269,8 @@ void render_line(int line) render_bg(line); /* Draw sprites */ - if(render_obj != NULL) - render_obj(line); + if(render_obj != NULL) + render_obj(line); /* Blank leftmost column of display */ if(vdp.reg[0] & 0x20) @@ -597,7 +603,7 @@ void palette_sync(int index, int force) void remap_8_to_16(int line) { - if (line > nScreenHeight) return; + if (line > nScreenHeight) return; int i; uint16 *p = (uint16 *)&bitmap.data[(line * bitmap.pitch)]; for(i = bitmap.viewport.x; i < bitmap.viewport.w + bitmap.viewport.x; i++) diff --git a/src/burn/drv/sms/smsrender.h b/src/burn/drv/sms/smsrender.h index 654de9494..fa70f44e6 100644 --- a/src/burn/drv/sms/smsrender.h +++ b/src/burn/drv/sms/smsrender.h @@ -13,7 +13,7 @@ extern uint8 gg_cram_expand_table[16]; extern void (*render_bg)(int line); extern void (*render_obj)(int line); extern uint8 *linebuf; -extern uint8 internal_buffer[0x100]; +extern uint8 internal_buffer[0x200]; extern uint16 pixel[]; extern uint8 bg_name_dirty[0x200]; extern uint16 bg_name_list[0x200]; diff --git a/src/burn/drv/sms/smssound.cpp b/src/burn/drv/sms/smssound.cpp index 6f72ee14c..4d526af8d 100644 --- a/src/burn/drv/sms/smssound.cpp +++ b/src/burn/drv/sms/smssound.cpp @@ -42,7 +42,6 @@ void sound_shutdown(void) return; /* Shut down SN76489 emulation */ - //SN76489_Shutdown(); SN76496Exit(); /* Shut down YM2413 emulation */ @@ -58,7 +57,7 @@ void sound_reset(void) return; /* Reset SN76489 emulator */ - //SN76489_Reset(0); + SN76496Reset(); /* Reset YM2413 emulator */ FM_Reset(); @@ -73,8 +72,8 @@ void psg_stereo_w(int data) { if(!snd.enabled) return; - //SN76489_GGStereoWrite(0, data); - SN76496Write(0, data); // wrong - needs stereo -dink + + SN76496StereoWrite(0, data); } @@ -82,7 +81,7 @@ void psg_write(int data) { if(!snd.enabled) return; - //SN76489_Write(0, data); + SN76496Write(0, data); }