Skip to content

Releases: rzumer/dez80

DeZ80 v4.0.1

18 Feb 21:14
Compare
Choose a tag to compare

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

07 Feb 06:17
Compare
Choose a tag to compare

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

07 Feb 03:40
Compare
Choose a tag to compare

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

04 Sep 23:28
Compare
Choose a tag to compare

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

04 Sep 08:23
Compare
Choose a tag to compare

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

01 Sep 05:33
Compare
Choose a tag to compare

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

01 Sep 05:29
Compare
Choose a tag to compare

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

01 Sep 02:50
Compare
Choose a tag to compare

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

01 Sep 02:31
Compare
Choose a tag to compare

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

30 Aug 23:44
Compare
Choose a tag to compare

This minor release of DeZ80 adds a Flag::index() function that returns the zero-based bit index of a flag in the flag register.