This allows for some very primitive auto-automated testing, by comparing known good frames.
As this happens on the TA level, it doesn't actually require rendering (and thus it's server friendly)
Two new config entries under the new [testing] namespace control behavior
- ta.HashLogFile, file where data should be logged, empty if not logging
- ta.HashCheckFile, past log to check against, empty if not checking
The emu will crash via verify if the logs don't match, and exit(1) if they do
- Rewrite mem ops to only modify regs after exception path
- Throw & catch logic for interpreter that raises the exception
- Re-enabled some commented mmu code
This adds support for separate config and data dirs.
On Linux, these will be compliant XDG Basedir Specification, i.e.
XDG_CONFIG_HOME and XDG_CONFIG_DIRS (or XDG_DATA_HOME and XDG_DATA_DIRS
respectively). On all other platforms, there currently just set to the
homedir path (so no previous behaviour has been changed).
If reicast wants to read and write a data file, it just calls
get_data_path("/samplefile.txt"). If it does not need to write to
that file, it just uses get_data_path("/samplefile.txt", false). That
way, we can also use system-wide dirs (like /usr/share/reicast on
linux), that the user usually doesn't have write access to.
The same applies for config file, where you use get_config_path(args)
respectively.
Reicast doesn't support exceptions yet, so this isn't of much use now,
and is intended mostly as documentation. nullDC used some call stack
hooking magic to handle exceptions, which was never generic and clean
enough to be worth the effort to port to Reicast.
- Setups state, copies binary
- Binary locks up w/ a reboot loop
Naomi roms have a 512-byte header, executable length seems to be
at 368 or 3C0. The rom is copied from [0, len) to 0x0c020000.The
bios then hands over control at 0x0c021000
Here's the original compiler warning:
../../core/hw/sh4/dyna/shil.cpp:700:24: warning: '&&' within '||'
[-Wlogical-op-parentheses]
...if (op->rd.is_reg() && op->rd._reg==reg_sr_T || op->op==shop_ifb)
~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ ~~
../../core/hw/sh4/dyna/shil.cpp:700:24: note: place parentheses around the '&&'
expression to silence this warning
...if (op->rd.is_reg() && op->rd._reg==reg_sr_T || op->op==shop_ifb)
^
( )
../../core/hw/sh4/dyna/shil.cpp:843:25: warning: '&&' within '||'
[-Wlogical-op-parentheses]
if (op->rs1.is_reg() && op->rs1._reg==reg_sr_T
~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
../../core/hw/sh4/dyna/shil.cpp:843:25: note: place parentheses around the '&&'
expression to silence this warning
if (op->rs1.is_reg() && op->rs1._reg==reg_sr_T
^
( )
../../core/hw/sh4/dyna/shil.cpp:844:25: warning: '&&' within '||'
[-Wlogical-op-parentheses]
|| op->rs2.is_reg() &&
op->rs2._reg==reg_sr_T
~~ ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
../../core/hw/sh4/dyna/shil.cpp:844:25: note: place parentheses around the '&&'
expression to silence this warning
|| op->rs2.is_reg() && op->rs2._reg==reg_sr_T
^
( )
../../core/hw/sh4/dyna/shil.cpp:845:25: warning: '&&' within '||'
[-Wlogical-op-parentheses]
|| op->rs3.is_reg() && op->rs3._reg==reg_sr_T
~~ ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
../../core/hw/sh4/dyna/shil.cpp:845:25: note: place parentheses around the '&&'
expression to silence this warning
|| op->rs3.is_reg() && op->rs3._reg==reg_sr_T
^
( )
This compiler warning has been fixed:
../../core/hw/sh4/dyna/decoder.cpp:1181:66: warning: '&&' within '||'
[-Wlogical-op-parentheses]
...|| blk->BlockType==BET_Cond_1 && blk->BranchBlock<=blk->addr)
~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
../../core/hw/sh4/dyna/decoder.cpp:1181:66: note: place parentheses around the
'&&' expression to silence this warning
...|| blk->BlockType==BET_Cond_1 && blk->BranchBlock<=blk->addr)
^
( )
This is the original warning message:
../../core/hw/holly/sb_mem.cpp:219:12: warning: comparison of unsigned
expression >= 0 is always true [-Wtautological-compare]
if ((base >=0x0000) && (base <=0x001F) /*&& (addr<=0x001FFFFF)*/...
~~~~ ^ ~~~~~~
This consolidates some of the work done for TARGET_NO_NVMEM and
feat/no-direct-memmap. If nvmem is disabled at compile time or alloc
fails _nvmem_enabled() will return false. Various other fixes
and cleanups all around.