mirror of
https://github.com/holub/mame
synced 2025-07-03 17:08:39 +03:00
-cpu/e132xs: Implemented pointer error exceptions for recompiler.
* Implemented pointer error exceptions on attempting to use a zero address register (other than SR) in the recompiler. * Also optimised load/store instructions a bit and reduced copy/paste. * Fixed a couple of disassembler issues. -misc/dgpix.cpp: Demoted The X-Files to not working with unemulated protection.
This commit is contained in:
parent
bff1ab51d9
commit
27b3384acd
@ -38,7 +38,7 @@ const char *const SETxx[] =
|
|||||||
|
|
||||||
const char *const Fxxx[] =
|
const char *const Fxxx[] =
|
||||||
{
|
{
|
||||||
"FADD", "FADDD", "FSUB", "FSUBD" "FMUL", "FMULD", "FDIV", "FDIVD",
|
"FADD", "FADDD", "FSUB", "FSUBD", "FMUL", "FMULD", "FDIV", "FDIVD",
|
||||||
"FCMP", "FCMPD", "FCMPU", "FCMPUD", "FCVT", "FCVTD"
|
"FCMP", "FCMPD", "FCMPU", "FCMPUD", "FCVT", "FCVTD"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
COMPILE-TIME DEFINITIONS
|
COMPILE-TIME DEFINITIONS
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
#define ENABLE_E132XS_DRC (1)
|
||||||
|
|
||||||
// compilation boundaries -- how far back/forward does the analysis extend?
|
// compilation boundaries -- how far back/forward does the analysis extend?
|
||||||
enum : u32
|
enum : u32
|
||||||
{
|
{
|
||||||
@ -99,6 +101,7 @@ enum
|
|||||||
TRAPNO_PARITY_ERROR = 58,
|
TRAPNO_PARITY_ERROR = 58,
|
||||||
TRAPNO_EXTENDED_OVERFLOW = 59,
|
TRAPNO_EXTENDED_OVERFLOW = 59,
|
||||||
TRAPNO_RANGE_ERROR = 60,
|
TRAPNO_RANGE_ERROR = 60,
|
||||||
|
TRAPNO_POINTER_ERROR = TRAPNO_RANGE_ERROR,
|
||||||
TRAPNO_PRIVILEGE_ERROR = TRAPNO_RANGE_ERROR,
|
TRAPNO_PRIVILEGE_ERROR = TRAPNO_RANGE_ERROR,
|
||||||
TRAPNO_FRAME_ERROR = TRAPNO_RANGE_ERROR,
|
TRAPNO_FRAME_ERROR = TRAPNO_RANGE_ERROR,
|
||||||
TRAPNO_RESERVED2 = 61,
|
TRAPNO_RESERVED2 = 61,
|
||||||
|
@ -31,6 +31,9 @@
|
|||||||
- GMS30C2232
|
- GMS30C2232
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
|
- Pointer error exception on zero address register for interpreter
|
||||||
|
- Range error exception on store signed byte/half-word
|
||||||
|
- Fix behaviour of exceptions in delay slots
|
||||||
- Fix behaviour of branches in delay slots
|
- Fix behaviour of branches in delay slots
|
||||||
- Many wrong cycle counts
|
- Many wrong cycle counts
|
||||||
- No emulation of memory access latency and pipleline
|
- No emulation of memory access latency and pipleline
|
||||||
|
@ -11,6 +11,8 @@
|
|||||||
#include "cpu/drcuml.h"
|
#include "cpu/drcuml.h"
|
||||||
#include "cpu/drcumlsh.h"
|
#include "cpu/drcumlsh.h"
|
||||||
|
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
A note about clock multipliers and dividers:
|
A note about clock multipliers and dividers:
|
||||||
@ -34,10 +36,6 @@
|
|||||||
|
|
||||||
#define E132XS_STRICT_VERIFY 0x0001 /* verify all instructions */
|
#define E132XS_STRICT_VERIFY 0x0001 /* verify all instructions */
|
||||||
|
|
||||||
#define SINGLE_INSTRUCTION_MODE (0)
|
|
||||||
|
|
||||||
#define ENABLE_E132XS_DRC (1)
|
|
||||||
|
|
||||||
#define E132XS_LOG_DRC_REGS (0)
|
#define E132XS_LOG_DRC_REGS (0)
|
||||||
#define E132XS_LOG_INTERPRETER_REGS (0)
|
#define E132XS_LOG_INTERPRETER_REGS (0)
|
||||||
#define E132XS_COUNT_INSTRUCTIONS (0)
|
#define E132XS_COUNT_INSTRUCTIONS (0)
|
||||||
@ -462,9 +460,10 @@ private:
|
|||||||
bool generate_opcode(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc);
|
bool generate_opcode(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc);
|
||||||
|
|
||||||
void generate_get_trap_addr(drcuml_block &block, uml::code_label &label, uml::parameter trapno);
|
void generate_get_trap_addr(drcuml_block &block, uml::code_label &label, uml::parameter trapno);
|
||||||
uint32_t generate_get_const(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc);
|
uint32_t generate_get_const(const opcode_desc *desc);
|
||||||
uint32_t generate_get_immediate_s(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc);
|
uint32_t generate_get_immediate_s(const opcode_desc *desc);
|
||||||
uint32_t generate_get_pcrel(drcuml_block &block, const opcode_desc *desc);
|
uint32_t generate_get_pcrel(const opcode_desc *desc);
|
||||||
|
std::pair<uint16_t, uint32_t> generate_get_d_code_dis(const opcode_desc *opcode);
|
||||||
|
|
||||||
void generate_get_global_register(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc);
|
void generate_get_global_register(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc);
|
||||||
void generate_set_global_register(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t dst_code);
|
void generate_set_global_register(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, uint32_t dst_code);
|
||||||
@ -473,6 +472,10 @@ private:
|
|||||||
|
|
||||||
void generate_load_operand(drcuml_block &block, compiler_state &compiler, reg_bank global, uint32_t code, uml::parameter dst, uml::parameter localidx);
|
void generate_load_operand(drcuml_block &block, compiler_state &compiler, reg_bank global, uint32_t code, uml::parameter dst, uml::parameter localidx);
|
||||||
void generate_load_src_addsub(drcuml_block &block, compiler_state &compiler, reg_bank global, uint32_t code, uml::parameter dst, uml::parameter localidx, uml::parameter sr);
|
void generate_load_src_addsub(drcuml_block &block, compiler_state &compiler, reg_bank global, uint32_t code, uml::parameter dst, uml::parameter localidx, uml::parameter sr);
|
||||||
|
uml::parameter generate_load_address_ad(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, reg_bank global, uint32_t code, uml::parameter dst, uml::parameter localidx);
|
||||||
|
void generate_load_address_ns(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, reg_bank global, uint32_t code, uml::parameter dst, uml::parameter localidx, uint16_t d_code, uint32_t dis);
|
||||||
|
void generate_load_address_rp(drcuml_block &block, compiler_state &compiler, uint32_t code, uml::parameter dst, uml::parameter localidx, uint32_t dis);
|
||||||
|
void generate_add_dis(drcuml_block &block, compiler_state &compiler, uml::parameter dst, uml::parameter base, uint32_t dis, unsigned alignment);
|
||||||
void generate_set_dst(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, reg_bank global, uint32_t code, uml::parameter src, uml::parameter localidx, bool calcidx);
|
void generate_set_dst(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc, reg_bank global, uint32_t code, uml::parameter src, uml::parameter localidx, bool calcidx);
|
||||||
void generate_update_flags_addsub(drcuml_block &block, compiler_state &compiler, uml::parameter sr);
|
void generate_update_flags_addsub(drcuml_block &block, compiler_state &compiler, uml::parameter sr);
|
||||||
void generate_update_flags_addsubc(drcuml_block &block, compiler_state &compiler, uml::parameter sr);
|
void generate_update_flags_addsubc(drcuml_block &block, compiler_state &compiler, uml::parameter sr);
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -992,8 +992,8 @@ void dgpix_bmkey_state::init_btplay2k()
|
|||||||
|
|
||||||
GAME( 1999, elfin, 0, dgpix, dgpix, dgpix_typea_state, init_elfin, ROT0, "dgPIX Entertainment Inc.", "Elfin", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
GAME( 1999, elfin, 0, dgpix, dgpix, dgpix_typea_state, init_elfin, ROT0, "dgPIX Entertainment Inc.", "Elfin", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1999, jumpjump, 0, dgpix, dgpix, dgpix_typea_state, init_jumpjump, ROT0, "dgPIX Entertainment Inc.", "Jump Jump", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
GAME( 1999, jumpjump, 0, dgpix, dgpix, dgpix_typea_state, init_jumpjump, ROT0, "dgPIX Entertainment Inc.", "Jump Jump", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1999, xfiles, 0, dgpix, dgpix, dgpix_typea_state, init_xfiles, ROT0, "dgPIX Entertainment Inc.", "The X-Files", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
GAME( 1999, xfiles, 0, dgpix, dgpix, dgpix_typea_state, init_xfiles, ROT0, "dgPIX Entertainment Inc.", "The X-Files", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1999, xfilesk, xfiles, dgpix, dgpix, dgpix_typea_state, init_xfilesk, ROT0, "dgPIX Entertainment Inc.", "The X-Files (Censored, Korea)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
GAME( 1999, xfilesk, xfiles, dgpix, dgpix, dgpix_typea_state, init_xfilesk, ROT0, "dgPIX Entertainment Inc.", "The X-Files (censored, Korea)", MACHINE_NOT_WORKING | MACHINE_UNEMULATED_PROTECTION | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1999, kdynastg, 0, dgpix_kdynastg, dgpix, dgpix_typea_state, init_kdynastg, ROT0, "EZ Graphics", "King of Dynast Gear (version 1.8)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
GAME( 1999, kdynastg, 0, dgpix_kdynastg, dgpix, dgpix_typea_state, init_kdynastg, ROT0, "EZ Graphics", "King of Dynast Gear (version 1.8)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1999, letsdnce, 0, dgpix, letsdnce, dgpix_bmkey_state, init_letsdnce, ROT0, "dgPIX Entertainment Inc.", "Let's Dance", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
GAME( 1999, letsdnce, 0, dgpix, letsdnce, dgpix_bmkey_state, init_letsdnce, ROT0, "dgPIX Entertainment Inc.", "Let's Dance", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 2000, btplay2k, 0, dgpix, btplay2k, dgpix_bmkey_state, init_btplay2k, ROT0, "dgPIX Entertainment Inc.", "Beat Player 2000", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
GAME( 2000, btplay2k, 0, dgpix, btplay2k, dgpix_bmkey_state, init_btplay2k, ROT0, "dgPIX Entertainment Inc.", "Beat Player 2000", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
|
||||||
|
Loading…
Reference in New Issue
Block a user