diff --git a/src/burn/drv/pgm/pgm_prot.cpp b/src/burn/drv/pgm/pgm_prot.cpp index 47d8973f8..5293e27e9 100644 --- a/src/burn/drv/pgm/pgm_prot.cpp +++ b/src/burn/drv/pgm/pgm_prot.cpp @@ -28,7 +28,7 @@ static void __fastcall asic27a_write_byte(UINT32 address, UINT8 data) if ((address & 0xfffffe) == 0xd10000) { // ddp2 pgm_cpu_sync(); asic27a_to_arm = data; - Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_ASSERT_LINE); + Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_IRQSTATUS_ACK); return; } } @@ -38,7 +38,7 @@ static void __fastcall asic27a_write_word(UINT32 address, UINT16 data) if ((address & 0xfffffe) == 0xd10000) { pgm_cpu_sync(); asic27a_to_arm = data & 0xff; - Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_ASSERT_LINE); + Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_IRQSTATUS_ACK); return; } } @@ -78,7 +78,7 @@ static UINT8 asic27a_arm7_read_byte(UINT32 address) switch (address) { case 0x38000000: - Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_CLEAR_LINE); + Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_IRQSTATUS_NONE); return asic27a_to_arm; } @@ -422,7 +422,7 @@ static void __fastcall svg_write_byte(UINT32 address, UINT8 data) { case 0x5c0000: case 0x5c0001: - Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_HOLD_LINE); + Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_IRQSTATUS_AUTO); return; } } @@ -440,7 +440,7 @@ static void __fastcall svg_write_word(UINT32 address, UINT16 data) switch (address) { case 0x5c0000: - Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_HOLD_LINE); + Arm7SetIRQLine(ARM7_FIRQ_LINE, ARM7_IRQSTATUS_AUTO); return; case 0x5c0300: diff --git a/src/cpu/arm7/arm7core.c b/src/cpu/arm7/arm7core.c index 842f7542f..1bf787e03 100644 --- a/src/cpu/arm7/arm7core.c +++ b/src/cpu/arm7/arm7core.c @@ -136,19 +136,19 @@ void (*arm7_coproc_dt_w_callback)(UINT32 insn, UINT32 *prn, void (*write32)(UINT ARM7_INLINE void arm7_cpu_write32(UINT32 addr, UINT32 data) { addr &= ~3; - Arm7_program_write_dword_32le(addr, data); // iq_132 + Arm7WriteLong(addr, data); // iq_132 } ARM7_INLINE void arm7_cpu_write16(UINT32 addr, UINT16 data) { addr &= ~1; - Arm7_program_write_word_32le(addr, data); // iq_132 + Arm7WriteWord(addr, data); // iq_132 } ARM7_INLINE void arm7_cpu_write8(UINT32 addr, UINT8 data) { - Arm7_program_write_byte_32le(addr, data); // iq_132 + Arm7WriteByte(addr, data); // iq_132 } ARM7_INLINE UINT32 arm7_cpu_read32(UINT32 addr) @@ -157,12 +157,12 @@ ARM7_INLINE UINT32 arm7_cpu_read32(UINT32 addr) if (addr & 3) { - result = Arm7_program_read_dword_32le(addr & ~3); // iq_132 + result = Arm7ReadLong(addr & ~3); // iq_132 result = (result >> (8 * (addr & 3))) | (result << (32 - (8 * (addr & 3)))); } else { - result = Arm7_program_read_dword_32le(addr); // iq_132 + result = Arm7ReadLong(addr); // iq_132 } return result; @@ -172,7 +172,7 @@ ARM7_INLINE UINT16 arm7_cpu_read16(UINT32 addr) { UINT16 result; - result = Arm7_program_read_word_32le(addr & ~1); + result = Arm7ReadWord(addr & ~1); if (addr & 1) { @@ -184,7 +184,7 @@ ARM7_INLINE UINT16 arm7_cpu_read16(UINT32 addr) ARM7_INLINE UINT8 arm7_cpu_read8(UINT32 addr) { - UINT8 result = Arm7_program_read_byte_32le(addr); + UINT8 result = Arm7ReadByte(addr); // Handle through normal 8 bit handler (for 32 bit cpu) return result; @@ -198,12 +198,12 @@ ARM7_INLINE UINT32 cpu_readop32(UINT32 addr) if (addr & 3) { - result = Arm7_program_opcode_dword_32le(addr & ~3); // iq_132 + result = Arm7FetchLong(addr & ~3); // iq_132 result = (result >> (8 * (addr & 3))) | (result << (32 - (8 * (addr & 3)))); } else { - result = Arm7_program_opcode_dword_32le(addr); // iq_132 + result = Arm7FetchLong(addr); // iq_132 } return result; @@ -213,7 +213,7 @@ ARM7_INLINE UINT32 cpu_readop16(UINT32 addr) { UINT16 result; - result = Arm7_program_opcode_word_32le(addr & ~1); // iq_132 + result = Arm7FetchWord(addr & ~1); // iq_132 if (addr & 1) { diff --git a/src/cpu/arm7_intf.cpp b/src/cpu/arm7_intf.cpp index 8ad905656..76bf3f4b6 100644 --- a/src/cpu/arm7_intf.cpp +++ b/src/cpu/arm7_intf.cpp @@ -28,38 +28,13 @@ static UINT8 (*pReadByteHandler)(UINT32) = NULL; static UINT32 Arm7IdleLoop = ~0; +extern void arm7_set_irq_line(INT32 irqline, INT32 state); + INT32 Arm7GetActive() { return 0; } -static cpu_core_config Arm7CheatCpuConfig = -{ - Arm7Open, - Arm7Close, - Arm7_program_read_byte_32le, - Arm7_write_rom_byte, - Arm7GetActive, - Arm7TotalCycles, - Arm7NewFrame, - Arm7Run, - Arm7RunEnd, - Arm7Reset, - MAX_MEMORY, - 0 -}; - -void Arm7Init( INT32 num ) // only one cpu supported -{ - DebugCPU_ARM7Initted = 1; - - for (INT32 i = 0; i < 3; i++) { - membase[i] = (UINT8**)malloc(PAGE_COUNT * sizeof(UINT8*)); - } - - CpuCheatRegister(num, &Arm7CheatCpuConfig); -} - void Arm7Exit() // only one cpu supported { #if defined FBA_DEBUG @@ -150,10 +125,10 @@ void Arm7SetReadLongHandler(UINT32 (*read)(UINT32)) pReadLongHandler = read; } -void Arm7_program_write_byte_32le(UINT32 addr, UINT8 data) +void Arm7WriteByte(UINT32 addr, UINT8 data) { #if defined FBA_DEBUG - if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7_program_write_byte_32le called without init\n")); + if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7WriteByte called without init\n")); #endif addr &= MAX_MEMORY_AND; @@ -172,10 +147,10 @@ void Arm7_program_write_byte_32le(UINT32 addr, UINT8 data) } } -void Arm7_program_write_word_32le(UINT32 addr, UINT16 data) +void Arm7WriteWord(UINT32 addr, UINT16 data) { #if defined FBA_DEBUG - if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7_program_write_word_32le called without init\n")); + if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7WriteWord called without init\n")); #endif addr &= MAX_MEMORY_AND; @@ -194,10 +169,10 @@ void Arm7_program_write_word_32le(UINT32 addr, UINT16 data) } } -void Arm7_program_write_dword_32le(UINT32 addr, UINT32 data) +void Arm7WriteLong(UINT32 addr, UINT32 data) { #if defined FBA_DEBUG - if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7_program_write_dword_32le called without init\n")); + if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7WriteLong called without init\n")); #endif addr &= MAX_MEMORY_AND; @@ -217,10 +192,10 @@ void Arm7_program_write_dword_32le(UINT32 addr, UINT32 data) } -UINT8 Arm7_program_read_byte_32le(UINT32 addr) +UINT8 Arm7ReadByte(UINT32 addr) { #if defined FBA_DEBUG - if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7_program_read_byte_32le called without init\n")); + if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7ReadByte called without init\n")); #endif addr &= MAX_MEMORY_AND; @@ -240,10 +215,10 @@ UINT8 Arm7_program_read_byte_32le(UINT32 addr) return 0; } -UINT16 Arm7_program_read_word_32le(UINT32 addr) +UINT16 Arm7ReadWord(UINT32 addr) { #if defined FBA_DEBUG - if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7_program_read_word_32le called without init\n")); + if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7ReadWord called without init\n")); #endif addr &= MAX_MEMORY_AND; @@ -263,10 +238,10 @@ UINT16 Arm7_program_read_word_32le(UINT32 addr) return 0; } -UINT32 Arm7_program_read_dword_32le(UINT32 addr) +UINT32 Arm7ReadLong(UINT32 addr) { #if defined FBA_DEBUG - if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7_program_read_dword_32le called without init\n")); + if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7ReadLong called without init\n")); #endif addr &= MAX_MEMORY_AND; @@ -286,10 +261,10 @@ UINT32 Arm7_program_read_dword_32le(UINT32 addr) return 0; } -UINT16 Arm7_program_opcode_word_32le(UINT32 addr) +UINT16 Arm7FetchWord(UINT32 addr) { #if defined FBA_DEBUG - if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7_program_opcode_word_32le called without init\n")); + if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7FetchWord called without init\n")); #endif addr &= MAX_MEMORY_AND; @@ -315,10 +290,10 @@ UINT16 Arm7_program_opcode_word_32le(UINT32 addr) return 0; } -UINT32 Arm7_program_opcode_dword_32le(UINT32 addr) +UINT32 Arm7FetchLong(UINT32 addr) { #if defined FBA_DEBUG - if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7_program_opcode_dword_32le called without init\n")); + if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7FetchLong called without init\n")); #endif addr &= MAX_MEMORY_AND; @@ -350,13 +325,13 @@ void Arm7SetIRQLine(INT32 line, INT32 state) if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7SetIRQLine called without init\n")); #endif - if (state == ARM7_CLEAR_LINE || state == ARM7_ASSERT_LINE) { + if (state == ARM7_IRQSTATUS_NONE || state == ARM7_IRQSTATUS_ACK) { arm7_set_irq_line(line, state); } - else if (ARM7_HOLD_LINE) { - arm7_set_irq_line(line, ARM7_ASSERT_LINE); + else if (ARM7_IRQSTATUS_AUTO) { + arm7_set_irq_line(line, ARM7_IRQSTATUS_ACK); Arm7Run(0); - arm7_set_irq_line(line, ARM7_CLEAR_LINE); + arm7_set_irq_line(line, ARM7_IRQSTATUS_NONE); } } @@ -373,7 +348,7 @@ void Arm7SetIdleLoopAddress(UINT32 address) // For cheats/etc -void Arm7_write_rom_byte(UINT32 addr, UINT8 data) +static void Arm7_write_rom_byte(UINT32 addr, UINT8 data) { #if defined FBA_DEBUG if (!DebugCPU_ARM7Initted) bprintf(PRINT_ERROR, _T("Arm7_write_rom_byte called without init\n")); @@ -393,3 +368,30 @@ void Arm7_write_rom_byte(UINT32 addr, UINT8 data) pWriteByteHandler(addr, data); } } + +static cpu_core_config Arm7CheatCpuConfig = +{ + Arm7Open, + Arm7Close, + Arm7ReadByte, + Arm7_write_rom_byte, + Arm7GetActive, + Arm7TotalCycles, + Arm7NewFrame, + Arm7Run, + Arm7RunEnd, + Arm7Reset, + MAX_MEMORY, + 0 +}; + +void Arm7Init( INT32 num ) // only one cpu supported +{ + DebugCPU_ARM7Initted = 1; + + for (INT32 i = 0; i < 3; i++) { + membase[i] = (UINT8**)malloc(PAGE_COUNT * sizeof(UINT8*)); + } + + CpuCheatRegister(num, &Arm7CheatCpuConfig); +} diff --git a/src/cpu/arm7_intf.h b/src/cpu/arm7_intf.h index 277c175f3..adf199516 100644 --- a/src/cpu/arm7_intf.h +++ b/src/cpu/arm7_intf.h @@ -1,17 +1,36 @@ -// use these in arm7.cpp -void Arm7_program_write_byte_32le(UINT32 addr, UINT8 data); -void Arm7_program_write_word_32le(UINT32 addr, UINT16 data); -void Arm7_program_write_dword_32le(UINT32 addr, UINT32 data); -UINT8 Arm7_program_read_byte_32le(UINT32 addr); -UINT16 Arm7_program_read_word_32le(UINT32 addr); -UINT32 Arm7_program_read_dword_32le(UINT32 addr); -UINT16 Arm7_program_opcode_word_32le(UINT32 addr); -UINT32 Arm7_program_opcode_dword_32le(UINT32 addr); +void Arm7WriteByte(UINT32 addr, UINT8 data); +void Arm7WriteWord(UINT32 addr, UINT16 data); +void Arm7WriteLong(UINT32 addr, UINT32 data); +UINT8 Arm7ReadByte(UINT32 addr); +UINT16 Arm7ReadWord(UINT32 addr); +UINT32 Arm7ReadLong(UINT32 addr); +UINT16 Arm7FetchWord(UINT32 addr); +UINT32 Arm7FetchLong(UINT32 addr); -void arm7_set_irq_line(INT32 irqline, INT32 state); +void Arm7RunEnd(); +void Arm7BurnCycles(INT32 cycles); +INT32 Arm7TotalCycles(); +void Arm7NewFrame(); + +void Arm7Init(INT32); +void Arm7Reset(); +INT32 Arm7Run(INT32 cycles); +void Arm7Exit(); +void Arm7Open(INT32 ); +void Arm7Close(); + +INT32 Arm7Scan(INT32 nAction); + +#define ARM7_IRQ_LINE 0 +#define ARM7_FIRQ_LINE 1 + +#define ARM7_IRQSTATUS_NONE 0 +#define ARM7_IRQSTATUS_ACK 1 +#define ARM7_IRQSTATUS_AUTO 2 + +void Arm7SetIRQLine(INT32 line, INT32 state); -// use these everywhere else #define ARM7_READ 1 #define ARM7_WRITE 2 #define ARM7_FETCH 4 @@ -28,33 +47,6 @@ void Arm7SetReadByteHandler(UINT8 (*read)(UINT32)); void Arm7SetReadWordHandler(UINT16 (*read)(UINT32)); void Arm7SetReadLongHandler(UINT32 (*read)(UINT32)); -INT32 Arm7Scan(INT32 nAction); - -void Arm7RunEnd(); -void Arm7BurnCycles(INT32 cycles); -INT32 Arm7TotalCycles(); -void Arm7NewFrame(); - -void Arm7Init(INT32); -void Arm7Open(INT32 ); -void Arm7Reset(); -INT32 Arm7Run(INT32 cycles); - -// defined in arm7core.h -#define ARM7_IRQ_LINE 0 -#define ARM7_FIRQ_LINE 1 - -#define ARM7_CLEAR_LINE 0 -#define ARM7_ASSERT_LINE 1 -#define ARM7_HOLD_LINE 2 - -void Arm7SetIRQLine(INT32 line, INT32 state); - -void Arm7Exit(); -void Arm7Close(); - -// speed hack stuff +// speed hack function void Arm7SetIdleLoopAddress(UINT32 address); -// for cheat handling -void Arm7_write_rom_byte(UINT32 addr, UINT8 data);