summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2020-12-09- Implemented support for the Orthogonal extension intonew-assemblermrb0nk500
both the assembler, and the emulator. I finally figured out how I could get support for the Ortho extension implemented into the old assembler. The only reason for doing this, is to buy me some while I start work on the new assembler, and to help me get an idea for how to do the same in the new assembler.
2020-12-09- Implemented support for the Orthogonal extension intomrb0nk500
both the assembler, and the emulator. I finally figured out how I could get support for the Ortho extension implemented into the old assembler. The only reason for doing this, is to buy me some while I start work on the new assembler, and to help me get an idea for how to do the same in the new assembler.
2020-12-09- Implemented support for the Orthogonal extension intomrb0nk500
both the assembler, and the emulator. I finally figured out how I could get support for the Ortho extension implemented into the old assembler. The only reason for doing this, is to buy me some while I start work on the new assembler, and to help me get an idea for how to do the same in the new assembler.
2020-12-08- Started work on writing the new version of themrb0nk500
assembler. - Did alot of stuff in the emulator. - Did alot of stuff in the SuB Suite.
2020-12-08- Implemented support for the Orthogonal extension intomrb0nk500
both the assembler, and the emulator. I finally figured out how I could get support for the Ortho extension implemented into the old assembler. The only reason for doing this, is to buy me some while I start work on the new assembler, and to help me get an idea for how to do the same in the new assembler.
2020-12-08- Fixed yet another bug with the ortho extension.mrb0nk500
2020-12-08- Started work on writing the new version of themrb0nk500
assembler. - Did alot of stuff in the emulator. - Did alot of stuff in the SuB Suite.
2020-12-08- Fixed a bug with the ortho extension implementationmrb0nk500
in the emulator.
2020-12-08- Implemented support for the Orthogonal extension intomrb0nk500
both the assembler, and the emulator. I finally figured out how I could get support for the Ortho extension implemented into the old assembler. The only reason for doing this, is to buy me some while I start work on the new assembler, and to help me get an idea for how to do the same in the new assembler.
2020-12-04- Started work on writing the new version of themrb0nk500
assembler. - Did alot of stuff in the emulator. - Did alot of stuff in the SuB Suite.
2020-11-20- Implemented support for Sux's base extension.mrb0nk500
This is the biggest milestone I've reached for this project, since the base extension changes alot about what Sux can do by default, and now makes it a viable instruction set for modern day use, when compared with other instruction sets.
2020-11-20- Cleaned up a bit of the code.mrb0nk500
- Made the debug print for the CPU flags more readable. - Started work on implementing line number support into SuBAsm.
2020-10-06- Removed some debugging stuff from the SuB Suite.mrb0nk500
2020-10-06- Made the stack pointer 64 bit, rather than 16 bit.mrb0nk500
This is to allow for making the stack bigger for anything that needs to change the size of it. - Made the SuB Suite set the stack pointer to the end of the usable RAM, and allow for changing the stack size. In this case, the size of the stack is currently set to 192K, with the end of the heap being just below the stack.
2020-10-05- Fixed the rotate instructions.mrb0nk500
The carry flag is now set properly, and the rotation now is set properly by the carry flag, even for shift values greater than one. - Added a test program for properly testing the rotate instructions.
2020-10-05- Added a routine for testing the SuB Suite'smrb0nk500
implementation of free(), although it's commented out. - Removed the sbc() function from the emulator, since sbc can be done by just inverting the second operand of adc.
2020-10-04- Added support for reading, and writing outside themrb0nk500
emulator's memory. All reads outside of the emulator's memory give back $/0xFF bytes, while all writes outside of the emulator's memory are ignored. - Implemented malloc(), and free() in the SuB Suite. In order to do this, I had to add support for a heap, which I did by reserving the first 3 banks of the address space (the first 192K), and by adding a routine that finds the end of the RAM. In this case, I set the starting address for the routine at bank 3 (bank 4 with one indexing), but, the routine's starting address isn't hardcoded, and thus, any starting address can be passed as an argument. The routine uses the fact that we can now read/write outside the emulator's memory, and also uses the fact that writing outside the emulator's memory will be ignored, and that reading outside the emulator's memory will always read $/0xFF bytes, and uses that to signal that it's reached the end of the RAM. - Added a test program for getting the size of RAM starting at address $/0x20000.
2020-09-24- Fixed some more bugs with struct, and union handling.mrb0nk500
2020-09-21- Fixed some issues with how structs, and unions weremrb0nk500
handled. - Added a function called fix_symtree(), which when called. will rearrange the symbol tree based on the order they're declared in by the token stream. The reason I wrote this, was to make sure the symbol tree could be printed correctly. - Optimized print_symtree() to now use tail recursion. - Started adding all of the SuB Suite's structs.
2020-09-18- Added support for structs, and unions to themrb0nk500
emulator's assembler. - Make the symbol table a doublely linked list, in both ways. - Optimized the memcopy() function. - Changed the benchmark timing, to now use a timer, and stops once the timer reaches zero. When the timer hits zero, it sends SIGALRM to the main function, which tells the emulator that the benchmark is done.
2020-08-31- Optimized the memory read/write functions a bit more.mrb0nk500
- Added a memcopy() function, for later on.
2020-08-30- Did some more work on SuBAsm's lexer.mrb0nk500
- Optimized the memory read, and write functions. - Made the emulator faster, and cleaner in general.
2020-08-17- Fixed some bugs in the emulator's assembler.mrb0nk500
- Simplified the effective address functions. - Made SuBEditor a bit faster. - JSR, and RTS now support using the RS prefix, which is used to specify the return address size, with an RS prefix of 0 being a return address size of 64 bits, rather than 8 bits.
2020-08-13Refactored get_addr(), and all of the effectivemrb0nk500
address handling. It's now all done using several functions for each addressing mode, with the result being the effective address. I did this to make the codebase cleaner, and more readable.
2020-08-12- Refactored the escape sequence parsing, and handling.mrb0nk500
It now uses a struct to store the escape sequence. Before it handles the escape sequence, it parses it, which includes things like getting any arguments that are supplied, and getting the mode type. - Moved the code that handles control codes to a separate function. The reason for doing this was because I wanted to make the escape sequence handling faster, but also make the code more readable at the same time. I got the idea to do this from st, a terminal emulator created by the suckless.org project.
2020-08-11Refactored the keyboard I/O emulation, again.mrb0nk500
I decided to use keypad now, and create a function to return the actual key sequences. The keyboard I/O is also now being handled by the io emulation function, and not by the main function. This should get rid of any possible deadlocks.
2020-08-11- Changed the spacing format to now store the number ofmrb0nk500
spaces, and tabs before the current token. Along with also now storing a sub-token count which is used in case the token's secondary id is meant to be treated as a sub-token. - Added suppor for saving the number of blank lines before the current tokenized line.
2020-08-10Refactored the keyboard I/O emulation.mrb0nk500
It now saves the characters of the typed key into a buffer, and returns each character in the buffer one at a time, until it reaches a null terminator, at which point it starts getting the next key. The reason for doing this was to make getting multi character keys faster, by not calling getch() for each character. The only downside to this is that I have to set a timeout() for getch(), making it somewhat non blocking, although the delay is 8 milliseconds. The next thing I'll probably be doing, is working more on the SuB suite.
2020-08-09Added the bitwise OR, left shift, and right shiftmrb0nk500
expressions to the emulator's assembler.
2020-08-08- Refactored the opcode table, in order to make themrb0nk500
instruction formatting simpler. - Refactored the instruction table of the emulator's assembler, it now has two parts, the addressing mode bits, and the base value. The base value is what's used to generate the actual opcode, with the addressing mode bits telling the assembler what addressing modes this instruction supports. The reason for doing this was to use less space. For comparison, the previous version used 870 bytes for the instruction table, while the new version uses only 222 bytes. The new version is nearly 4 times smaller than the pervious version. - The B register based ALU instructions now use their own addressing mode, and are specified by using 'b' as the operand for those instructions. For example, to add the Accumulator with the B register, you now use "ADC B" instead of "AAB".
2020-08-08Did a ton of stuff.mrb0nk500
- Changed the file structure of the SuB Suite, so that all variable declarations, symbols, and constants are in a single file. - Moved the C library functionss into a separate file, and made them use stack frames. - Added support for using the emulator's assembler for realtime debugging, to enter it, get in to stepping mode by pressing Ctrl+s, press any other key, then press F1, The reason for having to press some other key before pressing F1 is because it only allows entering the assembler when the keyboard is not ready. - Added the ".res" directive to the emulator's assembler, the ".res" directive tells the assembler to reserve however many bytes specified by the operand. - Fixed some bugs in the emulator's assembler.
2020-07-08- Simplified some parts of the codebase.mrb0nk500
- Fixed some bugs with the push, and pull functions - Fixed a bug in the assembler.
2020-07-06- Implemented a new opcode table.mrb0nk500
- Added a new preifx called the OF prefix, which adds the contents of a specific register to the current operand. - Added a table generator, which parses opcode table csv files.
2020-06-22Did some more stuff.mrb0nk500
- Fixed some bugs in the emulator's assembler. - Worked on SuBAsm's lexer some more. - Created a new directory for the SuB suite, and moved all of the SuB suite's files in there.
2020-06-13Optimized, and cleaned up the codebase.mrb0nk500
2020-06-13Made the source code cleaner.mrb0nk500
2020-06-13Renamed get_opsize(), to get_addrsize(), in order tomrb0nk500
make it clear about what it does.
2020-06-13Make the registers single 64 bit uints, and convertmrb0nk500
all the value getting, and setting into macros. This is to make the codebase cleaner.
2020-06-13Fixed some bugs with freeing the linked lists.mrb0nk500
Thanks to BieHDC for pointing this out to me.
2020-06-11Did some more stuff.mrb0nk500
- Fix some bugs with strings. - Started to refactor the instruction functions. - Added support for using RS prefixes on the memory based increment, and decrement instructions. - Started work on SuBAsm's lexer. Have fun looking at this, BieHDC. :)
2020-06-01- Deleted some commented code.mrb0nk500
- Fixed a bug in SuBAsm.
2020-06-01Did some more refactoring to the assembler.mrb0nk500
- Refactored the symbol, and fixup table to now use a linked list - Added support for local symbols to the assembler. - Rewrote SuBEditor, and SuBAsm to use local symbols.
2020-05-30Fixed a typo, oof.mrb0nk500
2020-05-30Refactored the assembler a bit more, in order to removemrb0nk500
code duplication. The assembler now uses pre-tokens, which are smaller tokens, that make up the larger tokens.
2020-05-29Make JSL, JSR absolute, and remove RTL.mrb0nk500
The reason for doing this was because JSL, and RTL are redundent, as they both do the same thing as JSR, and RTS.
2020-05-28Fixed some stuff in the assembler.mrb0nk500
2020-05-28Refactored the assembler, yet again, and implementedmrb0nk500
support for comma separated values. The assembler now uses a linked list of tokenized lines, each containing a linked list of tokens for that line. I also moved all of the large tables into the higher parts of memory, in order to free up the lower part of memory for the user. Comma sepparated values only work with directives, and only with the byte", word, dword, and qword directives. I also added support for getting the upper, and lower halves of an address. The tokens for both of those are '<', and '>' respectively.
2020-05-18Fixed some more bugs in the assembler.mrb0nk500
2020-05-18Did alot of stuff while I was up at the family trailer.mrb0nk500
- Moved the large enums, and large tables into separate header files. - Added enums for implementing the base extension - Fixed a bug in the assembler. - Worked more on SuBAsm.
2020-05-09Added support for single quote marks to the emulator'smrb0nk500
assembler. Single quote marks works in the assembler just like they do in C, except that it only supports a handful of escaped characters, like '\n', and '\r'.