diff --git a/readme.md b/readme.md index 2dcd34c..ab20fae 100644 --- a/readme.md +++ b/readme.md @@ -8,40 +8,40 @@ - [ ] Consider adding a way to visualize screen memory - [ ] Do a proper binary version... -## ISA +## Instruction set + + 0 END + 1 STO lit# ; store ... mem[lit#] <- A + 2 STO addr ; store ... mem[mem[addr]] <- A + 3 LDA lit# ; load ... A <- lit# + 4 LDA addr ; load ... A <- mem[addr] + 5 ADD lit# ; add ... A <- A + lit# ... and un/set carry flag + 6 ADD addr ; add ... A <- A + mem[addr] ... and un/set carry flag + 7 SUB lit# ; sub ... A <- A - lit# ... and un/set carry flag + 8 SUB addr ; sub ... A <- A - mem[addr] ... and un/set carry flag + 9 HOP lit# ; hop ... skip next instruction if A == lit# ... when true: IP <- PC + 2 + A HOP addr ; hop ... skip next instruction if A == addr ... when true: IP <- PC + 2 + B JMP lit# ; jump ... IP <- lit# + C JMP addr ; jump ... IP <- addr + D CCF ———— ; clear Carry Flag ... CF = 0 + E CHP ---- ; carry hop ... skip next instruction if Carry Flag is set ... when true: IP <- PC + 2 + F -0 END -1 STO lit# ; store ... mem[lit#] <- A -2 STO addr ; store ... mem[mem[addr]] <- A -3 LDA lit# ; load ... A <- lit# -4 LDA addr ; load ... A <- mem[addr] -5 ADD lit# ; add ... A <- A + lit# ... and un/set carry flag -6 ADD addr ; add ... A <- A + mem[addr] ... and un/set carry flag -7 SUB lit# ; sub ... A <- A - lit# ... and un/set carry flag -8 SUB addr ; sub ... A <- A - mem[addr] ... and un/set carry flag -9 HOP lit# ; skip next instruction if A == lit# ... when true: IP <- PC + 2 -A HOP addr ; skip next instruction if A == addr ... when true: IP <- PC + 2 -B JMP lit# ; ... IP <- lit# -C JMP addr ; ... IP <- addr -~~D CAT ---- ; Carry Flag Toggle ... CF <- !CF~~ -D CCF ———— ; Clear Carry Flag ... CF = 0 -E CHP ---- ; skip next instruction if Carry Flag is set ... when true: IP <- PC + 2 -F ### Nice features that didn't fit -- hop IF< and hop IF> -- MUL and DIV +- hop `IF<` and hop `IF>` +- `MUL` and `DIV` - rotates and shifts ## Registers -- A -- accumulator -- IP -- instruction pointer (aka program counter) +- `A` - accumulator +- `IP` - instruction pointer (aka program counter) ## Flags -- CF -- carry flag +- `CF` - carry flag ## Memory-mapped peripherals @@ -55,7 +55,7 @@ F ## Tentative memory map -00-0F - display -10-1F - keypad? (details TBD) -20 - initial value for IP ? -21-FF - free \ No newline at end of file + 00-0F - display + 10-1F - keypad? (details TBD) + 20 - initial value for IP ? + 21-FF - free \ No newline at end of file