2020-06-08 22:52:53 -04:00
# zybino: LR35902ish racket language
very early days for now.
2020-06-09 00:53:59 -04:00
in the racket repl (comments for reader comprehension, remove before running):
2020-06-08 22:52:53 -04:00
```
2020-06-09 01:22:55 -04:00
(run-vm #x150 #x150 #x19 ; start-address, end-memory-view-addr, number-bytes-view
2020-06-09 00:53:59 -04:00
'(#x3E #x69 ; LD A, $69
#x26 #x01 ; LD H, $01
2020-06-09 01:22:55 -04:00
#x2E #x67 ; LD L, $67
2020-06-09 00:53:59 -04:00
#x77 ; LD (HL), A
#x2E #x5B ; LD L, $5B
#x36 #xE6 ; LD (HL), $E6 ($E6 is the opcode for XOR $xx)
#x10 ; STOP (this instruction @ address $015B)
#xF0 ; (non-instruction, will be arg for previous byte)
2020-06-09 01:22:55 -04:00
#x2E #x68 ; LD L, $68
2020-06-09 00:53:59 -04:00
#x77 ; LD (HL), A
2020-06-09 01:22:55 -04:00
#xC3 #x64 #x01 ; JP $0164
#x10 ; STOP
#x7D ; LD A, L (address $0164)
2020-06-09 00:53:59 -04:00
#x10 ; STOP
))
2020-06-08 22:52:53 -04:00
```
will evaluate to:
```
2020-06-09 01:22:55 -04:00
PC: $0166, SP: $0000, Flags: %00000000
2020-06-08 22:52:53 -04:00
BC: $0000, DE: $0000
2020-06-09 01:22:55 -04:00
HL: $0168, AF: $6800
2020-06-09 00:53:59 -04:00
(HL): $60
2020-06-09 01:22:55 -04:00
$0150 > $3e $69 $26 $01 $2e $67 $77 $2e $5b $36 $e6 $e6 $f0 $2e $68 $77 $c3 $64 $01 $10 $7d $10 $00 $69 $60 < $0168
2020-06-08 22:52:53 -04:00
```
2020-06-09 01:22:55 -04:00
here we can see the program loaded starting from address `$0150` , including the `XOR` instruction loaded to `$015B` during execution, and the `$69` we loaded to memory, along with the result of `XOR $F0` we loaded to memory, at `$0167` and `$0168` respectively. we can also see that the `A` register is `$68` , the same as the `L` register, as the `JP` instruction executed properly and we skipped the `STOP` at address `$0163` .
2020-06-08 22:52:53 -04:00
2020-06-09 00:53:59 -04:00
## notes
2020-06-08 22:52:53 -04:00
2020-06-09 00:53:59 -04:00
currently supported instructions are:
2020-06-09 01:22:55 -04:00
* `JP #addr`
2020-06-09 00:53:59 -04:00
* `LD [reg], #imm`
* `LD [reg], [reg]`
* `XOR #imm`
* `AND #imm`
* `OR #imm`
* `STOP`
* `NOP`
2020-06-09 00:56:33 -04:00
2020-06-09 00:53:59 -04:00
all other instructions treated as `NOP`