Skip to content

Releases: Milo-D/libvmcu-Virtual-MCU-Library

v.0.8.13

06 Sep 17:32
Compare
Choose a tag to compare
v.0.8.13 Pre-release
Pre-release

v.0.8.13 - 2021-09-06

  • Now supporting Motorola SRecord

  • merged pull-request (#68) from pointbazaar (Alexander Hansen)

    • added format reader for motorola hex (SRecord)
    • thanks for that :)
  • refactored srec format reader (PR #68)

    • adjusted style
    • fixed some minor bugs
  • connected srec format reader to pipeline

  • Important: file extension decides which reader will be invoked

    • *.hex ==> invokes intel hex reader
    • *.srec ==> invokes srec reader
  • added format reader interface (reader/reader.c)

    • reader for different file formats can be now added to reader/format/
      • for example reader/format/ihex.c to read the intel hex format

v.0.8.12

10 Aug 23:43
Compare
Choose a tag to compare
v.0.8.12 Pre-release
Pre-release

v.0.8.12 - 2021-08-10

  • reduction of heap usage and overall memory usage

    • only 10 heap allocs needed to disassemble an intel hex file
  • getting rid of basic integers in important sections

    • flash address is now represented as uint32_t
    • opcodes are (finally) represented as uint32_t
    • for more user relevant changes see libvmcu headers
  • the disassembly is now sorted (ascending, sorted by address)

    • this change is mandatory for the cfg
  • refactored decoder

    • decoder operates now on an intermediate representation (binary_buffer) of the binary
  • added vmcu_binary_buffer_t (only for internal usage)

    • this serves as an intermediate representation for the decoder
    • every single format reader (reader/) should return a binary buffer
  • refactored intel hex reader

  • adjusted example section in README

v.0.8.11

07 Jul 02:25
Compare
Choose a tag to compare
v.0.8.11 Pre-release
Pre-release

v.0.8.11 - 2021-07-07

  • added: CFG - control flow graph

    • vmcu_cfg_t is the controlflow graph of libvmcu. It holds,
      • vmcu_cfg_t node*, a dynamic array of vmcu_node_t structures
      • node[0] is the entry node
        • a node consists of
          • vmcu_xref_t xto, a cross-reference to the corresponding instruction (xref-to)
          • vmcu_cfg_node_t *t, a node pointer for the true branch
          • vmcu_cfg_node_t *f, a node pointer for the false branch
      • int32_t used, a simple node counter, should be equal to report.progsize
  • added: CFG example driver (driver/cfg/)

  • using CMake now

  • added syntax highlight for stepper driver

v.0.8.10

28 Jun 19:43
Compare
Choose a tag to compare
v.0.8.10 Pre-release
Pre-release

v.0.8.10 - 2021-06-28

  • Added: vmcu_access_t

    • vmcu_access_t holds bitfields (representing booleans)

    • following bitfields are available

      • registers (true if instr reads/writes gpr)
      • flash (true if instr reads/writes flash)
      • stack (true if instr reads/writes stack)
      • io (true if instr reads/writes io segment)
      • ds (true if instr reads/writes data segment)
      • sp (true if instr reads/writes stack pointer)
      • pc (true if instr reads/writes program counter)
      • c_flag (true if instr reads/writes carry flag)
      • z_flag (true if instr reads/writes zero flag)
      • n_flag (true if instr reads/writes negative flag)
      • v_flag (true if instr reads/writes overflow flag)
      • s_flag (true if instr reads/writes sign flag)
      • h_flag (true if instr reads/writes halfcarry flag)
      • t_flag (true if instr reads/writes t flag)
      • i_flag (true if instr reads/writes interrupt flag)
    • NOTE: Although (stack, io, registers ⊂ ds), (stack = true) or (io = true)
      or (registers = true) does not imply (ds = true).

  • Added: annotator stage in pipeline

    • this stage annotates instructions by adding additional information about
      the instruction itself, like groups and explicit/implicit read/write access.
  • Added: rwaccess driver (driver/rwaccess/)

  • Adjusted drivers, etc.

v.0.8.9

22 Jun 20:49
Compare
Choose a tag to compare
v.0.8.9 Pre-release
Pre-release

v.0.8.9 - 2021-06-22

  • VMCU_OP rework

    • rename to VMCU_OPTYPE
    • added new types to enumeration. Enumeration after rework:
      • VMCU_OPTYPE_NONE = -1 (no operand, therefore no type)
      • VMCU_OPTYPE_R, (register operand)
      • VMCU_OPTYPE_RP, (registerpair operand)
      • VMCU_OPTYPE_X, (x pointer operand)
      • VMCU_OPTYPE_Y, (y pointer operand)
      • VMCU_OPTYPE_Z, (z pointer operand)
      • VMCU_OPTYPE_B, (bit number 0-7)
      • VMCU_OPTYPE_K4, (4-bit immediate)
      • VMCU_OPTYPE_K6, (6-bit immediate)
      • VMCU_OPTYPE_K8, (8-bit immediate)
      • VMCU_OPTYPE_IO5, (5-bit I/O address)
      • VMCU_OPTYPE_IO6, (6-bit I/O address)
      • VMCU_OPTYPE_D7, (7-bit data address)
      • VMCU_OPTYPE_D16, (16-bit data address)
      • VMCU_OPTYPE_P22, (22-bit program address)
      • VMCU_OPTYPE_S7, (7-bit signed displacement, program memory)
      • VMCU_OPTYPE_S12 (12-bit signed displacement, program memory)
    • similar types can be found at https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set
  • Added: VMCU_REGISTER - an enumeration of AVR general purpose registers (r0-r31)

  • Added: vmcu_registerpair_t structure

    • this structure is able to represent a registerpair by holding
      • a VMCU_REGISTER low - low byte of pair
      • a VMCU_REGISTER high - high byte of pair
  • vmcu_operand_t rework

    • vmcu_operand_t now consists of a
      • VMCU_OPTYPE - an enumeration of different operand types
      • value union - a c-union holding different kinds of operand values
  • The value union of vmcu_operand_t contains

    • uint8_t k for type = K4, K6, K8
    • uint8_t b for type = B
    • uint8_t io for type = IO5, IO6
    • uint16_t d for type = D7, D16
    • uint32_t p for type = P22
    • int16_t s for type = S7, S12
  • disassembled .dw directive (= illegal opcode) does not have its opcode as source operand anymore

    • instead, an illegal opcode (.dw xxxx) has following attributes
      • instr->src.type = VMCU_OPTYPE_NONE
      • instr->dest.type = VMCU_OPTYPE_NONE
      • therefore no operand values
    • in order to simplify printing these "instructions", I've decided to move the .dw value (xxxx)
      to instr->mnem.base. So the base mnemonic is now ".dw xxxx" with no operands.
  • endloop driver (driver/endloop/) improvement

    • endloop driver is now able to detect unconditional and conditional endless loops
  • adjusted driver code

  • minor improvements

v.0.8.8

20 Jun 01:11
Compare
Choose a tag to compare
v.0.8.8 Pre-release
Pre-release

v.0.8.8 - 2021-06-20

  • Added: vmcu_mnemonic_t structure to vmcu_instr_t

    • replaces char *mnem
    • holds char literals (base, src, dest, comment)
    • base = instruction string ("ldi", "movw", etc.)
    • src = source operand string ("r29", "0xff", etc.)
    • dest = destination operand string ("r29", "0xff", etc.)
    • comment = comment string ("; r21 <- 0xab", "IF <- 0", etc.)
  • Added: disasm driver with syntax highlighting (driver/disasm/)

  • disassembler rewrite

  • adjusted examples, drivers, readme

v.0.8.7

13 May 20:00
Compare
Choose a tag to compare
v.0.8.7 Pre-release
Pre-release

v.0.8.7 - 2021-05-13

  • opcode cleanup

    • removed bset due to opcode shadowing (se<*>)
    • removed bclr due to opcode shadowing (cl<*>)
    • removed brcs due to opcode shadowing (brlo)
  • fixed inconsistency in function signatures

v.0.8.6

08 Apr 21:05
Compare
Choose a tag to compare
v.0.8.6 Pre-release
Pre-release

v.0.8.6 - 2021-04-08

  • Added: submodule for string analysis

    • discovers strings (ascii) in binary
  • Minor bug fix in intel hex reader

v.0.8.5

27 Mar 03:52
Compare
Choose a tag to compare
v.0.8.5 Pre-release
Pre-release

v.0.8.5 - 2021-03-27

  • Completed decoder (byte pipeline) testing.

    • Each instruction was tested by decoding two single opcodes
      • one opcode with no variable bits set
      • one opcode with random bits set
  • Added: decoder tests for st_z and sts_32

v.0.8.4

18 Mar 16:09
Compare
Choose a tag to compare
v.0.8.4 Pre-release
Pre-release

v.0.8.4 - 2021-03-18

  • Worked on naming Convention of xrefs
    • xref-from and xref-to are using the same structure (vmcu_xref_t)
    • xref-from's will always be exposed as xfrom with a list counter n_xfrom
    • xref-to's will always be exposed as xto with a list counter n_xto