Releases: Milo-D/libvmcu-Virtual-MCU-Library
v.0.8.13
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
- reader for different file formats can be now added to reader/format/
v.0.8.12
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
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
- a node consists of
- int32_t used, a simple node counter, should be equal to report.progsize
- vmcu_cfg_t is the controlflow graph of libvmcu. It holds,
-
added: CFG example driver (driver/cfg/)
-
using CMake now
-
added syntax highlight for stepper driver
v.0.8.10
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.
- this stage annotates instructions by adding additional information about
-
Added: rwaccess driver (driver/rwaccess/)
-
Adjusted drivers, etc.
v.0.8.9
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
- this structure is able to represent a registerpair by holding
-
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
- vmcu_operand_t now consists of a
-
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.
- instead, an illegal opcode (.dw xxxx) has following attributes
-
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
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
v.0.8.6
v.0.8.5
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
- Each instruction was tested by decoding two single opcodes
-
Added: decoder tests for st_z and sts_32
v.0.8.4
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