mirror of
https://github.com/holub/mame
synced 2025-04-18 22:49:58 +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[] =
|
||||
{
|
||||
"FADD", "FADDD", "FSUB", "FSUBD" "FMUL", "FMULD", "FDIV", "FDIVD",
|
||||
"FADD", "FADDD", "FSUB", "FSUBD", "FMUL", "FMULD", "FDIV", "FDIVD",
|
||||
"FCMP", "FCMPD", "FCMPU", "FCMPUD", "FCVT", "FCVTD"
|
||||
};
|
||||
|
||||
@ -983,7 +983,7 @@ offs_t hyperstone_disassembler::disassemble(std::ostream &stream, offs_t pc, con
|
||||
{
|
||||
uint8_t n = Rn_format(dest, op);
|
||||
|
||||
util::stream_format(stream, "SHLI %s, $%x", dest, n);
|
||||
util::stream_format(stream, "SHLI %s, $%x", dest, n);
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -9,6 +9,8 @@
|
||||
COMPILE-TIME DEFINITIONS
|
||||
***************************************************************************/
|
||||
|
||||
#define ENABLE_E132XS_DRC (1)
|
||||
|
||||
// compilation boundaries -- how far back/forward does the analysis extend?
|
||||
enum : u32
|
||||
{
|
||||
@ -99,6 +101,7 @@ enum
|
||||
TRAPNO_PARITY_ERROR = 58,
|
||||
TRAPNO_EXTENDED_OVERFLOW = 59,
|
||||
TRAPNO_RANGE_ERROR = 60,
|
||||
TRAPNO_POINTER_ERROR = TRAPNO_RANGE_ERROR,
|
||||
TRAPNO_PRIVILEGE_ERROR = TRAPNO_RANGE_ERROR,
|
||||
TRAPNO_FRAME_ERROR = TRAPNO_RANGE_ERROR,
|
||||
TRAPNO_RESERVED2 = 61,
|
||||
|
@ -31,6 +31,9 @@
|
||||
- GMS30C2232
|
||||
|
||||
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
|
||||
- Many wrong cycle counts
|
||||
- No emulation of memory access latency and pipleline
|
||||
|
@ -11,6 +11,8 @@
|
||||
#include "cpu/drcuml.h"
|
||||
#include "cpu/drcumlsh.h"
|
||||
|
||||
#include <utility>
|
||||
|
||||
|
||||
/*
|
||||
A note about clock multipliers and dividers:
|
||||
@ -34,10 +36,6 @@
|
||||
|
||||
#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_INTERPRETER_REGS (0)
|
||||
#define E132XS_COUNT_INSTRUCTIONS (0)
|
||||
@ -462,9 +460,10 @@ private:
|
||||
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);
|
||||
uint32_t generate_get_const(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc);
|
||||
uint32_t generate_get_immediate_s(drcuml_block &block, compiler_state &compiler, const opcode_desc *desc);
|
||||
uint32_t generate_get_pcrel(drcuml_block &block, const opcode_desc *desc);
|
||||
uint32_t generate_get_const(const opcode_desc *desc);
|
||||
uint32_t generate_get_immediate_s(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_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_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_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);
|
||||
|
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, 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, 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, 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_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, 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 )
|
||||
|
Loading…
Reference in New Issue
Block a user