diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs index 11380c9bb2..727dc8faf3 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Pizza.cs @@ -21,8 +21,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy public Pizza(byte[] rom, CoreComm comm) :base(comm, new Configuration { - DefaultWidth = 256, - DefaultHeight = 224, + DefaultWidth = 160, + DefaultHeight = 144, MaxWidth = 256, MaxHeight = 224, MaxSamples = 1024, @@ -34,11 +34,11 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy _pizza = PreInit(new PeRunnerOptions { Filename = "pizza.wbx", - SbrkHeapSizeKB = 2 * 1024, - InvisibleHeapSizeKB = 16 * 1024, - SealedHeapSizeKB = 16 * 1024, - PlainHeapSizeKB = 16 * 1024, - MmapHeapSizeKB = 32 * 1024 + SbrkHeapSizeKB = 128, + InvisibleHeapSizeKB = 16, + SealedHeapSizeKB = 5 * 1024, + PlainHeapSizeKB = 16, + MmapHeapSizeKB = 0 }); var spc = comm.CoreFileProvider.GetFirmware("SGB", "SPC", true); @@ -51,8 +51,11 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy PostInit(); if (_sgb) + { VsyncNumerator = TICKSPERSECOND_SGB; - + BufferWidth = 256; + BufferHeight = 224; + } Console.WriteLine("Pizza Initialized: CGB {0} SGB {1}", IsCGBMode(), IsSGBMode()); } diff --git a/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs b/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs index aced1aff19..bf4d53b29c 100644 --- a/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs +++ b/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs @@ -335,8 +335,8 @@ namespace BizHawk.Emulation.Cores.Waterbox protected readonly int[] _videoBuffer; public virtual int VirtualWidth => BufferWidth; public virtual int VirtualHeight => BufferWidth; - public int BufferWidth { get; private set; } - public int BufferHeight { get; private set; } + public int BufferWidth { get; protected set; } + public int BufferHeight { get; protected set; } public virtual int VsyncNumerator { get; protected set; } public virtual int VsyncDenominator { get; protected set; } public int BackgroundColor => unchecked((int)0xff000000); diff --git a/output/dll/pizza.wbx.gz b/output/dll/pizza.wbx.gz index e97c2e45db..d10f4e571d 100644 Binary files a/output/dll/pizza.wbx.gz and b/output/dll/pizza.wbx.gz differ diff --git a/waterbox/pizza/lib/cartridge.c b/waterbox/pizza/lib/cartridge.c index bd894a112d..8a69fefe30 100644 --- a/waterbox/pizza/lib/cartridge.c +++ b/waterbox/pizza/lib/cartridge.c @@ -26,148 +26,208 @@ #include "mmu.h" #include "utils.h" -/* buffer big enough to contain the largest possible ROM */ -uint8_t rom[2 << 24]; - -/* battery backed RAM & RTC*/ -char file_sav[1024]; -char file_rtc[1024]; - /* guess what */ /* return values */ /* 0: OK */ /* 1: Can't open/read file */ /* 2: Unknown cartridge */ -char cartridge_load(const void* data, size_t sz) +char cartridge_load(const void *data, size_t sz) { - int i,z = 0; + int i, z = 0; - if (sz < 1 || sz > 2 << 24) - return 1; + if (sz < 1 || sz > 1 << 22) + return 1; - memcpy(rom, data, sz); + const uint8_t *rom = (const uint8_t *)data; - /* gameboy color? */ - if (rom[0x143] == 0xC0 || rom[0x143] == 0x80) - { - utils_log("Gameboy Color cartridge\n"); - global_cgb = 1; - } - else - { - utils_log("Gameboy Classic cartridge\n"); - global_cgb = 0; - } + /* gameboy color? */ + if (rom[0x143] == 0xC0 || rom[0x143] == 0x80) + { + utils_log("Gameboy Color cartridge\n"); + global_cgb = 1; + } + else + { + utils_log("Gameboy Classic cartridge\n"); + global_cgb = 0; + } - /* get cartridge infos */ - uint8_t mbc = rom[0x147]; + /* get cartridge infos */ + uint8_t mbc = rom[0x147]; - utils_log("Cartridge code: %02x\n", mbc); + utils_log("Cartridge code: %02x\n", mbc); - switch (mbc) - { - case 0x00: utils_log("ROM ONLY\n"); break; - case 0x01: utils_log("MBC1\n"); break; - case 0x02: utils_log("MBC1 + RAM\n"); break; - case 0x03: utils_log("MBC1 + RAM + BATTERY\n"); break; - case 0x05: utils_log("MBC2\n"); break; - case 0x06: mmu_init_ram(512); utils_log("MBC2 + BATTERY\n"); break; - case 0x10: utils_log("MBC3 + TIMER + RAM + BATTERY\n"); break; - case 0x11: utils_log("MBC3\n"); break; - case 0x12: utils_log("MBC3 + RAM\n"); break; - case 0x13: utils_log("MBC3 + RAM + BATTERY\n"); break; - case 0x19: utils_log("MBC5\n"); break; - case 0x1A: utils_log("MBC5 + RAM\n"); break; - case 0x1B: utils_log("MBC5 + RAM + BATTERY\n"); break; - case 0x1C: global_rumble = 1; - utils_log("MBC5 + RUMBLE\n"); - break; - case 0x1D: global_rumble = 1; - utils_log("MBC5 + RUMBLE + RAM\n"); - break; - case 0x1E: global_rumble = 1; - utils_log("MBC5 + RUMBLE + RAM + BATTERY\n"); - break; + switch (mbc) + { + case 0x00: + utils_log("ROM ONLY\n"); + break; + case 0x01: + utils_log("MBC1\n"); + break; + case 0x02: + utils_log("MBC1 + RAM\n"); + break; + case 0x03: + utils_log("MBC1 + RAM + BATTERY\n"); + break; + case 0x05: + utils_log("MBC2\n"); + break; + case 0x06: + mmu_init_ram(512); + utils_log("MBC2 + BATTERY\n"); + break; + case 0x10: + utils_log("MBC3 + TIMER + RAM + BATTERY\n"); + break; + case 0x11: + utils_log("MBC3\n"); + break; + case 0x12: + utils_log("MBC3 + RAM\n"); + break; + case 0x13: + utils_log("MBC3 + RAM + BATTERY\n"); + break; + case 0x19: + utils_log("MBC5\n"); + break; + case 0x1A: + utils_log("MBC5 + RAM\n"); + break; + case 0x1B: + utils_log("MBC5 + RAM + BATTERY\n"); + break; + case 0x1C: + global_rumble = 1; + utils_log("MBC5 + RUMBLE\n"); + break; + case 0x1D: + global_rumble = 1; + utils_log("MBC5 + RUMBLE + RAM\n"); + break; + case 0x1E: + global_rumble = 1; + utils_log("MBC5 + RUMBLE + RAM + BATTERY\n"); + break; - default: utils_log("Unknown cartridge type: %02x\n", mbc); - return 2; - } + default: + utils_log("Unknown cartridge type: %02x\n", mbc); + return 2; + } - /* title */ - for (i=0x134; i<0x143; i++) - if (rom[i] > 0x40 && rom[i] < 0x5B) - global_cart_name[z++] = rom[i]; + /* title */ + for (i = 0x134; i < 0x143; i++) + if (rom[i] > 0x40 && rom[i] < 0x5B) + global_cart_name[z++] = rom[i]; - global_cart_name[z] = '\0'; + global_cart_name[z] = '\0'; - utils_log("%s\n", global_cart_name); + utils_log("%s\n", global_cart_name); - /* get ROM banks */ - uint8_t byte = rom[0x148]; + /* get ROM banks */ + uint8_t byte = rom[0x148]; - utils_log("ROM: "); + utils_log("ROM: "); - switch (byte) - { - case 0x00: utils_log("0 banks\n"); break; - case 0x01: utils_log("4 banks\n"); break; - case 0x02: utils_log("8 banks\n"); break; - case 0x03: utils_log("16 banks\n"); break; - case 0x04: utils_log("32 banks\n"); break; - case 0x05: utils_log("64 banks\n"); break; - case 0x06: utils_log("128 banks\n"); break; - case 0x07: utils_log("256 banks\n"); break; - case 0x52: utils_log("72 banks\n"); break; - case 0x53: utils_log("80 banks\n"); break; - case 0x54: utils_log("96 banks\n"); break; - } + switch (byte) + { + case 0x00: + utils_log("0 banks\n"); + break; + case 0x01: + utils_log("4 banks\n"); + break; + case 0x02: + utils_log("8 banks\n"); + break; + case 0x03: + utils_log("16 banks\n"); + break; + case 0x04: + utils_log("32 banks\n"); + break; + case 0x05: + utils_log("64 banks\n"); + break; + case 0x06: + utils_log("128 banks\n"); + break; + case 0x07: + utils_log("256 banks\n"); + break; + case 0x52: + utils_log("72 banks\n"); + break; + case 0x53: + utils_log("80 banks\n"); + break; + case 0x54: + utils_log("96 banks\n"); + break; + } - /* init MMU */ - mmu_init(mbc, byte); + /* init MMU */ + mmu_init(mbc, byte); - /* get RAM banks */ - byte = rom[0x149]; + /* get RAM banks */ + byte = rom[0x149]; - utils_log("RAM: "); + utils_log("RAM: "); - switch (byte) - { - case 0x00: utils_log("NO RAM\n"); break; - case 0x01: mmu_init_ram(1 << 11); utils_log("2 kB\n"); break; - case 0x02: - /* MBC5 got bigger values */ - if (mbc >= 0x19 && mbc <= 0x1E) - { - mmu_init_ram(1 << 16); - utils_log("64 kB\n"); - } - else - { - mmu_init_ram(1 << 13); - utils_log("8 kB\n"); - } - break; - case 0x03: mmu_init_ram(1 << 15); utils_log("32 kB\n"); break; - case 0x04: mmu_init_ram(1 << 17); utils_log("128 kB\n"); break; - case 0x05: mmu_init_ram(1 << 16); utils_log("64 kB\n"); break; - } + switch (byte) + { + case 0x00: + utils_log("NO RAM\n"); + break; + case 0x01: + mmu_init_ram(1 << 11); + utils_log("2 kB\n"); + break; + case 0x02: + /* MBC5 got bigger values */ + if (mbc >= 0x19 && mbc <= 0x1E) + { + mmu_init_ram(1 << 16); + utils_log("64 kB\n"); + } + else + { + mmu_init_ram(1 << 13); + utils_log("8 kB\n"); + } + break; + case 0x03: + mmu_init_ram(1 << 15); + utils_log("32 kB\n"); + break; + case 0x04: + mmu_init_ram(1 << 17); + utils_log("128 kB\n"); + break; + case 0x05: + mmu_init_ram(1 << 16); + utils_log("64 kB\n"); + break; + } - /* restore saved RAM if it's the case */ - mmu_restore_ram(file_sav); + /* restore saved RAM if it's the case */ + //mmu_restore_ram(file_sav); - /* restore saved RTC if it's the case */ - mmu_restore_rtc(file_rtc); + /* restore saved RTC if it's the case */ + //mmu_restore_rtc(file_rtc); - /* load FULL ROM at 0x0000 address of system memory */ - mmu_load_cartridge(rom, sz); + /* load FULL ROM at 0x0000 address of system memory */ + mmu_load_cartridge(rom, sz); - return 0; + return 0; } -void cartridge_term() +/*void cartridge_term() { - /* save persistent data (battery backed RAM and RTC clock) */ - mmu_save_ram(file_sav); - mmu_save_rtc(file_rtc); -} + // save persistent data (battery backed RAM and RTC clock) + mmu_save_ram(file_sav); + mmu_save_rtc(file_rtc); +}*/ diff --git a/waterbox/pizza/lib/mmu.c b/waterbox/pizza/lib/mmu.c index ecc7f61cc0..f749ca55b0 100644 --- a/waterbox/pizza/lib/mmu.c +++ b/waterbox/pizza/lib/mmu.c @@ -34,6 +34,7 @@ #include #include #include "sgb.h" +#include /* GAMEBOY MEMORY AREAS @@ -52,7 +53,7 @@ */ /* cartridge memory (max 8MB) */ -uint8_t cart_memory[1 << 22]; +uint8_t* cart_memory; /* RAM memory area */ uint8_t *ram; @@ -162,11 +163,12 @@ void mmu_load(uint8_t *data, size_t sz, uint16_t a) } /* load full cartridge */ -void mmu_load_cartridge(uint8_t *data, size_t sz) +void mmu_load_cartridge(const uint8_t *data, size_t sz) { /* copy max 32k into working memory */ memcpy(mmu.memory, data, 2 << 14); + cart_memory = alloc_sealed(1 << 22); /* copy full cartridge */ memcpy(cart_memory, data, sz); } diff --git a/waterbox/pizza/lib/mmu.h b/waterbox/pizza/lib/mmu.h index 010d5d4825..58fb8285d4 100644 --- a/waterbox/pizza/lib/mmu.h +++ b/waterbox/pizza/lib/mmu.h @@ -96,7 +96,7 @@ void mmu_dump_all(); void mmu_init(uint8_t c, uint8_t rn); void mmu_init_ram(uint32_t c); void mmu_load(uint8_t *data, size_t sz, uint16_t a); -void mmu_load_cartridge(uint8_t *data, size_t sz); +void mmu_load_cartridge(const uint8_t *data, size_t sz); void mmu_move(uint16_t d, uint16_t s); uint8_t mmu_read_no_cyc(uint16_t a); uint8_t mmu_read(uint16_t a);