Releases: suzukiplan/z80
Releases · suzukiplan/z80
Version 1.10.0
- Abolish FP functions (NOTE: Destructive change)
- Eliminate
FP
methods that register callback functions as explicit function pointers - In principle,
std::function
should be used - If you defined
-DZ80_NO_FUNCTIONAL
,std::function
should not be used, and use function pointer explicity.- This is a remedy for the unavailability of std::function in the Baremetal environment of the RaspberryPi, etc.
- Alternatively, it may be desirable to define this in an environment with severe performance constraints.
- Eliminate
- Added compile option
-DZ80_NO_EXCEPTION
to not throw exceptions - Add
wtc.fetchM
and clock test case for MSX - Add compile flags for performance:
Z80_CALLBACK_WITHOUT_CHECK
... Omit the check process when callingconsumeClock
callbackZ80_CALLBACK_PER_INSTRUCTION
... CallsconsumeClock
callback on an instruction-by-instruction basis (NOTE: two or more instructions when interrupting)Z80_UNSUPPORT_16BIT_PORT
... Reduces extra branches by always assuming the port number to be 8 bits
- optimize checkConditionFlag (do not use branch)
- optimize rotate instructions
- optimize flag set/reset
Version 1.9.3
- Add compile flags for performance:
-DZ80_DISABLE_DEBUG
... disablesetDebugMessage
method-DZ80_DISABLE_BREAKPOINT
... disableaddBreakPoint
andaddBreakOperand
methods-DZ80_DISABLE_NESTCHECK
... disableaddCallHandler
andaddReturnHandler
methods
- The return value of
consumeClock
was returning the number of clocks consumed, but this was changed tovoid
because it was redundant. - Add the constructor without arguments.
- Add an execute method without expected clocks
- optimize acqauire register-pointer and register procedure
- optimize bit calculation
- optimize checkConditionFlags
Version 1.9.2
bugfix:
- The value of the upper 8 bits of the port number of the immediate I/O operands (
IN A, (n)
andOUT (n), A
) when executed in 16-bit port mode has been changed from register B to A. (issue: #54 )
Version 1.9.1
- Corrected a degrade in version 1.9.0 #52
INI
,INIR
,IND
andINDR
-> post decrement the B register (revert to 1.8.0)OUTI
,OTIR
,OUTD
andOTDR
-> pre-decrement the B register (keep 1.9.0)
Version 1.9.0
- Modify the timing of decrementing the B register with the repeat I/O operands (
INI
,INIR
,IND
,INDR
,OUTI
,OTIR
,OUTD
andOTDR
). (NOTE: Destructive change)- before
- execute IN/OUT
- B = B - 1
- after
- B = B - 1
- execute IN/OUT
- Related Issue: #51
- before
Version 1.8.0
- Make strict the registers conditions at callback time (NOTE: Destructive change specification)
- see the details: #49
- When a runtime error occurs, such as executing an instruction that not exists, a crash used to occur, but now it throws a
std::runtime_error
exception. - add new FP methods:
addBreakPointFP
addBreakOperandFP
addReturnHandlerFP
addCallHandlerFP
- add new setCallback methods:
setupMemoryCallback
(split from setupCallback)setupDeviceCallback
(split from setupCallback)setupMemoryCallbackFP
(split from setupCallbackFP)setupDeviceCallbackFP
(split from setupCallbackFP)
- Implicit call the callback setter methods (
with FP
), when a function pointer that is not template is explicitly specified when a callback setter methods (without FP
) was called.
Version 1.7.1
A bug that prevented addBreakOperand
from working as expected has been addressed.
Version 1.7.0
- Destructive change specification of in/out callback:
- before: 2nd argument is
unsigned char
std::function<unsigned char(void*, unsigned char)> in
std::function<void(void*, unsigned char, unsigned char)> out
- after: 2nd argument is
unsigned short
std::function<unsigned char(void*, unsigned short)> in
std::function<void(void*, unsigned short, unsigned char)> out
- before: 2nd argument is
- Add an argument
returnPortAs16Bits
to the constructor to specify whether the port should receive 16-bit - Add a constructor without set callbacks
- Add the set callbacks method:
setupCallback
andsetupCallbackFP
setupCallback
... usingstd::function
setupCallbackFP
... using function pointer
- Add the set callback as function ponter methods:
setDebugMessageFP
setConsumeClockFP
- Optimize performance:
BreakOperands
andBreakPoints
- before: liner search the target address/opcode
- after: binary search the target address/opcode
Version 1.6.0
- Use
std::function
...constructor, addBreakPoint, addBreakOperand, setDebugMessage, setConsumeClockCallback, addReturnHandler, addCallHandler
- Support multibyte (with prefix) instructions at addBreakOperand
- Change specification of addBreakOperand callback
- befofe:
z80.addBreakOperand(operandNumber, [](void* arg) { ... }
- after:
z80.addBreakOperand(operandNumber, [](void* arg, unsigned char* opcode, int opcodeLength) { ... }
- befofe:
- Destructive change specification of removeBreakPoint:
- before: specify function pointer for remove
- after: specify address number for remove
- Destructive change specification of removeBreakOperand:
- before: specify function pointer for remove
- after: specify operand number for remove
- Destructive change specification of setDebugMessage for reset:
- before:
z80.setDebugMessage(NULL)
- after:
z80.resetDebugMessage()
- before:
- Destructive change specification of setConsumeClockCallback for reset:
- before:
z80.setConsumeClockCallback(NULL)
- after:
z80.resetConsumeClockCallback()
- before:
- Destructive change specification - removed following methods:
removeCallHandler
removeReturnHandler
- remove warning:
implicit conversion changes signedness: 'unsigned char' to 'signed char' [-Werror,-Wsign-conversion]
Version 1.5.0
- Implemented several undocumented instructions of ED instruction set.
- bugfix: Corrected opcode
ED70
behaviorIN F, (C)
->IN (C)
- bugfix: Corrected opcode
ED71
behaviorOUT (C), F
->OUT (C),0