summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-01-21sux.h: Corrected typos in bitmasks that dealt withmrb0nk500
conditional branches.
2022-01-21opcode-bitmask-gen: Add relative addressing to themrb0nk500
list of addressing modes. oof, forgot about that until just now.
2022-01-21sux.h: Add bitmasks for setting/testing/clearing flags,mrb0nk500
and for bitwise operations.
2022-01-19sux.h: Add bitmask for unconditional jumps.mrb0nk500
2022-01-19sux.h: Add bitmasks for stack related operations.mrb0nk500
2022-01-19sux.h: Make `rs` non const.mrb0nk500
2022-01-19sux.h: Set program counter to interrupt vectors, whenmrb0nk500
an interrupt gets triggered. This is done in order to properly use the `read_addr()` function.
2022-01-19sux.h: Add bitmasks for writing a value to memory.mrb0nk500
2022-01-19sux.h: Corrected bitmask for `reg = &cpu->a;`.mrb0nk500
2022-01-19opcode-bitmask-gen: Fixed bug that occurred when maskingmrb0nk500
out unwanted bits when inverting the addressing mode bitmask.
2022-01-18opcode-bitmask-gen: Invert the addressing mode bitmaskmrb0nk500
after all bits have been found, if inverting is enabled.
2022-01-18Add support for getting an inverted addressing modemrb0nk500
bitmask in `opcode-bitmask-gen`.
2022-01-18Add bitmasks for operations that mogrify (overwrite)mrb0nk500
memory directly.
2022-01-18Add bitmask for instructions that use the processormrb0nk500
status register.
2022-01-18Remove `pbits` from instruction handler.mrb0nk500
2022-01-18Initialize `tmp`, and `tmp2` to `0`, rather than `-1`.mrb0nk500
2022-01-18Add the rest of the load opcodes to the other registermrb0nk500
bitmasks.
2022-01-18Add `LDA` opcodes to accumulator bitmask.mrb0nk500
2022-01-16Add bitmasks for the registers.mrb0nk500
2022-01-16Fix bug in print_mask() where it'd always use the firstmrb0nk500
instruction entry, rather than the entry of the supplied instruction id(s).
2022-01-14Consolidate reading addresses for non-indirect addressingmrb0nk500
modes into a single block.
2022-01-14Add bitmasks for indexing, and indirect addressing.mrb0nk500
2022-01-14Add bitmasks for reading data from memory, andmrb0nk500
immediate data.
2022-01-14Add bitmask for absolute addressing.mrb0nk500
2022-01-14Add a bitmask generator for the new instruction handlermrb0nk500
macro. This program will help with generating the bitmasks for the instruction handler macro.
2022-01-14Start work on new instruction handler macro.mrb0nk500
This macro will create a function for each opcode, but with only a single block of code for each one. It uses a bitmask (one bit for each opcode) that will evaluate which blocks of code are used by each opcode. The bitmask checks are (usually) evaluated at compile time, which means that each function will only have the blocks that had the bit for that opcode set in the bitmask.
2021-05-09Subtract another 16 from the size in clr_arr.HEADmastermrb0nk500
This fixes a bug where it would zero out the info of the next malloc'd block.
2021-05-09Replace call to memcpy, with call to memcpy_dir.mrb0nk500
This fixes a bug where when shifting the line left, it would overwrite everything after the cursor with the character at the cursor's position. The reason this was happening is because memcpy copies from start to end, and because the destination is more than one byte ahead of the source, it overwrites the next length source bytes, which will repeat until it's copied n bytes.
2021-05-09Add a end to start version of memcpy, and a selectablemrb0nk500
direction version of memcpy. This can help with some subroutines/functions like shftln, which need to copy data in a certain direction depending on the condition.
2021-05-09Add scr_ptr to the list of outputted addresses when inmrb0nk500
debuging mode.
2021-05-08Fixed a bug in print_char caused by not zero extendingmrb0nk500
`b`.
2021-05-08Fixed a bug in print_str to do with clobberedmrb0nk500
registers. This was due to print_char clobbering `d` when calling get_index.
2021-05-08Replace get_ctrlidx with get_index in print_char.mrb0nk500
This helps reduce code duplication, and makes it easier to both read, and add new handlers.
2021-05-08Add a new subroutine called get_index.mrb0nk500
This subroutine gets the index of a given character from a string. This will help in replacing some routines like get_ctrlidx, isdelm, and isdelm2.
2021-05-08Get the pointer from the control code handler tablemrb0nk500
using SIB, rather than with lsl. This doesn't increase, or decrease the code size, but does make it both more compact, and easier to read.
2021-05-08Replace the old string parsing code inmrb0nk500
handle_directive() with a call to parse_quote(). This not only reduces code duplication, but also makes it more robust in the process.
2021-05-08Add support for saving to a string buffer inmrb0nk500
parse_quote(). This allows for replacing the string parsing code in handle_directive() with a call to parse_quote().
2021-05-08Rewrite `clr_arr` to use the ortho extension.mrb0nk500
This makes the code much smaller than the previous version.
2021-05-08Replace all instances of $/0x1B with the escapemrb0nk500
sequence for the escape character.
2021-05-08Start replacing the numbered duplicate local symbolsmrb0nk500
with deeper scope local symbols. This is done to make the code easier to read.
2021-05-08Fixed a bug with how local symbols with a depthmrb0nk500
greater than one are handled. It wasn't getting the correct depth when relative local symbols were used. So to account for that, it adds the relative depth (number of '@'s in a row), with the absolute depth (number of '.'s), to get the true scope depth.
2021-05-08Start implementing whole file lexing.mrb0nk500
This will eventually replace the per-line lexer.
2021-04-04- Fixed a bug to do with how SIB operands were parsedmrb0nk500
in the assembler. - Rewrote more of the SuB Suite to use the new calling convention. - Fixed a bug to do with SIB operands in the emulator's disassembler. - Made the MMV instruction not require a loop prefix for copying data.
2021-02-25- Implemented the multiply expression into the assembler.mrb0nk500
- Implemented support for the SIB addressing mode into the assembler. SIB is short for "Scale Index, and Base", and works much like x86's version of SIB (scale*index+base), although my version supports any scale value between 1, and 256. - Redid the line shifting routine in SuBEditor. It now uses memcpy, and memset to do that, and also supports shifting the line left, or right by any number of characters.
2021-02-13- Reverted back one commit before the previous commit.mrb0nk500
This is because the previous commit actually created a bug, rather than fixing one. - Added JMP, and JSR to the ortho extension, and implemented them both in the assembler, and emulator.
2021-02-11Fixed a bug in the lexer.mrb0nk500
2021-02-11Simplified the expression parser.mrb0nk500
I was finally able to figure out how to implement the expression parser into two functions. It can be done in a single function, but I used two functions to make it easier to read.
2021-02-08Completly rewrote the expression handler.mrb0nk500
It's now separate from the lexer, and was designed to make it both easier to understand, and easier to parse.
2021-01-27- Fixed some bugs in the emulator.mrb0nk500
- Started work on implementing the Super VIA emulation. - Added support for disabling disassembly per instruction, when in debug mode. - Did some more work on rewriting the SuB Suite to work with the new calling convention. - Rewrote the symbol handling code in the emulator's assembler, to make it both simpler, and to add support for arbitrarily deep symbol scopes. - Added support for arbitrarily deep local symbol scopes. For example, to declare a symbol of depth 2, you add two '@' characters to the start of the symbol name. In other words, the number of '@' characters before the symbol name is what determines the scope of that symbol. And to use a symbol thats outside the current scope, you would use the same syntax as using a struct member, so you would do `global.local`.
2020-12-09- Made the emulator's debugger use individual windows.mrb0nk500
I mainly did this to be able to display all 16 main registers, but also to simplify the debugger.