Skip to content

Version 1.0.0

Choose a tag to compare

@danielfspencer danielfspencer released this 20 Nov 17:04
· 63 commits to master since this release

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 call instruction
      • 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) goto instructions

  • Added pass instruction (use when an indent is required, like in Python)

  • ^ is now XOR

  • ** is now exponent

  • A write instruction is added before every call to 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_subtract
    • sys.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 *=2 etc) 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-4 for starting the app.