Repository navigation
Version 1.0.0
ISA Changes
-
Removed:
- ROM module
- Timer module
-
RAM is now 96kB as it has expanded into where ROM used to be
-
Programs are now executed from RAM instead of ROM
-
Added flash memory module
- 1MB (512k words) of flash memory provided by two emulated SST39SF040 ICs
- First 256 words directly memory mapped (programs can be executed from here, eg a bootloader)
- Two address registers used to hold 19-bit address required to access the rest of the memory
-
Control unit
- Moved stack pointer register into control unit.
- Operands can now use relative addressing (expressed as an offset from the program counter or stack pointer)
- Enables position independent code (compiler generates this by default)
- Removes limit on stack frame sizes
- Program counter can either be reset to the start of RAM (0x4000) or the flash bootloader (0x2000)
- Simplified
callinstruction- It now only writes the PC of the next instruction to the callee's stack frame instead of also writing the current stack pointer
- Now fetch and execute microcode are both 8 bits wide, simplifying physical implementation
- Stack pointer must now be 2-word aligned (even)
-
Now only 2 user input and output registers (down from 3), reduces number of switches required for physical implementation
-
ALU simplified:
- Logical NOT and left shift operators removed (can be composed from subtraction and addition respectively)
- Can now load one value into both operand registers at once (combine with addition to get left shift in the same number of cycles as before)
Emulator
- New GUI design
- Fixed bug where RAM visualiser would sometimes get out of sync
Compiler
-
Compiler avoids emitting never-taken or pointless (just skips to next instruction)
gotoinstructions -
Added
passinstruction (use when an indent is required, like in Python) -
^is now XOR -
**is now exponent -
A
writeinstruction is added before everycallto save the current SP to the callee's stack frame (this used to be done by the the call instruction in the old ISA). -
Optimised:
sys.u32_subtractsys.vram.draw_circle
-
Fixed:
- Function calls under certain circumstances could corrupt the stack frame
- Functions that should return a value must contain return statements now
- Pointer assignments (
*pointer = value) with >1 word values now work - GUI layout (also affected assembler GUI)
- Added missing signature for
sys.mem_copy_fast - Operation assignments (
a += b,a *=2etc) now work in more cases
Assembler
- Re-written from scratch for new ISA
- Added directives which change the behaviour of the assembler:
$align n- align to n words by padding with 0 if needed$name <name>- set the current function name for debugging data$line <number>- set the current line number for debugging data
Manual
- Complete overhaul of the documentation
Demo programs
- Space Invaders
- Added alien explosion effect & flashing title screen
- 3D Renderer
- Animation is now longer to showcase the increase in addressable RAM
- Integer Tests
- Added more 32 bit division tests
- Clock frequency measurement
- Removed due to removed timer module
Misc
- New logo
- Fixed app icon on Ubuntu
Notes for x64 prebuilt binaries:
- You must mark the .AppImage as executable otherwise it will not run.
- The .deb file exposes the command
blizzard-4for starting the app.