diff options
Diffstat (limited to 'src/mame/machine/seibucop/seibucop.cpp')
-rw-r--r-- | src/mame/machine/seibucop/seibucop.cpp | 128 |
1 files changed, 64 insertions, 64 deletions
diff --git a/src/mame/machine/seibucop/seibucop.cpp b/src/mame/machine/seibucop/seibucop.cpp index 1490ef5cd81..06f093a0d0d 100644 --- a/src/mame/machine/seibucop/seibucop.cpp +++ b/src/mame/machine/seibucop/seibucop.cpp @@ -2,63 +2,63 @@ // copyright-holders:Olivier Galibert, Angelo Salese, David Haywood, Tomasz Slanina /*************************************************************************** - Seibu Cop (Co-Processor) device emulation - a.k.a. known as Toshiba gate array TC25SC rebadged as: - SEI300 - Legionnaire PCB - [...] - There's also a ROM labeled COP-Dx, which is probably used for some in-game maths: - COP-D1 - Seibu Cup Soccer PCBs - COP-D2 - legionna.cpp and raiden2.cpp, latter might use another component too - COP-D3 - New Zero Team / Raiden 2 V33 HWs - Raiden 2 first boss arms is known to behave strangely without this ROM on a real PCB - - TODO: - - improve documentation, ffs! - - split into files, still needed: - - BCD; - - collision detection; - - command parser -> to cmd file; - - sd gundam sprite dma -> to dma file; - - convert to internal memory map, remove trampolines along the way. - - DMA mode needs to be cleaned up; - - improve class OO public/protected/private; - - nuke legacy command implementations; - - assert for something that needs actual playtesting is bad. - - add better debug facilities in a new sub-class, including but not limited to: - - disable collision detection; - - printing facilities; - - debugger break on pre-setted commands; - - ... - - per-game TODO: - Legionnaire - - (fixed) player walks on spot on stage clear; - - several if not all enemies definitely wants some sort of "axis aligned bounding box" in order to stop from going out of range - (when i.e. first boss goes to bottom of the screen and become unreachable) - - (btanb) Throw is made by quickly double jumping (!) - Heated Barrel - - gives random value to hi-score if you continue (only the first time, not a bug?); - - (fixed?) throws random address exceptions at level 3 and above, a RAM address arrives corrupt in the snippet at 0x136a; - - (fixed?) some corrupt sprites, probably a non-fatal version of the one above; - - stage 2 boss attacks only in vertical (regressed with the 130e / 3b30 / 42c2 command merge); - - (fixed) level 3+ boss movements looks wrong; - - stage 3 "homing" missiles doesn't seem to like our 6200 hookup here, except it's NOT 6200!? - - barrels seen in later levels seems to fail an axis aligned bounding box, not unlike Legionnaire. - SD Gundam - - stage 3 mid-boss still has the sprite garbage bug; - - stage 4: has sprite stuck on bottom-left of screen; - - palette dims too much on attract / continue screen. + Seibu Cop (Co-Processor) device emulation + a.k.a. known as Toshiba gate array TC25SC rebadged as: + SEI300 - Legionnaire PCB + [...] + There's also a ROM labeled COP-Dx, which is probably used for some in-game maths: + COP-D1 - Seibu Cup Soccer PCBs + COP-D2 - legionna.cpp and raiden2.cpp, latter might use another component too + COP-D3 - New Zero Team / Raiden 2 V33 HWs + Raiden 2 first boss arms is known to behave strangely without this ROM on a real PCB + + TODO: + - improve documentation, ffs! + - split into files, still needed: + - BCD; + - collision detection; + - command parser -> to cmd file; + - sd gundam sprite dma -> to dma file; + - convert to internal memory map, remove trampolines along the way. + - DMA mode needs to be cleaned up; + - improve class OO public/protected/private; + - nuke legacy command implementations; + - assert for something that needs actual playtesting is bad. + - add better debug facilities in a new sub-class, including but not limited to: + - disable collision detection; + - printing facilities; + - debugger break on pre-setted commands; + - ... + + per-game TODO: + Legionnaire + - (fixed) player walks on spot on stage clear; + - several if not all enemies definitely wants some sort of "axis aligned bounding box" in order to stop from going out of range + (when i.e. first boss goes to bottom of the screen and become unreachable) + - (btanb) Throw is made by quickly double jumping (!) + Heated Barrel + - gives random value to hi-score if you continue (only the first time, not a bug?); + - (fixed?) throws random address exceptions at level 3 and above, a RAM address arrives corrupt in the snippet at 0x136a; + - (fixed?) some corrupt sprites, probably a non-fatal version of the one above; + - stage 2 boss attacks only in vertical (regressed with the 130e / 3b30 / 42c2 command merge); + - (fixed) level 3+ boss movements looks wrong; + - stage 3 "homing" missiles doesn't seem to like our 6200 hookup here, except it's NOT 6200!? + - barrels seen in later levels seems to fail an axis aligned bounding box, not unlike Legionnaire. + SD Gundam + - stage 3 mid-boss still has the sprite garbage bug; + - stage 4: has sprite stuck on bottom-left of screen; + - palette dims too much on attract / continue screen. It's known that the DMA data arrangement gives same results on a real Legionnaire board, so shrug? - - Tech notes (to move into mainpage): - ----------- - [0x6fc] DMA mode bit scheme: - ---1 ---1 ---- ---- fill op if true, else transfer - ---- ---- x--- ---- palette brightness - ---- ---- ---x ---- internal buffer selector - ---- ---- ---- x--- size modifier? Bus transfer size actually? - ---- ---- ---- -xxx select channel - + + Tech notes (to move into mainpage): + ----------- + [0x6fc] DMA mode bit scheme: + ---1 ---1 ---- ---- fill op if true, else transfer + ---- ---- x--- ---- palette brightness + ---- ---- ---x ---- internal buffer selector + ---- ---- ---- x--- size modifier? Bus transfer size actually? + ---- ---- ---- -xxx select channel + ***************************************************************************/ #include "emu.h" @@ -242,7 +242,7 @@ void raiden2cop_device::device_start() m_host_cpu = machine().device<cpu_device>("maincpu"); m_host_space = &m_host_cpu->space(AS_PROGRAM); m_host_endian = m_host_space->endianness() == ENDIANNESS_BIG; // m_cpu_is_68k - + m_byte_endian_val = m_host_endian ? 3 : 0; m_word_endian_val = m_host_endian ? 2 : 0; } @@ -708,11 +708,11 @@ WRITE16_MEMBER(raiden2cop_device::cop_dma_trigger_w) switch (cop_dma_mode) { case 0x14: - { + { dma_tilemap_buffer(); break; } - + case 0x15: { dma_palette_buffer(); @@ -727,10 +727,10 @@ WRITE16_MEMBER(raiden2cop_device::cop_dma_trigger_w) case 0x85: case 0x86: case 0x87: - { dma_palette_brightness(); + { dma_palette_brightness(); break; } - + /********************************************************************************************************************/ case 0x09: { UINT32 src, dst, size; @@ -795,7 +795,7 @@ WRITE16_MEMBER(raiden2cop_device::cop_dma_trigger_w) case 0x11c: case 0x11d: case 0x11e: - case 0x11f: + case 0x11f: { dma_fill(); break; @@ -843,7 +843,7 @@ WRITE16_MEMBER(raiden2cop_device::cop_itoa_low_w) WRITE16_MEMBER(raiden2cop_device::cop_itoa_high_w) { cop_itoa = (cop_itoa & ~(mem_mask << 16)) | ((data & mem_mask) << 16); - + // Godzilla cares, otherwise you get 2p score overflow in 1p vs 2p, TODO: might actually be HW endianness dependant? bcd_update(); } @@ -1553,7 +1553,7 @@ WRITE16_MEMBER(raiden2cop_device::LEGACY_cop_cmd_w) { if(data == 0xf105) // cupsoc transition from presentation to kick off return; - + printf("did not execute %04x\n", data); // cup soccer triggers this a lot (and others) } } |