Releases: rzumer/dez80
DeZ80 v4.0.1
This patch release of DeZ80 corrects a longstanding error in Condition
variants set for conditional jump instructions that check the Parity/Overflow and Sign flags. The mnemonics for those flags do not follow the usual notation, so the inverted condition was inverted once more when formatted, which allowed the integration tests to pass despite it being incorrect. This affects the following instructions:
RET PO
JP PO, nn
CALL PO, nn
RET PE
JP PE, nn
CALL PE, nn
RET P
JP P, nn
CALL P, nn
RET M
JP M, nn
CALL M, nn
Thanks to @redcode for finding this issue!
DeZ80 v4.0.0
This major release of DeZ80 changes the top-level visibility of some data structures with the aim of promoting verbosity where it is helpful while keeping the most basic interfaces (Instruction
, InstructionDecoder
, and DecodingState
) available at the top level, removes some redundant interfaces (most notably InstructionDecoder::new()
), and introduces DecoderState
variants for displacement operands. This primarily benefits emulator/simulator applications that need to handle displacement computation cycles and could not disambiguate between displacement and non-displacement operands in indexed instructions in prior versions. For indexed bitwise instructions, IndexedBitwiseDisplacement
replaces IndexedBitwiseOperand
in DecoderState
.
This would probably be suitable for a v1.0.0 release if I hadn't jumped the gun.
Changes:
- Update dependencies and their usage
- Clean up some minor warnings and comments
- Add some interfaces and re-exports
- Remove some interfaces and re-exports
- Distinguish displacement operands from non-displacement operands in
DecodingState
- Fix a security warning for
dez80_cli
stemming from an abandoned dependency package
DeZ80 v3.0.1
This patch release of DeZ80 corrects the order of ignored indexed instruction prefixes when they are chained in an opcode sequence.
For example, the decoded output of the byte sequence DD FD DD FD FD 00
would previously have its ignored_prefixes
field incorrectly set to Indexed(IX), Indexed(IX), Indexed(IY), Indexed(IY), Indexed(IY)
instead of the correct value Indexed(IX), Indexed(IY), Indexed(IX), Indexed(IY), Indexed(IY)
.
DeZ80 v3.0.0
This major release of DeZ80 overhauls the instruction decoding API to always return the decoding state when a failure occurs. This provides more information to callers about partially-decoded instructions, as the returned DecodingState
differentiates between opcode and operand reads, and embeds any decoded prefix. This also homogenizes return types between Instruction
decoding constructors and InstructionDecoder
.
Changes:
- Change decoder return types to
Result<Instruction, DecodingState>
- Move
InstructionDecoder
to a new module - Remove deprecated
InstructionDecoder
functions
DeZ80 v2.1.0
This minor release of DeZ80 modifies the InstructionDecoder
API by adding push_byte()
and push_slice()
functions, as well as a separate try_decode()
function that attempts to decode an instruction from the decoder source. decode_byte()
and decode_slice()
are now deprecated and will be removed in the next major release.
The new try_decode()
function returns a Result<Instruction, PartialDecodeResult>
, which provides some information about an instruction before there are enough bytes to decode it fully.
This release also fixes an issue with the decode_byte()
function where the decoder state would be completely cleared after a successful decode even if there were more opcode bytes queued.
DeZ80 v2.0.0
This major release of DeZ80 adds a new Operand
enum variant to address an issue with the byte representation of the OUT (C),0
instruction (0xED71
), which previously output an extra 0x00-valued byte.
With this release, the byte representations of all tested official and unofficial instructions are properly tested and match a compiled test instruction stream.
DeZ80 v1.2.1
This patch release of DeZ80 corrects an error in the Instruction::to_bytes()
function, where port number operands were missing from the output vector.
Note: prior to v2.0.0, there is another known issue with the to_bytes()
function, where the OUT (C),0
instruction (0xED71
) outputs an extra 0x00
-valued byte.
DeZ80 v1.2.0
This minor release of DeZ80 adds a stateful InstructionDecoder
struct that allows consumers more freedom in their implementation of the decoding process. Single bytes can be decoded at a time, or entire slices of any length can be queued and decoded one instruction at a time.
DeZ80 v1.1.1
This patch release of DeZ80 corrects an error in the Instruction::to_bytes()
function, where the instruction opcode was always written after operands. The opcode is now written before operands for all but bitwise indexed instructions, for which the displacement operand precedes the opcode.
DeZ80 v1.1.0
This minor release of DeZ80 adds a Flag::index()
function that returns the zero-based bit index of a flag in the flag register.