From ab93da6faf77ce9216efea690d5dbd5dae0d81eb Mon Sep 17 00:00:00 2001 From: goyuken Date: Fri, 30 May 2014 16:50:58 +0000 Subject: [PATCH] bizswan: stuff --- .../Consoles/WonderSwan/BizSwan.cs | 57 ++++++++ .../Consoles/WonderSwan/WonderSwan.cs | 39 ++--- output/dll/bizswan.dll | Bin 231424 -> 83968 bytes wonderswan/eeprom.cpp | 2 - wonderswan/eeprom.h | 7 +- wonderswan/gfx.cpp | 5 +- wonderswan/gfx.h | 1 - wonderswan/memory.cpp | 53 +------ wonderswan/memory.h | 16 +-- wonderswan/rtc.cpp | 8 -- wonderswan/sound.cpp | 4 - wonderswan/sound.h | 2 - wonderswan/start.inc | 47 ++++++ wonderswan/system.cpp | 136 +++++++++--------- wonderswan/system.h | 4 + wonderswan/v30mz.cpp | 5 - wonderswan/v30mz.h | 1 - 17 files changed, 207 insertions(+), 180 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs index 81e10ed943..6abb0973ae 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/BizSwan.cs @@ -11,21 +11,78 @@ namespace BizHawk.Emulation.Cores.WonderSwan const CallingConvention cc = CallingConvention.Cdecl; const string dd = "bizswan.dll"; + /// + /// create new instance + /// + /// [DllImport(dd, CallingConvention = cc)] public static extern IntPtr bizswan_new(); + /// + /// delete instance, freeing all associated memory + /// + /// [DllImport(dd, CallingConvention = cc)] public static extern void bizswan_delete(IntPtr core); + /// + /// hard reset + /// + /// [DllImport(dd, CallingConvention = cc)] public static extern void bizswan_reset(IntPtr core); + /// + /// frame advance + /// + /// + /// input to use on this frame + /// true to skip all video rendering + /// uint32 video output buffer + /// int16 sound output buffer + /// [In] max hold size of soundbuff [Out] number of samples actually deposited [DllImport(dd, CallingConvention = cc)] public static extern void bizswan_advance(IntPtr core, Buttons buttons, bool novideo, int[] surface, short[] soundbuff, ref int soundbuffsize); + /// + /// load rom + /// + /// + /// + /// + /// + /// [DllImport(dd, CallingConvention = cc)] public static extern bool bizswan_load(IntPtr core, byte[] data, int length, [In] ref Settings settings); + /// + /// get size of saveram + /// + /// + /// + [DllImport(dd, CallingConvention = cc)] + public static extern int bizswan_saveramsize(IntPtr core); + + /// + /// load saveram into core + /// + /// + /// + /// should be same as bizswan_saveramsize() + /// false if size mismatch + [DllImport(dd, CallingConvention = cc)] + public static extern bool bizswan_saveramload(IntPtr core, byte[] data, int size); + + /// + /// save saveram from core + /// + /// + /// + /// should be same as bizswan_saveramsize() + /// false if size mismatch + [DllImport(dd, CallingConvention = cc)] + public static extern bool bizswan_saveramsave(IntPtr core, byte[] data, int maxsize); + [Flags] public enum Buttons : ushort { diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs index 54bea55575..ae09f88f59 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs @@ -65,6 +65,8 @@ namespace BizHawk.Emulation.Cores.WonderSwan CoreComm.VsyncNum = 3072000; // master CPU clock, also pixel clock CoreComm.VsyncDen = (144 + 15) * (224 + 32); // 144 vislines, 15 vblank lines; 224 vispixels, 32 hblank pixels + + saverambuff = new byte[BizSwan.bizswan_saveramsize(Core)]; } catch { @@ -101,6 +103,15 @@ namespace BizHawk.Emulation.Cores.WonderSwan LagCount++; } + public CoreComm CoreComm { get; private set; } + + public void ResetCounters() + { + Frame = 0; + IsLagFrame = false; + LagCount = 0; + } + IntPtr Core; public int Frame { get; private set; } @@ -114,40 +125,34 @@ namespace BizHawk.Emulation.Cores.WonderSwan #region SaveRam + byte[] saverambuff; + public byte[] ReadSaveRam() { - return new byte[0]; + if (!BizSwan.bizswan_saveramsave(Core, saverambuff, saverambuff.Length)) + throw new InvalidOperationException("bizswan_saveramsave() returned false!"); + return saverambuff; } public void StoreSaveRam(byte[] data) { - + if (!BizSwan.bizswan_saveramload(Core, data, data.Length)) + throw new InvalidOperationException("bizswan_saveramload() returned false!"); } public void ClearSaveRam() { - + throw new InvalidOperationException("A new core starts with a clear saveram. Instantiate a new core if you want this."); } public bool SaveRamModified { - get - { - return false; - } - set - { - - } + get { return BizSwan.bizswan_saveramsize(Core) > 0; } + set { throw new InvalidOperationException(); } } #endregion - public void ResetCounters() - { - throw new NotImplementedException(); - } - #region Savestates public void SaveStateText(TextWriter writer) @@ -178,8 +183,6 @@ namespace BizHawk.Emulation.Cores.WonderSwan #endregion - public CoreComm CoreComm { get; private set; } - #region Debugging public MemoryDomainList MemoryDomains diff --git a/output/dll/bizswan.dll b/output/dll/bizswan.dll index 5000718d6328ca46975533d69604198b55284c62..76a33992fc0334dd8dbab47c3d9ca9da72d10fe4 100644 GIT binary patch literal 83968 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 X+j+S%5-E&8+T&=-|M&S1;=um^o#pNA literal 231424 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 diff --git a/wonderswan/eeprom.cpp b/wonderswan/eeprom.cpp index 087915403e..03925c47ab 100644 --- a/wonderswan/eeprom.cpp +++ b/wonderswan/eeprom.cpp @@ -24,8 +24,6 @@ namespace MDFN_IEN_WSWAN { - //uint8 wsEEPROM[2048]; - //static uint8 iEEPROM[0x400]; static const uint8 iEEPROM_Init[0x400] = { 255,255,255,255,255,255,192,255,0,0,0,0, diff --git a/wonderswan/eeprom.h b/wonderswan/eeprom.h index 26d5e7b4f5..2538e39990 100644 --- a/wonderswan/eeprom.h +++ b/wonderswan/eeprom.h @@ -16,11 +16,14 @@ public: void Init(const char *Name, const uint16 BYear, const uint8 BMonth, const uint8 BDay, const uint8 Sex, const uint8 Blood); private: - uint8 wsEEPROM[2048]; - uint8 iEEPROM[0x400]; uint8 iEEPROM_Command, EEPROM_Command; uint16 iEEPROM_Address, EEPROM_Address; +public: uint32 eeprom_size; + uint8 iEEPROM[0x400]; + uint8 wsEEPROM[2048]; + + enum { ieeprom_size = 0x400 }; public: System *sys; diff --git a/wonderswan/gfx.cpp b/wonderswan/gfx.cpp index d34f238a2e..f16519b392 100644 --- a/wonderswan/gfx.cpp +++ b/wonderswan/gfx.cpp @@ -26,14 +26,11 @@ namespace MDFN_IEN_WSWAN { GFX::GFX() + :LayerEnabled(7) // 1 = bg, 2 = fg, 4 = sprite { SetPixelFormat(); } - void GFX::Init() - { - LayerEnabled = 7; // BG, FG, sprites - } void GFX::PaletteRAMWrite(uint32 ws_offset, uint8 data) { diff --git a/wonderswan/gfx.h b/wonderswan/gfx.h index 3974a4b8d1..f30709239b 100644 --- a/wonderswan/gfx.h +++ b/wonderswan/gfx.h @@ -20,7 +20,6 @@ public: void Scanline(uint32 *target); void SetPixelFormat(); - void Init(); void Reset(); void Write(uint32 A, uint8 V); uint8 Read(uint32 A); diff --git a/wonderswan/memory.cpp b/wonderswan/memory.cpp index 847798ae35..8ccef25115 100644 --- a/wonderswan/memory.cpp +++ b/wonderswan/memory.cpp @@ -289,42 +289,13 @@ namespace MDFN_IEN_WSWAN } } - /* - void Memory::Kill() - { - if((sram_size || eeprom_size) && !SkipSL) - { - - std::vector EvilRams; - - if(eeprom_size) - EvilRams.push_back(PtrLengthPair(wsEEPROM, eeprom_size)); - - if(sram_size) - EvilRams.push_back(PtrLengthPair(wsSRAM, sram_size)); - - MDFN_DumpToFile(MDFN_MakeFName(MDFNMKF_SAV, 0, "sav").c_str(), 6, EvilRams); - - } - - if(wsSRAM) - { - free(wsSRAM); - wsSRAM = NULL; - } - } - */ - - void Memory::Init(bool SkipSaveLoad, const Settings &settings) + void Memory::Init(const Settings &settings) { char tmpname[17]; std::memcpy(tmpname, settings.name, 16); tmpname[16] = 0; - language = settings.language; - SkipSL = SkipSaveLoad; - // WSwan_EEPROMInit() will also clear wsEEPROM sys->eeprom.Init(tmpname, settings.byear, settings.bmonth, settings.bday, settings.sex, settings.blood); @@ -334,28 +305,6 @@ namespace MDFN_IEN_WSWAN wsSRAM = (uint8*)malloc(sram_size); memset(wsSRAM, 0, sram_size); } - - /* TODO: SAVERAM - if((sram_size || eeprom_size) && !SkipSL) - { - gzFile savegame_fp; - - savegame_fp = gzopen(MDFN_MakeFName(MDFNMKF_SAV, 0, "sav").c_str(), "rb"); - if(savegame_fp) - { - if(eeprom_size) - gzread(savegame_fp, wsEEPROM, eeprom_size); - if(sram_size) - gzread(savegame_fp, wsSRAM, sram_size); - gzclose(savegame_fp); - } - } - */ - - //MDFNMP_AddRAM(wsRAMSize, 0x00000, wsRAM); // 65536 - - //if(sram_size) - // MDFNMP_AddRAM(sram_size, 0x10000, wsSRAM); } void Memory::Reset() diff --git a/wonderswan/memory.h b/wonderswan/memory.h index 779685768e..fc19116774 100644 --- a/wonderswan/memory.h +++ b/wonderswan/memory.h @@ -13,8 +13,7 @@ public: uint8 Read20(uint32); void Write20(uint32 address,uint8 data); - void Init(bool SkipSaveLoad, const Settings &settings); - //void Kill(); + void Init(const Settings &settings); void CheckSoundDMA(); void Reset(); @@ -22,21 +21,17 @@ public: uint8 readport(uint32 number); uint32 GetRegister(const unsigned int id, char *special, const uint32 special_len); void SetRegister(const unsigned int id, uint32 value); - -private: - bool SkipSL; // Skip save and load public: uint8 wsRAM[65536]; uint8 *wsCartROM; uint32 rom_size; uint32 sram_size; - uint32 eeprom_size; + uint8 *wsSRAM; // = NULL; uint16 WSButtonStatus; // bitfield of buttons, indeed private: - uint8 *wsSRAM; // = NULL; uint8 ButtonWhich, ButtonReadLatch; @@ -63,13 +58,6 @@ private: }; - -//extern uint8 wsRAM[65536]; -//extern uint8 *wsCartROM; -//extern uint32 eeprom_size; -//extern uint8 wsEEPROM[2048]; - - enum { MEMORY_GSREG_ROMBBSLCT = 0, diff --git a/wonderswan/rtc.cpp b/wonderswan/rtc.cpp index 643a140637..9ee167b0b9 100644 --- a/wonderswan/rtc.cpp +++ b/wonderswan/rtc.cpp @@ -23,14 +23,6 @@ namespace MDFN_IEN_WSWAN { - - /* - static uint64 CurrentTime; - static uint32 ClockCycleCounter; - static uint8 wsCA15; - static uint8 Command, Data; - */ - void RTC::Write(uint32 A, uint8 V) { switch(A) diff --git a/wonderswan/sound.cpp b/wonderswan/sound.cpp index 90300a61e9..f484d8f1e5 100644 --- a/wonderswan/sound.cpp +++ b/wonderswan/sound.cpp @@ -309,10 +309,6 @@ namespace MDFN_IEN_WSWAN Update(); } - void Sound::Init() - { - } - Sound::Sound() { for(int i = 0; i < 2; i++) diff --git a/wonderswan/sound.h b/wonderswan/sound.h index e0c9cddd04..47fc9ae3e3 100644 --- a/wonderswan/sound.h +++ b/wonderswan/sound.h @@ -15,8 +15,6 @@ public: int32 Flush(int16 *SoundBuf, const int32 MaxSoundFrames); - void Init(); - void Kill(); void SetMultiplier(double multiplier); bool SetRate(uint32 rate); diff --git a/wonderswan/start.inc b/wonderswan/start.inc index 54a871f986..c2d6d3daea 100644 --- a/wonderswan/start.inc +++ b/wonderswan/start.inc @@ -267,3 +267,50 @@ const uint8 startio[256]={ 0xd1,//fd 0xd1,//fe 0xd1};//ff + + +typedef struct +{ + const uint8 id; + const char *name; +} DLEntry; + +static const DLEntry Developers[] = + { + { 0x01, "Bandai" }, + { 0x02, "Taito" }, + { 0x03, "Tomy" }, + { 0x04, "Koei" }, + { 0x05, "Data East" }, + { 0x06, "Asmik" }, // Asmik Ace? + { 0x07, "Media Entertainment" }, + { 0x08, "Nichibutsu" }, + { 0x0A, "Coconuts Japan" }, + { 0x0B, "Sammy" }, + { 0x0C, "Sunsoft" }, + { 0x0D, "Mebius" }, + { 0x0E, "Banpresto" }, + { 0x10, "Jaleco" }, + { 0x11, "Imagineer" }, + { 0x12, "Konami" }, + { 0x16, "Kobunsha" }, + { 0x17, "Bottom Up" }, + { 0x18, "Naxat" }, // Mechanic Arms? Media Entertainment? Argh! + { 0x19, "Sunrise" }, + { 0x1A, "Cyberfront" }, + { 0x1B, "Megahouse" }, + { 0x1D, "Interbec" }, + { 0x1E, "NAC" }, + { 0x1F, "Emotion" }, // Bandai Visual?? + { 0x20, "Athena" }, + { 0x21, "KID" }, + { 0x24, "Omega Micott" }, + { 0x25, "Upstar" }, + { 0x26, "Kadokawa/Megas" }, + { 0x27, "Cocktail Soft" }, + { 0x28, "Squaresoft" }, + { 0x2B, "TomCreate" }, + { 0x2D, "Namco" }, + { 0x2F, "Gust" }, + { 0x36, "Capcom" }, +}; diff --git a/wonderswan/system.cpp b/wonderswan/system.cpp index d314822362..62b4ba7ea5 100644 --- a/wonderswan/system.cpp +++ b/wonderswan/system.cpp @@ -29,53 +29,21 @@ namespace MDFN_IEN_WSWAN { -#include "start.inc" + // maybe change? + int Debug::puts ( const char * str ) + { + return std::puts(str); + } + int Debug::printf ( const char * format, ... ) + { + va_list args; + va_start(args, format); + int ret = vprintf(format, args); + va_end(args); + return ret; + } - typedef struct - { - const uint8 id; - const char *name; - } DLEntry; - - static const DLEntry Developers[] = - { - { 0x01, "Bandai" }, - { 0x02, "Taito" }, - { 0x03, "Tomy" }, - { 0x04, "Koei" }, - { 0x05, "Data East" }, - { 0x06, "Asmik" }, // Asmik Ace? - { 0x07, "Media Entertainment" }, - { 0x08, "Nichibutsu" }, - { 0x0A, "Coconuts Japan" }, - { 0x0B, "Sammy" }, - { 0x0C, "Sunsoft" }, - { 0x0D, "Mebius" }, - { 0x0E, "Banpresto" }, - { 0x10, "Jaleco" }, - { 0x11, "Imagineer" }, - { 0x12, "Konami" }, - { 0x16, "Kobunsha" }, - { 0x17, "Bottom Up" }, - { 0x18, "Naxat" }, // Mechanic Arms? Media Entertainment? Argh! - { 0x19, "Sunrise" }, - { 0x1A, "Cyberfront" }, - { 0x1B, "Megahouse" }, - { 0x1D, "Interbec" }, - { 0x1E, "NAC" }, - { 0x1F, "Emotion" }, // Bandai Visual?? - { 0x20, "Athena" }, - { 0x21, "KID" }, - { 0x24, "Omega Micott" }, - { 0x25, "Upstar" }, - { 0x26, "Kadokawa/Megas" }, - { 0x27, "Cocktail Soft" }, - { 0x28, "Squaresoft" }, - { 0x2B, "TomCreate" }, - { 0x2D, "Namco" }, - { 0x2F, "Gust" }, - { 0x36, "Capcom" }, - }; +#include "start.inc" void System::Reset() { @@ -179,7 +147,7 @@ namespace MDFN_IEN_WSWAN } memory.sram_size = 0; - memory.eeprom_size = 0; + eeprom.eeprom_size = 0; switch(header[5]) { @@ -188,15 +156,15 @@ namespace MDFN_IEN_WSWAN case 0x03: memory.sram_size = 16 * 65536; break; case 0x04: memory.sram_size = 32 * 65536; break; // Dicing Knight! - case 0x10: memory.eeprom_size = 128; break; - case 0x20: memory.eeprom_size = 2*1024; break; - case 0x50: memory.eeprom_size = 1024; break; + case 0x10: eeprom.eeprom_size = 128; break; + case 0x20: eeprom.eeprom_size = 2*1024; break; + case 0x50: eeprom.eeprom_size = 1024; break; } //printf("%02x\n", header[5]); - if(memory.eeprom_size) - Debug::printf("EEPROM: %d bytes\n", memory.eeprom_size); + if(eeprom.eeprom_size) + Debug::printf("EEPROM: %d bytes\n", eeprom.eeprom_size); if(memory.sram_size) Debug::printf("Battery-backed RAM: %d bytes\n", memory.sram_size); @@ -229,18 +197,13 @@ namespace MDFN_IEN_WSWAN //MDFNMP_Init(16384, (1 << 20) / 1024); - cpu.init(); // TODO: control WSC setting - // TODO: rip out skipsaveload code - memory.Init(false, settings); + memory.Init(settings); - gfx.Init(); //MDFNGameInfo->fps = (uint32)((uint64)3072000 * 65536 * 256 / (159*256)); - sound.Init(); - gfx.MakeTiles(); Reset(); @@ -271,20 +234,44 @@ namespace MDFN_IEN_WSWAN { } - // maybe change? - int Debug::puts ( const char * str ) + int System::SaveRamSize() { - return std::puts(str); + return eeprom.ieeprom_size + eeprom.eeprom_size + memory.sram_size; } - int Debug::printf ( const char * format, ... ) + bool System::SaveRamLoad(const uint8 *data, int size) { - va_list args; - va_start(args, format); - int ret = vprintf(format, args); - va_end(args); - return ret; + if (size != SaveRamSize()) + return false; + + #define LOAD(sz,ptr) { if (sz) { std::memcpy((ptr), data, (sz)); data += (sz); } } + + LOAD(eeprom.ieeprom_size, eeprom.iEEPROM); + LOAD(eeprom.eeprom_size, eeprom.wsEEPROM); + LOAD(memory.sram_size, memory.wsSRAM); + + #undef LOAD + + return true; } + bool System::SaveRamSave(uint8 *dest, int maxsize) + { + if (maxsize != SaveRamSize()) + return false; + + #define SAVE(sz,ptr) { if (sz) { std::memcpy(dest, (ptr), (sz)); dest += (sz); } } + + SAVE(eeprom.ieeprom_size, eeprom.iEEPROM); + SAVE(eeprom.eeprom_size, eeprom.wsEEPROM); + SAVE(memory.sram_size, memory.wsSRAM); + + #undef SAVE + + return true; + } + + + EXPORT System *bizswan_new() @@ -312,4 +299,19 @@ namespace MDFN_IEN_WSWAN return s->Load(data, length, *settings); } + EXPORT int bizswan_saveramsize(System *s) + { + return s->SaveRamSize(); + } + + EXPORT int bizswan_saveramload(System *s, const uint8 *data, int size) + { + return s->SaveRamLoad(data, size); + } + + EXPORT int bizswan_saveramsave(System *s, uint8 *dest, int maxsize) + { + return s->SaveRamSave(dest, maxsize); + } + } diff --git a/wonderswan/system.h b/wonderswan/system.h index 9638b83d66..81c6514f5d 100644 --- a/wonderswan/system.h +++ b/wonderswan/system.h @@ -32,6 +32,10 @@ public: void Advance(uint16 buttons, bool novideo, uint32 *surface, int16 *soundbuff, int &soundbuffsize); bool Load(const uint8 *data, int length, const Settings &s); + int SaveRamSize(); + bool SaveRamLoad(const uint8 *data, int size); + bool SaveRamSave(uint8 *dest, int maxsize); + public: GFX gfx; Memory memory; diff --git a/wonderswan/v30mz.cpp b/wonderswan/v30mz.cpp index 490d308527..fbccfd5f4e 100644 --- a/wonderswan/v30mz.cpp +++ b/wonderswan/v30mz.cpp @@ -126,11 +126,6 @@ namespace MDFN_IEN_WSWAN SetupEA(); } - void V30MZ::init() - { - - } - void V30MZ::reset() { const BREGS reg_name[8] = { AL, CL, DL, BL, AH, CH, DH, BH }; diff --git a/wonderswan/v30mz.h b/wonderswan/v30mz.h index 761b28b721..400a4d0cf5 100644 --- a/wonderswan/v30mz.h +++ b/wonderswan/v30mz.h @@ -46,7 +46,6 @@ public: void set_reg(int, unsigned); unsigned get_reg(int regnum); void reset(); - void init(); void interrupt(uint32 vector, bool IgnoreIF = FALSE);