2012-04-03 00:47:28 +00:00
|
|
|
uint8 CPU::read(uint32 addr) {
|
|
|
|
uint8 result = 0;
|
|
|
|
|
|
|
|
switch(addr) {
|
|
|
|
|
2012-04-07 08:17:49 +00:00
|
|
|
//DMA0CNT_H
|
|
|
|
//DMA1CNT_H
|
|
|
|
//DMA2CNT_H
|
|
|
|
//DMA3CNT_H
|
2012-04-09 06:19:32 +00:00
|
|
|
case 0x040000ba: case 0x040000bb:
|
|
|
|
case 0x040000c6: case 0x040000c7:
|
|
|
|
case 0x040000d2: case 0x040000d3:
|
|
|
|
case 0x040000de: case 0x040000df: {
|
2013-05-05 09:21:30 +00:00
|
|
|
auto& dma = regs.dma[(addr - 0x040000ba) / 12];
|
2012-04-09 06:19:32 +00:00
|
|
|
unsigned shift = (addr & 1) * 8;
|
|
|
|
return dma.control >> shift;
|
|
|
|
}
|
2012-04-07 08:17:49 +00:00
|
|
|
|
2012-04-03 00:47:28 +00:00
|
|
|
//TM0CNT_L
|
|
|
|
//TM1CNT_L
|
|
|
|
//TM2CNT_L
|
|
|
|
//TM3CNT_L
|
2012-04-09 06:19:32 +00:00
|
|
|
case 0x04000100: case 0x04000101:
|
|
|
|
case 0x04000104: case 0x04000105:
|
|
|
|
case 0x04000108: case 0x04000109:
|
|
|
|
case 0x0400010c: case 0x0400010d: {
|
2013-05-05 09:21:30 +00:00
|
|
|
auto& timer = regs.timer[(addr >> 2) & 3];
|
2012-04-09 06:19:32 +00:00
|
|
|
unsigned shift = (addr & 1) * 8;
|
2012-04-14 07:26:45 +00:00
|
|
|
return timer.period >> shift;
|
2012-04-09 06:19:32 +00:00
|
|
|
}
|
2012-04-03 00:47:28 +00:00
|
|
|
|
2012-04-09 06:19:32 +00:00
|
|
|
//TIM0CNT_H
|
|
|
|
case 0x04000102: case 0x04000103:
|
|
|
|
case 0x04000106: case 0x04000107:
|
|
|
|
case 0x0400010a: case 0x0400010b:
|
|
|
|
case 0x0400010e: case 0x0400010f: {
|
2013-05-05 09:21:30 +00:00
|
|
|
auto& timer = regs.timer[(addr >> 2) & 3];
|
2012-04-09 06:19:32 +00:00
|
|
|
unsigned shift = (addr & 1) * 8;
|
|
|
|
return timer.control >> shift;
|
|
|
|
}
|
2012-04-03 00:47:28 +00:00
|
|
|
|
Update to v087r28 release.
byuu says:
Be sure to run make install, and move required images to their appropriate system profile folders.
I still have no warnings in place if those images aren't present.
Changelog:
- OBJ mosaic should hopefully be emulated correctly now (thanks to krom
and Cydrak for testing the hardware behavior)
- emulated dummy serial registers, fixes Sonic Advance (you may still
need to specify 512KB FlashROM with an appropriate ID, I used
Panaonic's)
- GBA core exits scheduler (PPU thread) and calls
interface->videoRefresh() from main thread (not required, just nice)
- SRAM, FRAM, EEPROM and FlashROM initialized to 0xFF if it does not
exist (probably not needed, but FlashROM likes to reset to 0xFF
anyway)
- GBA manifest.xml for file-mode will now use "gamename.xml" instead of
"gamename.gba.xml"
- started renaming "NES" to "Famicom" and "SNES" to "Super Famicom" in
the GUI (may or may not change source code in the long-term)
- removed target-libsnes/
- added profile/
Profiles are the major new feature. So far we have:
Famicom.sys/{nothing (yet?)}
Super Famicom.sys/{ipl.rom}
Game Boy.sys/{boot.rom}
Game Boy Color.sys/{boot.rom}
Game Boy Advance.sys/{bios.rom[not included]}
Super Game Boy.sfc/{boot.rom,program.rom[not included]}
BS-X Satellaview.sfc/{program.rom,bsx.ram,bsx.pram}
Sufami Turbo.sfc/{program.rom}
The SGB, BSX and ST cartridges ask you to load GB, BS or ST cartridges
directly now. No slot loader for them. So the obvious downsides: you
can't quickly pick between different SGB BIOSes, but why would you want
to? Just use SGB2/JP. It's still possible, so I'll sacrifice a little
complexity for a rare case to make it a lot easier for the more common
case. ST cartridges currently won't let you load the secondary slot.
BS-X Town cart is the only useful game to load with nothing in the slot,
but only barely, since games are all seeded on flash and not on PSRAM
images. We can revisit a way to boot the BIOS directly if and when we
get the satellite uplink emulated and data can be downloaded onto the
PSRAM :P BS-X slotted cartridges still require the secondary slot.
My plan for BS-X slotted cartridges is to require a manifest.xml to
specify that it has the BS-X slot present. Otherwise, we have to load
the ROM into the SNES cartridge class, and parse its header before we
can find out if it has one. Screw that. If it's in the XML, I can tell
before loading the ROM if I need to present you with an optional slot
loading dialog. I will probably do something similar for Sufami Turbo.
Not all games even work with a secondary slot, so why ask you to load
a second slot for them? Let the XML request a second slot. A complete
Sufami Turbo ROM set will be trivial anyway. Not sure how I want to do
the sub dialog yet. We want basic file loading, but we don't want it to
look like the dialog 'didn't do anything' if it pops back open
immediately again. Maybe change the background color of the dialog to
a darker gray? Tacky, but it'd give you the visual cue without the need
for some subtle text changes.
2012-04-18 13:58:04 +00:00
|
|
|
//SIOMULTI0 (SIODATA32_L)
|
|
|
|
//SIOMULTI1 (SIODATA32_H)
|
|
|
|
//SIOMULTI2
|
|
|
|
//SIOMULTI3
|
|
|
|
case 0x04000120: case 0x04000121:
|
|
|
|
case 0x04000122: case 0x04000123:
|
|
|
|
case 0x04000124: case 0x04000125:
|
|
|
|
case 0x04000126: case 0x04000127: {
|
2013-12-20 11:40:39 +00:00
|
|
|
if(auto data = player.read()) return data() >> ((addr & 3) << 3);
|
Update to v087r28 release.
byuu says:
Be sure to run make install, and move required images to their appropriate system profile folders.
I still have no warnings in place if those images aren't present.
Changelog:
- OBJ mosaic should hopefully be emulated correctly now (thanks to krom
and Cydrak for testing the hardware behavior)
- emulated dummy serial registers, fixes Sonic Advance (you may still
need to specify 512KB FlashROM with an appropriate ID, I used
Panaonic's)
- GBA core exits scheduler (PPU thread) and calls
interface->videoRefresh() from main thread (not required, just nice)
- SRAM, FRAM, EEPROM and FlashROM initialized to 0xFF if it does not
exist (probably not needed, but FlashROM likes to reset to 0xFF
anyway)
- GBA manifest.xml for file-mode will now use "gamename.xml" instead of
"gamename.gba.xml"
- started renaming "NES" to "Famicom" and "SNES" to "Super Famicom" in
the GUI (may or may not change source code in the long-term)
- removed target-libsnes/
- added profile/
Profiles are the major new feature. So far we have:
Famicom.sys/{nothing (yet?)}
Super Famicom.sys/{ipl.rom}
Game Boy.sys/{boot.rom}
Game Boy Color.sys/{boot.rom}
Game Boy Advance.sys/{bios.rom[not included]}
Super Game Boy.sfc/{boot.rom,program.rom[not included]}
BS-X Satellaview.sfc/{program.rom,bsx.ram,bsx.pram}
Sufami Turbo.sfc/{program.rom}
The SGB, BSX and ST cartridges ask you to load GB, BS or ST cartridges
directly now. No slot loader for them. So the obvious downsides: you
can't quickly pick between different SGB BIOSes, but why would you want
to? Just use SGB2/JP. It's still possible, so I'll sacrifice a little
complexity for a rare case to make it a lot easier for the more common
case. ST cartridges currently won't let you load the secondary slot.
BS-X Town cart is the only useful game to load with nothing in the slot,
but only barely, since games are all seeded on flash and not on PSRAM
images. We can revisit a way to boot the BIOS directly if and when we
get the satellite uplink emulated and data can be downloaded onto the
PSRAM :P BS-X slotted cartridges still require the secondary slot.
My plan for BS-X slotted cartridges is to require a manifest.xml to
specify that it has the BS-X slot present. Otherwise, we have to load
the ROM into the SNES cartridge class, and parse its header before we
can find out if it has one. Screw that. If it's in the XML, I can tell
before loading the ROM if I need to present you with an optional slot
loading dialog. I will probably do something similar for Sufami Turbo.
Not all games even work with a secondary slot, so why ask you to load
a second slot for them? Let the XML request a second slot. A complete
Sufami Turbo ROM set will be trivial anyway. Not sure how I want to do
the sub dialog yet. We want basic file loading, but we don't want it to
look like the dialog 'didn't do anything' if it pops back open
immediately again. Maybe change the background color of the dialog to
a darker gray? Tacky, but it'd give you the visual cue without the need
for some subtle text changes.
2012-04-18 13:58:04 +00:00
|
|
|
unsigned shift = (addr & 1) * 8;
|
2013-12-20 11:40:39 +00:00
|
|
|
auto& data = regs.serial.data[(addr >> 1) & 3];
|
Update to v087r28 release.
byuu says:
Be sure to run make install, and move required images to their appropriate system profile folders.
I still have no warnings in place if those images aren't present.
Changelog:
- OBJ mosaic should hopefully be emulated correctly now (thanks to krom
and Cydrak for testing the hardware behavior)
- emulated dummy serial registers, fixes Sonic Advance (you may still
need to specify 512KB FlashROM with an appropriate ID, I used
Panaonic's)
- GBA core exits scheduler (PPU thread) and calls
interface->videoRefresh() from main thread (not required, just nice)
- SRAM, FRAM, EEPROM and FlashROM initialized to 0xFF if it does not
exist (probably not needed, but FlashROM likes to reset to 0xFF
anyway)
- GBA manifest.xml for file-mode will now use "gamename.xml" instead of
"gamename.gba.xml"
- started renaming "NES" to "Famicom" and "SNES" to "Super Famicom" in
the GUI (may or may not change source code in the long-term)
- removed target-libsnes/
- added profile/
Profiles are the major new feature. So far we have:
Famicom.sys/{nothing (yet?)}
Super Famicom.sys/{ipl.rom}
Game Boy.sys/{boot.rom}
Game Boy Color.sys/{boot.rom}
Game Boy Advance.sys/{bios.rom[not included]}
Super Game Boy.sfc/{boot.rom,program.rom[not included]}
BS-X Satellaview.sfc/{program.rom,bsx.ram,bsx.pram}
Sufami Turbo.sfc/{program.rom}
The SGB, BSX and ST cartridges ask you to load GB, BS or ST cartridges
directly now. No slot loader for them. So the obvious downsides: you
can't quickly pick between different SGB BIOSes, but why would you want
to? Just use SGB2/JP. It's still possible, so I'll sacrifice a little
complexity for a rare case to make it a lot easier for the more common
case. ST cartridges currently won't let you load the secondary slot.
BS-X Town cart is the only useful game to load with nothing in the slot,
but only barely, since games are all seeded on flash and not on PSRAM
images. We can revisit a way to boot the BIOS directly if and when we
get the satellite uplink emulated and data can be downloaded onto the
PSRAM :P BS-X slotted cartridges still require the secondary slot.
My plan for BS-X slotted cartridges is to require a manifest.xml to
specify that it has the BS-X slot present. Otherwise, we have to load
the ROM into the SNES cartridge class, and parse its header before we
can find out if it has one. Screw that. If it's in the XML, I can tell
before loading the ROM if I need to present you with an optional slot
loading dialog. I will probably do something similar for Sufami Turbo.
Not all games even work with a secondary slot, so why ask you to load
a second slot for them? Let the XML request a second slot. A complete
Sufami Turbo ROM set will be trivial anyway. Not sure how I want to do
the sub dialog yet. We want basic file loading, but we don't want it to
look like the dialog 'didn't do anything' if it pops back open
immediately again. Maybe change the background color of the dialog to
a darker gray? Tacky, but it'd give you the visual cue without the need
for some subtle text changes.
2012-04-18 13:58:04 +00:00
|
|
|
return data >> shift;
|
|
|
|
}
|
|
|
|
|
|
|
|
//SIOCNT
|
|
|
|
case 0x04000128: return regs.serial.control >> 0;
|
|
|
|
case 0x04000129: return regs.serial.control >> 8;
|
|
|
|
|
|
|
|
//SIOMLT_SEND (SIODATA8)
|
|
|
|
case 0x0400012a: return regs.serial.data8;
|
|
|
|
case 0x0400012b: return 0u;
|
|
|
|
|
2012-04-03 00:47:28 +00:00
|
|
|
//KEYINPUT
|
|
|
|
case 0x04000130:
|
2013-12-20 11:40:39 +00:00
|
|
|
if(auto result = player.keyinput()) return result() >> 0;
|
Update to v088r08 release.
byuu says:
From this WIP, I'm starting on the impossible task of
a declarative-based GUI, which I'm calling Ethos.
base/ becomes emulator/, and we add emulator/interface.hpp, which is
a base API that all emulation cores must implement in full.
(Right now, it's kind of a hybrid to work with the old GUI and the new
GUI at the same time, of course.)
Unlike the old interfaces, the new base class also provides all general
usability hooks: loading and saving files and states, cheat codes, etc.
The new interface also contains information and vector structs to
describe all possible loading methods, controller bindings, etc; and
gives names for them all.
The actual GUI in fact should not include eg <gba/gba.hpp> anymore.
Should speed up GUI compilation.
So the idea going forward is that ethos will build a list of emulators
right when the application starts up.
Once you've appended an emulator to that list, you're done. No more GUI
changes are needed to support that system.
The GUI will have code to parse the emulator interfaces list, and build
all the requisite GUI options dynamically, declarative style.
Ultimately, once the project is finished, the new GUI should look ~99%
identical to the current GUI. But it'll probably be a whole lot smaller.
2012-04-29 06:29:54 +00:00
|
|
|
for(unsigned n = 0; n < 8; n++) result |= interface->inputPoll(0, 0, n) << n;
|
2012-04-03 00:47:28 +00:00
|
|
|
if((result & 0xc0) == 0xc0) result &= ~0xc0; //up+down cannot be pressed simultaneously
|
|
|
|
if((result & 0x30) == 0x30) result &= ~0x30; //left+right cannot be pressed simultaneously
|
|
|
|
return result ^ 0xff;
|
|
|
|
case 0x04000131:
|
2013-12-20 11:40:39 +00:00
|
|
|
if(auto result = player.keyinput()) return result() >> 8;
|
Update to v088r08 release.
byuu says:
From this WIP, I'm starting on the impossible task of
a declarative-based GUI, which I'm calling Ethos.
base/ becomes emulator/, and we add emulator/interface.hpp, which is
a base API that all emulation cores must implement in full.
(Right now, it's kind of a hybrid to work with the old GUI and the new
GUI at the same time, of course.)
Unlike the old interfaces, the new base class also provides all general
usability hooks: loading and saving files and states, cheat codes, etc.
The new interface also contains information and vector structs to
describe all possible loading methods, controller bindings, etc; and
gives names for them all.
The actual GUI in fact should not include eg <gba/gba.hpp> anymore.
Should speed up GUI compilation.
So the idea going forward is that ethos will build a list of emulators
right when the application starts up.
Once you've appended an emulator to that list, you're done. No more GUI
changes are needed to support that system.
The GUI will have code to parse the emulator interfaces list, and build
all the requisite GUI options dynamically, declarative style.
Ultimately, once the project is finished, the new GUI should look ~99%
identical to the current GUI. But it'll probably be a whole lot smaller.
2012-04-29 06:29:54 +00:00
|
|
|
result |= interface->inputPoll(0, 0, 8) << 0;
|
|
|
|
result |= interface->inputPoll(0, 0, 9) << 1;
|
2012-04-03 00:47:28 +00:00
|
|
|
return result ^ 0x03;
|
|
|
|
|
|
|
|
//KEYCNT
|
|
|
|
case 0x04000132: return regs.keypad.control >> 0;
|
|
|
|
case 0x04000133: return regs.keypad.control >> 8;
|
|
|
|
|
Update to v087r28 release.
byuu says:
Be sure to run make install, and move required images to their appropriate system profile folders.
I still have no warnings in place if those images aren't present.
Changelog:
- OBJ mosaic should hopefully be emulated correctly now (thanks to krom
and Cydrak for testing the hardware behavior)
- emulated dummy serial registers, fixes Sonic Advance (you may still
need to specify 512KB FlashROM with an appropriate ID, I used
Panaonic's)
- GBA core exits scheduler (PPU thread) and calls
interface->videoRefresh() from main thread (not required, just nice)
- SRAM, FRAM, EEPROM and FlashROM initialized to 0xFF if it does not
exist (probably not needed, but FlashROM likes to reset to 0xFF
anyway)
- GBA manifest.xml for file-mode will now use "gamename.xml" instead of
"gamename.gba.xml"
- started renaming "NES" to "Famicom" and "SNES" to "Super Famicom" in
the GUI (may or may not change source code in the long-term)
- removed target-libsnes/
- added profile/
Profiles are the major new feature. So far we have:
Famicom.sys/{nothing (yet?)}
Super Famicom.sys/{ipl.rom}
Game Boy.sys/{boot.rom}
Game Boy Color.sys/{boot.rom}
Game Boy Advance.sys/{bios.rom[not included]}
Super Game Boy.sfc/{boot.rom,program.rom[not included]}
BS-X Satellaview.sfc/{program.rom,bsx.ram,bsx.pram}
Sufami Turbo.sfc/{program.rom}
The SGB, BSX and ST cartridges ask you to load GB, BS or ST cartridges
directly now. No slot loader for them. So the obvious downsides: you
can't quickly pick between different SGB BIOSes, but why would you want
to? Just use SGB2/JP. It's still possible, so I'll sacrifice a little
complexity for a rare case to make it a lot easier for the more common
case. ST cartridges currently won't let you load the secondary slot.
BS-X Town cart is the only useful game to load with nothing in the slot,
but only barely, since games are all seeded on flash and not on PSRAM
images. We can revisit a way to boot the BIOS directly if and when we
get the satellite uplink emulated and data can be downloaded onto the
PSRAM :P BS-X slotted cartridges still require the secondary slot.
My plan for BS-X slotted cartridges is to require a manifest.xml to
specify that it has the BS-X slot present. Otherwise, we have to load
the ROM into the SNES cartridge class, and parse its header before we
can find out if it has one. Screw that. If it's in the XML, I can tell
before loading the ROM if I need to present you with an optional slot
loading dialog. I will probably do something similar for Sufami Turbo.
Not all games even work with a secondary slot, so why ask you to load
a second slot for them? Let the XML request a second slot. A complete
Sufami Turbo ROM set will be trivial anyway. Not sure how I want to do
the sub dialog yet. We want basic file loading, but we don't want it to
look like the dialog 'didn't do anything' if it pops back open
immediately again. Maybe change the background color of the dialog to
a darker gray? Tacky, but it'd give you the visual cue without the need
for some subtle text changes.
2012-04-18 13:58:04 +00:00
|
|
|
//RCNT
|
|
|
|
case 0x04000134: return regs.joybus.settings >> 0;
|
|
|
|
case 0x04000135: return regs.joybus.settings >> 8;
|
|
|
|
|
|
|
|
//JOYCNT
|
|
|
|
case 0x04000140: return regs.joybus.control >> 0;
|
|
|
|
case 0x04000141: return regs.joybus.control >> 8;
|
|
|
|
|
|
|
|
//JOY_RECV_L
|
|
|
|
//JOY_RECV_H
|
|
|
|
case 0x04000150: return regs.joybus.receive >> 0;
|
|
|
|
case 0x04000151: return regs.joybus.receive >> 8;
|
|
|
|
case 0x04000152: return regs.joybus.receive >> 16;
|
|
|
|
case 0x04000153: return regs.joybus.receive >> 24;
|
|
|
|
|
|
|
|
//JOY_TRANS_L
|
|
|
|
//JOY_TRANS_H
|
|
|
|
case 0x04000154: return regs.joybus.transmit >> 0;
|
|
|
|
case 0x04000155: return regs.joybus.transmit >> 8;
|
|
|
|
case 0x04000156: return regs.joybus.transmit >> 16;
|
|
|
|
case 0x04000157: return regs.joybus.transmit >> 24;
|
|
|
|
|
|
|
|
//JOYSTAT
|
|
|
|
case 0x04000158: return regs.joybus.status >> 0;
|
|
|
|
case 0x04000159: return regs.joybus.status >> 8;
|
|
|
|
|
2012-04-03 00:47:28 +00:00
|
|
|
//IE
|
|
|
|
case 0x04000200: return regs.irq.enable >> 0;
|
|
|
|
case 0x04000201: return regs.irq.enable >> 8;
|
|
|
|
|
|
|
|
//IF
|
|
|
|
case 0x04000202: return regs.irq.flag >> 0;
|
|
|
|
case 0x04000203: return regs.irq.flag >> 8;
|
|
|
|
|
|
|
|
//WAITCNT
|
|
|
|
case 0x04000204: return regs.wait.control >> 0;
|
|
|
|
case 0x04000205: return regs.wait.control >> 8;
|
|
|
|
|
|
|
|
//IME
|
|
|
|
case 0x04000208: return regs.ime;
|
|
|
|
case 0x04000209: return 0u;
|
|
|
|
|
|
|
|
//POSTFLG + HALTCNT
|
|
|
|
case 0x04000300: return regs.postboot;
|
|
|
|
case 0x04000301: return 0u;
|
|
|
|
|
|
|
|
//MEMCNT_L
|
|
|
|
case 0x04000800: return regs.memory.control >> 0;
|
|
|
|
case 0x04000801: return regs.memory.control >> 8;
|
|
|
|
|
|
|
|
//MEMCNT_H
|
|
|
|
case 0x04000802: return regs.memory.control >> 16;
|
|
|
|
case 0x04000803: return regs.memory.control >> 24;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return 0u;
|
|
|
|
}
|
|
|
|
|
|
|
|
void CPU::write(uint32 addr, uint8 byte) {
|
|
|
|
switch(addr) {
|
|
|
|
|
|
|
|
//DMA0SAD
|
|
|
|
//DMA1SAD
|
|
|
|
//DMA2SAD
|
|
|
|
//DMA3SAD
|
2012-04-09 06:41:27 +00:00
|
|
|
case 0x040000b0: case 0x040000b1: case 0x040000b2: case 0x040000b3:
|
|
|
|
case 0x040000bc: case 0x040000bd: case 0x040000be: case 0x040000bf:
|
|
|
|
case 0x040000c8: case 0x040000c9: case 0x040000ca: case 0x040000cb:
|
|
|
|
case 0x040000d4: case 0x040000d5: case 0x040000d6: case 0x040000d7: {
|
2013-05-05 09:21:30 +00:00
|
|
|
auto& dma = regs.dma[(addr - 0x040000b0) / 12];
|
2012-04-09 06:41:27 +00:00
|
|
|
unsigned shift = (addr & 3) * 8;
|
|
|
|
dma.source = (dma.source & ~(255 << shift)) | (byte << shift);
|
|
|
|
return;
|
|
|
|
}
|
2012-04-03 00:47:28 +00:00
|
|
|
|
2012-04-09 06:41:27 +00:00
|
|
|
//DMA0DAD
|
|
|
|
//DMA1DAD
|
|
|
|
//DMA2DAD
|
2012-04-03 00:47:28 +00:00
|
|
|
//DMA3DAD
|
2012-04-09 06:41:27 +00:00
|
|
|
case 0x040000b4: case 0x040000b5: case 0x040000b6: case 0x040000b7:
|
|
|
|
case 0x040000c0: case 0x040000c1: case 0x040000c2: case 0x040000c3:
|
|
|
|
case 0x040000cc: case 0x040000cd: case 0x040000ce: case 0x040000cf:
|
|
|
|
case 0x040000d8: case 0x040000d9: case 0x040000da: case 0x040000db: {
|
2013-05-05 09:21:30 +00:00
|
|
|
auto& dma = regs.dma[(addr - 0x040000b4) / 12];
|
2012-04-09 06:41:27 +00:00
|
|
|
unsigned shift = (addr & 3) * 8;
|
|
|
|
dma.target = (dma.target & ~(255 << shift)) | (byte << shift);
|
|
|
|
return;
|
|
|
|
}
|
2012-04-03 00:47:28 +00:00
|
|
|
|
2012-04-09 06:41:27 +00:00
|
|
|
//DMA0CNT_L
|
|
|
|
//DMA1CNT_L
|
|
|
|
//DMA2CNT_L
|
2012-04-03 00:47:28 +00:00
|
|
|
//DMA3CNT_L
|
2012-04-09 06:41:27 +00:00
|
|
|
case 0x040000b8: case 0x040000b9:
|
|
|
|
case 0x040000c4: case 0x040000c5:
|
|
|
|
case 0x040000d0: case 0x040000d1:
|
|
|
|
case 0x040000dc: case 0x040000dd: {
|
2013-05-05 09:21:30 +00:00
|
|
|
auto& dma = regs.dma[(addr - 0x040000b8) / 12];
|
2012-04-09 06:41:27 +00:00
|
|
|
unsigned shift = (addr & 1) * 8;
|
|
|
|
dma.length = (dma.length & ~(255 << shift)) | (byte << shift);
|
|
|
|
return;
|
|
|
|
}
|
2012-04-03 00:47:28 +00:00
|
|
|
|
2012-04-09 06:41:27 +00:00
|
|
|
//DMA0CNT_H
|
|
|
|
//DMA1CNT_H
|
|
|
|
//DMA2CNT_H
|
2012-04-03 00:47:28 +00:00
|
|
|
//DMA3CNT_H
|
2012-04-09 06:41:27 +00:00
|
|
|
case 0x040000ba: case 0x040000bb:
|
|
|
|
case 0x040000c6: case 0x040000c7:
|
|
|
|
case 0x040000d2: case 0x040000d3:
|
|
|
|
case 0x040000de: case 0x040000df: {
|
2013-05-05 09:21:30 +00:00
|
|
|
auto& dma = regs.dma[(addr - 0x040000ba) / 12];
|
2012-04-09 06:41:27 +00:00
|
|
|
unsigned shift = (addr & 1) * 8;
|
|
|
|
bool enable = dma.control.enable;
|
|
|
|
dma.control = (dma.control & ~(255 << shift)) | (byte << shift);
|
|
|
|
if(enable == 0 && dma.control.enable) {
|
Update to v087r30 release.
byuu says:
Changelog:
- DMA channel masks added (some are 27-bit source/target and some are
14-bit length -- hooray, varuint_t class.)
- No more state.pending flags. Instead, we set dma.pending flag when we
want a transfer (fixes GBA Video - Pokemon audio) [Cydrak]
- fixed OBJ Vmosaic [Cydrak, krom]
- OBJ cannot read <=0x13fff in BG modes 3-5 (fixes the garbled tile at
the top-left of some games)
- DMA timing should be much closer to hardware now, but probably not
perfect
- PPU frame blending uses blargg's bit-perfect, rounded method (slower,
but what can you do?)
- GBA carts really unload now
- added nall/gba/cartridge.hpp: used when there is no manifest. Scans
ROMs for library tags, and selects the first valid one found
- added EEPROM auto-detection when EEPROM size=0. Forces disk/save state
size to 8192 (otherwise states could crash between pre and post
detect.)
- detects first read after a set read address command when the size
is zero, and sets all subsequent bit-lengths to that value, prints
detected size to terminal
- added nall/nes/cartridge.hpp: moves iNES detection out of emulation
core.
Important to note: long-term goal is to remove all
nall/(system)/cartridge.hpp detections from the core and replace with
databases. All in good time.
Anyway, the GBA workarounds should work for ~98.5% of the library, if my
pre-scanning was correct (~40 games with odd tags. I reject ones without
numeric versions now, too.)
I think we're basically at a point where we can release a new version
now. Compatibility should be relatively high (at least for a first
release), and fixes are only going to affect one or two games at a time.
I'd like to start doing some major cleaning house internally (rename
NES->Famicom, SNES->SuperFamicom and such.) Would be much wiser to do
that on a .01 WIP to minimize regressions.
The main problems with a release now:
- speed is pretty bad, haven't really optimized much yet (not sure how
much we can improve it yet, this usually isn't easy)
- sound isn't -great-, but the GBA audio sucks anyway :P
- couple of known bugs (Sonic X video, etc.)
2012-04-22 10:49:19 +00:00
|
|
|
if(dma.control.timingmode == 0) dma.pending = true; //immediate transfer mode
|
2012-04-09 06:41:27 +00:00
|
|
|
dma.run.target = dma.target;
|
|
|
|
dma.run.source = dma.source;
|
|
|
|
dma.run.length = dma.length;
|
Update to v087r30 release.
byuu says:
Changelog:
- DMA channel masks added (some are 27-bit source/target and some are
14-bit length -- hooray, varuint_t class.)
- No more state.pending flags. Instead, we set dma.pending flag when we
want a transfer (fixes GBA Video - Pokemon audio) [Cydrak]
- fixed OBJ Vmosaic [Cydrak, krom]
- OBJ cannot read <=0x13fff in BG modes 3-5 (fixes the garbled tile at
the top-left of some games)
- DMA timing should be much closer to hardware now, but probably not
perfect
- PPU frame blending uses blargg's bit-perfect, rounded method (slower,
but what can you do?)
- GBA carts really unload now
- added nall/gba/cartridge.hpp: used when there is no manifest. Scans
ROMs for library tags, and selects the first valid one found
- added EEPROM auto-detection when EEPROM size=0. Forces disk/save state
size to 8192 (otherwise states could crash between pre and post
detect.)
- detects first read after a set read address command when the size
is zero, and sets all subsequent bit-lengths to that value, prints
detected size to terminal
- added nall/nes/cartridge.hpp: moves iNES detection out of emulation
core.
Important to note: long-term goal is to remove all
nall/(system)/cartridge.hpp detections from the core and replace with
databases. All in good time.
Anyway, the GBA workarounds should work for ~98.5% of the library, if my
pre-scanning was correct (~40 games with odd tags. I reject ones without
numeric versions now, too.)
I think we're basically at a point where we can release a new version
now. Compatibility should be relatively high (at least for a first
release), and fixes are only going to affect one or two games at a time.
I'd like to start doing some major cleaning house internally (rename
NES->Famicom, SNES->SuperFamicom and such.) Would be much wiser to do
that on a .01 WIP to minimize regressions.
The main problems with a release now:
- speed is pretty bad, haven't really optimized much yet (not sure how
much we can improve it yet, this usually isn't easy)
- sound isn't -great-, but the GBA audio sucks anyway :P
- couple of known bugs (Sonic X video, etc.)
2012-04-22 10:49:19 +00:00
|
|
|
} else if(dma.control.enable == 0) {
|
|
|
|
dma.pending = false;
|
2012-04-09 06:41:27 +00:00
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
2012-04-03 00:47:28 +00:00
|
|
|
|
|
|
|
//TM0CNT_L
|
|
|
|
//TM1CNT_L
|
|
|
|
//TM2CNT_L
|
|
|
|
//TM3CNT_L
|
2012-04-09 06:41:27 +00:00
|
|
|
case 0x04000100: case 0x04000101:
|
|
|
|
case 0x04000104: case 0x04000105:
|
|
|
|
case 0x04000108: case 0x04000109:
|
|
|
|
case 0x0400010c: case 0x0400010d: {
|
2013-05-05 09:21:30 +00:00
|
|
|
auto& timer = regs.timer[(addr >> 2) & 3];
|
2012-04-09 06:41:27 +00:00
|
|
|
unsigned shift = (addr & 1) * 8;
|
|
|
|
timer.reload = (timer.reload & ~(255 << shift)) | (byte << shift);
|
|
|
|
return;
|
|
|
|
}
|
2012-04-03 00:47:28 +00:00
|
|
|
|
2012-04-07 08:17:49 +00:00
|
|
|
//TM0CNT_H
|
|
|
|
//TM1CNT_H
|
|
|
|
//TM2CNT_H
|
2012-04-03 00:47:28 +00:00
|
|
|
//TM3CNT_H
|
2012-04-07 08:17:49 +00:00
|
|
|
case 0x04000102:
|
|
|
|
case 0x04000106:
|
|
|
|
case 0x0400010a:
|
|
|
|
case 0x0400010e: {
|
2013-05-05 09:21:30 +00:00
|
|
|
auto& timer = regs.timer[(addr >> 2) & 3];
|
2012-04-07 08:17:49 +00:00
|
|
|
bool enable = timer.control.enable;
|
2012-04-09 06:19:32 +00:00
|
|
|
timer.control = byte;
|
|
|
|
if(enable == 0 && timer.control.enable == 1) {
|
2012-04-14 07:26:45 +00:00
|
|
|
timer.period = timer.reload;
|
2012-04-07 08:17:49 +00:00
|
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
2012-04-03 00:47:28 +00:00
|
|
|
|
Update to v087r28 release.
byuu says:
Be sure to run make install, and move required images to their appropriate system profile folders.
I still have no warnings in place if those images aren't present.
Changelog:
- OBJ mosaic should hopefully be emulated correctly now (thanks to krom
and Cydrak for testing the hardware behavior)
- emulated dummy serial registers, fixes Sonic Advance (you may still
need to specify 512KB FlashROM with an appropriate ID, I used
Panaonic's)
- GBA core exits scheduler (PPU thread) and calls
interface->videoRefresh() from main thread (not required, just nice)
- SRAM, FRAM, EEPROM and FlashROM initialized to 0xFF if it does not
exist (probably not needed, but FlashROM likes to reset to 0xFF
anyway)
- GBA manifest.xml for file-mode will now use "gamename.xml" instead of
"gamename.gba.xml"
- started renaming "NES" to "Famicom" and "SNES" to "Super Famicom" in
the GUI (may or may not change source code in the long-term)
- removed target-libsnes/
- added profile/
Profiles are the major new feature. So far we have:
Famicom.sys/{nothing (yet?)}
Super Famicom.sys/{ipl.rom}
Game Boy.sys/{boot.rom}
Game Boy Color.sys/{boot.rom}
Game Boy Advance.sys/{bios.rom[not included]}
Super Game Boy.sfc/{boot.rom,program.rom[not included]}
BS-X Satellaview.sfc/{program.rom,bsx.ram,bsx.pram}
Sufami Turbo.sfc/{program.rom}
The SGB, BSX and ST cartridges ask you to load GB, BS or ST cartridges
directly now. No slot loader for them. So the obvious downsides: you
can't quickly pick between different SGB BIOSes, but why would you want
to? Just use SGB2/JP. It's still possible, so I'll sacrifice a little
complexity for a rare case to make it a lot easier for the more common
case. ST cartridges currently won't let you load the secondary slot.
BS-X Town cart is the only useful game to load with nothing in the slot,
but only barely, since games are all seeded on flash and not on PSRAM
images. We can revisit a way to boot the BIOS directly if and when we
get the satellite uplink emulated and data can be downloaded onto the
PSRAM :P BS-X slotted cartridges still require the secondary slot.
My plan for BS-X slotted cartridges is to require a manifest.xml to
specify that it has the BS-X slot present. Otherwise, we have to load
the ROM into the SNES cartridge class, and parse its header before we
can find out if it has one. Screw that. If it's in the XML, I can tell
before loading the ROM if I need to present you with an optional slot
loading dialog. I will probably do something similar for Sufami Turbo.
Not all games even work with a secondary slot, so why ask you to load
a second slot for them? Let the XML request a second slot. A complete
Sufami Turbo ROM set will be trivial anyway. Not sure how I want to do
the sub dialog yet. We want basic file loading, but we don't want it to
look like the dialog 'didn't do anything' if it pops back open
immediately again. Maybe change the background color of the dialog to
a darker gray? Tacky, but it'd give you the visual cue without the need
for some subtle text changes.
2012-04-18 13:58:04 +00:00
|
|
|
//SIOMULTI0 (SIODATA32_L)
|
|
|
|
//SIOMULTI1 (SIODATA32_H)
|
|
|
|
//SIOMULTI2
|
|
|
|
//SIOMULTI3
|
|
|
|
case 0x04000120: case 0x04000121:
|
|
|
|
case 0x04000122: case 0x04000123:
|
|
|
|
case 0x04000124: case 0x04000125:
|
|
|
|
case 0x04000126: case 0x04000127: {
|
2013-12-20 11:40:39 +00:00
|
|
|
player.write(byte, addr & 3);
|
2013-05-05 09:21:30 +00:00
|
|
|
auto& data = regs.serial.data[(addr >> 1) & 3];
|
Update to v087r28 release.
byuu says:
Be sure to run make install, and move required images to their appropriate system profile folders.
I still have no warnings in place if those images aren't present.
Changelog:
- OBJ mosaic should hopefully be emulated correctly now (thanks to krom
and Cydrak for testing the hardware behavior)
- emulated dummy serial registers, fixes Sonic Advance (you may still
need to specify 512KB FlashROM with an appropriate ID, I used
Panaonic's)
- GBA core exits scheduler (PPU thread) and calls
interface->videoRefresh() from main thread (not required, just nice)
- SRAM, FRAM, EEPROM and FlashROM initialized to 0xFF if it does not
exist (probably not needed, but FlashROM likes to reset to 0xFF
anyway)
- GBA manifest.xml for file-mode will now use "gamename.xml" instead of
"gamename.gba.xml"
- started renaming "NES" to "Famicom" and "SNES" to "Super Famicom" in
the GUI (may or may not change source code in the long-term)
- removed target-libsnes/
- added profile/
Profiles are the major new feature. So far we have:
Famicom.sys/{nothing (yet?)}
Super Famicom.sys/{ipl.rom}
Game Boy.sys/{boot.rom}
Game Boy Color.sys/{boot.rom}
Game Boy Advance.sys/{bios.rom[not included]}
Super Game Boy.sfc/{boot.rom,program.rom[not included]}
BS-X Satellaview.sfc/{program.rom,bsx.ram,bsx.pram}
Sufami Turbo.sfc/{program.rom}
The SGB, BSX and ST cartridges ask you to load GB, BS or ST cartridges
directly now. No slot loader for them. So the obvious downsides: you
can't quickly pick between different SGB BIOSes, but why would you want
to? Just use SGB2/JP. It's still possible, so I'll sacrifice a little
complexity for a rare case to make it a lot easier for the more common
case. ST cartridges currently won't let you load the secondary slot.
BS-X Town cart is the only useful game to load with nothing in the slot,
but only barely, since games are all seeded on flash and not on PSRAM
images. We can revisit a way to boot the BIOS directly if and when we
get the satellite uplink emulated and data can be downloaded onto the
PSRAM :P BS-X slotted cartridges still require the secondary slot.
My plan for BS-X slotted cartridges is to require a manifest.xml to
specify that it has the BS-X slot present. Otherwise, we have to load
the ROM into the SNES cartridge class, and parse its header before we
can find out if it has one. Screw that. If it's in the XML, I can tell
before loading the ROM if I need to present you with an optional slot
loading dialog. I will probably do something similar for Sufami Turbo.
Not all games even work with a secondary slot, so why ask you to load
a second slot for them? Let the XML request a second slot. A complete
Sufami Turbo ROM set will be trivial anyway. Not sure how I want to do
the sub dialog yet. We want basic file loading, but we don't want it to
look like the dialog 'didn't do anything' if it pops back open
immediately again. Maybe change the background color of the dialog to
a darker gray? Tacky, but it'd give you the visual cue without the need
for some subtle text changes.
2012-04-18 13:58:04 +00:00
|
|
|
unsigned shift = (addr & 1) * 8;
|
|
|
|
data = (data & ~(255 << shift)) | (byte << shift);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
//SIOCNT
|
|
|
|
case 0x04000128: regs.serial.control = (regs.serial.control & 0xff00) | (byte << 0); return;
|
|
|
|
case 0x04000129: regs.serial.control = (regs.serial.control & 0x00ff) | (byte << 8); return;
|
|
|
|
|
|
|
|
//SIOMLT_SEND (SIODATA8)
|
|
|
|
case 0x0400012a: regs.serial.data8 = byte; return;
|
|
|
|
case 0x0400012b: return;
|
|
|
|
|
2012-04-03 00:47:28 +00:00
|
|
|
//KEYCNT
|
|
|
|
case 0x04000132: regs.keypad.control = (regs.keypad.control & 0xff00) | (byte << 0); return;
|
|
|
|
case 0x04000133: regs.keypad.control = (regs.keypad.control & 0x00ff) | (byte << 8); return;
|
|
|
|
|
Update to v087r28 release.
byuu says:
Be sure to run make install, and move required images to their appropriate system profile folders.
I still have no warnings in place if those images aren't present.
Changelog:
- OBJ mosaic should hopefully be emulated correctly now (thanks to krom
and Cydrak for testing the hardware behavior)
- emulated dummy serial registers, fixes Sonic Advance (you may still
need to specify 512KB FlashROM with an appropriate ID, I used
Panaonic's)
- GBA core exits scheduler (PPU thread) and calls
interface->videoRefresh() from main thread (not required, just nice)
- SRAM, FRAM, EEPROM and FlashROM initialized to 0xFF if it does not
exist (probably not needed, but FlashROM likes to reset to 0xFF
anyway)
- GBA manifest.xml for file-mode will now use "gamename.xml" instead of
"gamename.gba.xml"
- started renaming "NES" to "Famicom" and "SNES" to "Super Famicom" in
the GUI (may or may not change source code in the long-term)
- removed target-libsnes/
- added profile/
Profiles are the major new feature. So far we have:
Famicom.sys/{nothing (yet?)}
Super Famicom.sys/{ipl.rom}
Game Boy.sys/{boot.rom}
Game Boy Color.sys/{boot.rom}
Game Boy Advance.sys/{bios.rom[not included]}
Super Game Boy.sfc/{boot.rom,program.rom[not included]}
BS-X Satellaview.sfc/{program.rom,bsx.ram,bsx.pram}
Sufami Turbo.sfc/{program.rom}
The SGB, BSX and ST cartridges ask you to load GB, BS or ST cartridges
directly now. No slot loader for them. So the obvious downsides: you
can't quickly pick between different SGB BIOSes, but why would you want
to? Just use SGB2/JP. It's still possible, so I'll sacrifice a little
complexity for a rare case to make it a lot easier for the more common
case. ST cartridges currently won't let you load the secondary slot.
BS-X Town cart is the only useful game to load with nothing in the slot,
but only barely, since games are all seeded on flash and not on PSRAM
images. We can revisit a way to boot the BIOS directly if and when we
get the satellite uplink emulated and data can be downloaded onto the
PSRAM :P BS-X slotted cartridges still require the secondary slot.
My plan for BS-X slotted cartridges is to require a manifest.xml to
specify that it has the BS-X slot present. Otherwise, we have to load
the ROM into the SNES cartridge class, and parse its header before we
can find out if it has one. Screw that. If it's in the XML, I can tell
before loading the ROM if I need to present you with an optional slot
loading dialog. I will probably do something similar for Sufami Turbo.
Not all games even work with a secondary slot, so why ask you to load
a second slot for them? Let the XML request a second slot. A complete
Sufami Turbo ROM set will be trivial anyway. Not sure how I want to do
the sub dialog yet. We want basic file loading, but we don't want it to
look like the dialog 'didn't do anything' if it pops back open
immediately again. Maybe change the background color of the dialog to
a darker gray? Tacky, but it'd give you the visual cue without the need
for some subtle text changes.
2012-04-18 13:58:04 +00:00
|
|
|
//RCNT
|
|
|
|
case 0x04000134: regs.joybus.settings = (regs.joybus.settings & 0xff00) | (byte << 0); return;
|
|
|
|
case 0x04000135: regs.joybus.settings = (regs.joybus.settings & 0x00ff) | (byte << 8); return;
|
|
|
|
|
|
|
|
//JOYCNT
|
|
|
|
case 0x04000140: regs.joybus.control = (regs.joybus.control & 0xff00) | (byte << 0); return;
|
|
|
|
case 0x04000141: regs.joybus.control = (regs.joybus.control & 0x00ff) | (byte << 8); return;
|
|
|
|
|
|
|
|
//JOY_RECV_L
|
|
|
|
//JOY_RECV_H
|
|
|
|
case 0x04000150: regs.joybus.receive = (regs.joybus.receive & 0xffffff00) | (byte << 0); return;
|
|
|
|
case 0x04000151: regs.joybus.receive = (regs.joybus.receive & 0xffff00ff) | (byte << 8); return;
|
|
|
|
case 0x04000152: regs.joybus.receive = (regs.joybus.receive & 0xff00ffff) | (byte << 16); return;
|
|
|
|
case 0x04000153: regs.joybus.receive = (regs.joybus.receive & 0x00ffffff) | (byte << 24); return;
|
|
|
|
|
|
|
|
//JOY_TRANS_L
|
|
|
|
//JOY_TRANS_H
|
|
|
|
case 0x04000154: regs.joybus.transmit = (regs.joybus.transmit & 0xffffff00) | (byte << 0); return;
|
|
|
|
case 0x04000155: regs.joybus.transmit = (regs.joybus.transmit & 0xffff00ff) | (byte << 8); return;
|
|
|
|
case 0x04000156: regs.joybus.transmit = (regs.joybus.transmit & 0xff00ffff) | (byte << 16); return;
|
|
|
|
case 0x04000157: regs.joybus.transmit = (regs.joybus.transmit & 0x00ffffff) | (byte << 24); return;
|
|
|
|
|
|
|
|
//JOYSTAT
|
|
|
|
case 0x04000158: regs.joybus.status = (regs.joybus.status & 0xff00) | (byte << 0); return;
|
|
|
|
case 0x04000159: regs.joybus.status = (regs.joybus.status & 0x00ff) | (byte << 8); return;
|
|
|
|
|
2012-04-03 00:47:28 +00:00
|
|
|
//IE
|
|
|
|
case 0x04000200: regs.irq.enable = (regs.irq.enable & 0xff00) | (byte << 0); return;
|
|
|
|
case 0x04000201: regs.irq.enable = (regs.irq.enable & 0x00ff) | (byte << 8); return;
|
|
|
|
|
|
|
|
//IF
|
|
|
|
case 0x04000202: regs.irq.flag = regs.irq.flag & ~(byte << 0); return;
|
|
|
|
case 0x04000203: regs.irq.flag = regs.irq.flag & ~(byte << 8); return;
|
|
|
|
|
|
|
|
//WAITCNT
|
|
|
|
case 0x04000204: regs.wait.control = (regs.wait.control & 0xff00) | ((byte & 0xff) << 0); return;
|
|
|
|
case 0x04000205: regs.wait.control = (regs.wait.control & 0x00ff) | ((byte & 0x7f) << 8); return;
|
|
|
|
|
|
|
|
//IME
|
Update to v087r28 release.
byuu says:
Be sure to run make install, and move required images to their appropriate system profile folders.
I still have no warnings in place if those images aren't present.
Changelog:
- OBJ mosaic should hopefully be emulated correctly now (thanks to krom
and Cydrak for testing the hardware behavior)
- emulated dummy serial registers, fixes Sonic Advance (you may still
need to specify 512KB FlashROM with an appropriate ID, I used
Panaonic's)
- GBA core exits scheduler (PPU thread) and calls
interface->videoRefresh() from main thread (not required, just nice)
- SRAM, FRAM, EEPROM and FlashROM initialized to 0xFF if it does not
exist (probably not needed, but FlashROM likes to reset to 0xFF
anyway)
- GBA manifest.xml for file-mode will now use "gamename.xml" instead of
"gamename.gba.xml"
- started renaming "NES" to "Famicom" and "SNES" to "Super Famicom" in
the GUI (may or may not change source code in the long-term)
- removed target-libsnes/
- added profile/
Profiles are the major new feature. So far we have:
Famicom.sys/{nothing (yet?)}
Super Famicom.sys/{ipl.rom}
Game Boy.sys/{boot.rom}
Game Boy Color.sys/{boot.rom}
Game Boy Advance.sys/{bios.rom[not included]}
Super Game Boy.sfc/{boot.rom,program.rom[not included]}
BS-X Satellaview.sfc/{program.rom,bsx.ram,bsx.pram}
Sufami Turbo.sfc/{program.rom}
The SGB, BSX and ST cartridges ask you to load GB, BS or ST cartridges
directly now. No slot loader for them. So the obvious downsides: you
can't quickly pick between different SGB BIOSes, but why would you want
to? Just use SGB2/JP. It's still possible, so I'll sacrifice a little
complexity for a rare case to make it a lot easier for the more common
case. ST cartridges currently won't let you load the secondary slot.
BS-X Town cart is the only useful game to load with nothing in the slot,
but only barely, since games are all seeded on flash and not on PSRAM
images. We can revisit a way to boot the BIOS directly if and when we
get the satellite uplink emulated and data can be downloaded onto the
PSRAM :P BS-X slotted cartridges still require the secondary slot.
My plan for BS-X slotted cartridges is to require a manifest.xml to
specify that it has the BS-X slot present. Otherwise, we have to load
the ROM into the SNES cartridge class, and parse its header before we
can find out if it has one. Screw that. If it's in the XML, I can tell
before loading the ROM if I need to present you with an optional slot
loading dialog. I will probably do something similar for Sufami Turbo.
Not all games even work with a secondary slot, so why ask you to load
a second slot for them? Let the XML request a second slot. A complete
Sufami Turbo ROM set will be trivial anyway. Not sure how I want to do
the sub dialog yet. We want basic file loading, but we don't want it to
look like the dialog 'didn't do anything' if it pops back open
immediately again. Maybe change the background color of the dialog to
a darker gray? Tacky, but it'd give you the visual cue without the need
for some subtle text changes.
2012-04-18 13:58:04 +00:00
|
|
|
case 0x04000208: regs.ime = byte >> 0; return;
|
2012-04-03 00:47:28 +00:00
|
|
|
case 0x04000209: return;
|
|
|
|
|
Update to v087r28 release.
byuu says:
Be sure to run make install, and move required images to their appropriate system profile folders.
I still have no warnings in place if those images aren't present.
Changelog:
- OBJ mosaic should hopefully be emulated correctly now (thanks to krom
and Cydrak for testing the hardware behavior)
- emulated dummy serial registers, fixes Sonic Advance (you may still
need to specify 512KB FlashROM with an appropriate ID, I used
Panaonic's)
- GBA core exits scheduler (PPU thread) and calls
interface->videoRefresh() from main thread (not required, just nice)
- SRAM, FRAM, EEPROM and FlashROM initialized to 0xFF if it does not
exist (probably not needed, but FlashROM likes to reset to 0xFF
anyway)
- GBA manifest.xml for file-mode will now use "gamename.xml" instead of
"gamename.gba.xml"
- started renaming "NES" to "Famicom" and "SNES" to "Super Famicom" in
the GUI (may or may not change source code in the long-term)
- removed target-libsnes/
- added profile/
Profiles are the major new feature. So far we have:
Famicom.sys/{nothing (yet?)}
Super Famicom.sys/{ipl.rom}
Game Boy.sys/{boot.rom}
Game Boy Color.sys/{boot.rom}
Game Boy Advance.sys/{bios.rom[not included]}
Super Game Boy.sfc/{boot.rom,program.rom[not included]}
BS-X Satellaview.sfc/{program.rom,bsx.ram,bsx.pram}
Sufami Turbo.sfc/{program.rom}
The SGB, BSX and ST cartridges ask you to load GB, BS or ST cartridges
directly now. No slot loader for them. So the obvious downsides: you
can't quickly pick between different SGB BIOSes, but why would you want
to? Just use SGB2/JP. It's still possible, so I'll sacrifice a little
complexity for a rare case to make it a lot easier for the more common
case. ST cartridges currently won't let you load the secondary slot.
BS-X Town cart is the only useful game to load with nothing in the slot,
but only barely, since games are all seeded on flash and not on PSRAM
images. We can revisit a way to boot the BIOS directly if and when we
get the satellite uplink emulated and data can be downloaded onto the
PSRAM :P BS-X slotted cartridges still require the secondary slot.
My plan for BS-X slotted cartridges is to require a manifest.xml to
specify that it has the BS-X slot present. Otherwise, we have to load
the ROM into the SNES cartridge class, and parse its header before we
can find out if it has one. Screw that. If it's in the XML, I can tell
before loading the ROM if I need to present you with an optional slot
loading dialog. I will probably do something similar for Sufami Turbo.
Not all games even work with a secondary slot, so why ask you to load
a second slot for them? Let the XML request a second slot. A complete
Sufami Turbo ROM set will be trivial anyway. Not sure how I want to do
the sub dialog yet. We want basic file loading, but we don't want it to
look like the dialog 'didn't do anything' if it pops back open
immediately again. Maybe change the background color of the dialog to
a darker gray? Tacky, but it'd give you the visual cue without the need
for some subtle text changes.
2012-04-18 13:58:04 +00:00
|
|
|
//POSTFLG, HALTCNT
|
|
|
|
case 0x04000300: regs.postboot |= byte >> 0; return;
|
2012-04-03 00:47:28 +00:00
|
|
|
case 0x04000301: regs.mode = byte & 0x80 ? Registers::Mode::Stop : Registers::Mode::Halt; return;
|
|
|
|
|
|
|
|
//MEMCNT_L
|
Update to v087r28 release.
byuu says:
Be sure to run make install, and move required images to their appropriate system profile folders.
I still have no warnings in place if those images aren't present.
Changelog:
- OBJ mosaic should hopefully be emulated correctly now (thanks to krom
and Cydrak for testing the hardware behavior)
- emulated dummy serial registers, fixes Sonic Advance (you may still
need to specify 512KB FlashROM with an appropriate ID, I used
Panaonic's)
- GBA core exits scheduler (PPU thread) and calls
interface->videoRefresh() from main thread (not required, just nice)
- SRAM, FRAM, EEPROM and FlashROM initialized to 0xFF if it does not
exist (probably not needed, but FlashROM likes to reset to 0xFF
anyway)
- GBA manifest.xml for file-mode will now use "gamename.xml" instead of
"gamename.gba.xml"
- started renaming "NES" to "Famicom" and "SNES" to "Super Famicom" in
the GUI (may or may not change source code in the long-term)
- removed target-libsnes/
- added profile/
Profiles are the major new feature. So far we have:
Famicom.sys/{nothing (yet?)}
Super Famicom.sys/{ipl.rom}
Game Boy.sys/{boot.rom}
Game Boy Color.sys/{boot.rom}
Game Boy Advance.sys/{bios.rom[not included]}
Super Game Boy.sfc/{boot.rom,program.rom[not included]}
BS-X Satellaview.sfc/{program.rom,bsx.ram,bsx.pram}
Sufami Turbo.sfc/{program.rom}
The SGB, BSX and ST cartridges ask you to load GB, BS or ST cartridges
directly now. No slot loader for them. So the obvious downsides: you
can't quickly pick between different SGB BIOSes, but why would you want
to? Just use SGB2/JP. It's still possible, so I'll sacrifice a little
complexity for a rare case to make it a lot easier for the more common
case. ST cartridges currently won't let you load the secondary slot.
BS-X Town cart is the only useful game to load with nothing in the slot,
but only barely, since games are all seeded on flash and not on PSRAM
images. We can revisit a way to boot the BIOS directly if and when we
get the satellite uplink emulated and data can be downloaded onto the
PSRAM :P BS-X slotted cartridges still require the secondary slot.
My plan for BS-X slotted cartridges is to require a manifest.xml to
specify that it has the BS-X slot present. Otherwise, we have to load
the ROM into the SNES cartridge class, and parse its header before we
can find out if it has one. Screw that. If it's in the XML, I can tell
before loading the ROM if I need to present you with an optional slot
loading dialog. I will probably do something similar for Sufami Turbo.
Not all games even work with a secondary slot, so why ask you to load
a second slot for them? Let the XML request a second slot. A complete
Sufami Turbo ROM set will be trivial anyway. Not sure how I want to do
the sub dialog yet. We want basic file loading, but we don't want it to
look like the dialog 'didn't do anything' if it pops back open
immediately again. Maybe change the background color of the dialog to
a darker gray? Tacky, but it'd give you the visual cue without the need
for some subtle text changes.
2012-04-18 13:58:04 +00:00
|
|
|
//MEMCNT_H
|
2012-04-03 00:47:28 +00:00
|
|
|
case 0x04000800: regs.memory.control = (regs.memory.control & 0xffffff00) | (byte << 0); return;
|
|
|
|
case 0x04000801: regs.memory.control = (regs.memory.control & 0xffff00ff) | (byte << 8); return;
|
|
|
|
case 0x04000802: regs.memory.control = (regs.memory.control & 0xff00ffff) | (byte << 16); return;
|
|
|
|
case 0x04000803: regs.memory.control = (regs.memory.control & 0x00ffffff) | (byte << 24); return;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|