Merge branch 'master' of Auios/8608 into master
This commit is contained in:
commit
eaae7bb2d2
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
.vscode
|
||||
programs
|
30
examples/clear_screen.asm
Normal file
30
examples/clear_screen.asm
Normal file
@ -0,0 +1,30 @@
|
||||
.include _hwdefs.asm
|
||||
.include _clrdefs.asm
|
||||
|
||||
;; Variables
|
||||
.org SYSRAM
|
||||
stack: byte[128]
|
||||
|
||||
;; Main
|
||||
.org SYSROM
|
||||
lds stack
|
||||
jss cls
|
||||
|
||||
hlt
|
||||
|
||||
;; Clear the screen
|
||||
FUNC cls:
|
||||
ldp screen.char
|
||||
ldc $00 ;; Blank
|
||||
ldq screen.color
|
||||
ldb CLR_BLACK ;; Black
|
||||
.cls_loop: {
|
||||
stc *p++
|
||||
stb *q++
|
||||
lda pl
|
||||
cmp (lo(COLOR))
|
||||
jnz .cls_loop
|
||||
lda ph
|
||||
cmp (hi(COLOR))
|
||||
jnz }
|
||||
rts
|
8
examples/fibonacci.asm
Normal file
8
examples/fibonacci.asm
Normal file
@ -0,0 +1,8 @@
|
||||
lda 1
|
||||
ldb 0
|
||||
|
||||
fib_loop:
|
||||
ldc b
|
||||
ldb a
|
||||
add c
|
||||
jlt fib_loop ; Stop when carry flag is set
|
50
examples/functions.asm
Normal file
50
examples/functions.asm
Normal file
@ -0,0 +1,50 @@
|
||||
.include _hwdefs.asm
|
||||
.include _clrdefs.asm
|
||||
|
||||
;; Defines
|
||||
.define VARS $0100
|
||||
|
||||
;; Variables
|
||||
.org SYSRAM
|
||||
stack: byte[128]
|
||||
|
||||
.org VARS
|
||||
hello_str: "Hello world!\0"
|
||||
|
||||
;; Main
|
||||
.org SYSROM
|
||||
lds stack
|
||||
|
||||
jss cls
|
||||
|
||||
ldp screen.char
|
||||
ldq hello_str
|
||||
jss print
|
||||
|
||||
hlt
|
||||
|
||||
;; Clear the screen
|
||||
FUNC cls:
|
||||
ldp screen.char
|
||||
ldc $00 ;; Blank
|
||||
ldq screen.color
|
||||
ldb CLR_BLACK ;; Black
|
||||
.cls_loop: {
|
||||
stc *p++
|
||||
stb *q++
|
||||
lda pl
|
||||
cmp (lo(COLOR))
|
||||
jnz .cls_loop
|
||||
lda ph
|
||||
cmp (hi(COLOR))
|
||||
jnz }
|
||||
rts
|
||||
|
||||
;; Print string (Q) to the current screen cursor (P)
|
||||
FUNC print:
|
||||
lda *q++
|
||||
jpz .print_end
|
||||
sta *p++
|
||||
jmp print
|
||||
.print_end:
|
||||
rts
|
16
examples/helloworld.asm
Normal file
16
examples/helloworld.asm
Normal file
@ -0,0 +1,16 @@
|
||||
.org $0100 ; Static data
|
||||
hello_str:
|
||||
"Hello world\0"
|
||||
|
||||
.org $0000 ; Program must start at $0000
|
||||
ldp $0800 ; Char display
|
||||
ldq hello_str
|
||||
|
||||
print:
|
||||
lda *q++
|
||||
jpz print_end
|
||||
sta *p++
|
||||
jmp print
|
||||
|
||||
print_end:
|
||||
hlt
|
8
examples/increment_reg.asm
Normal file
8
examples/increment_reg.asm
Normal file
@ -0,0 +1,8 @@
|
||||
; This program adds 1 to register A until it equals 64, then halts.
|
||||
|
||||
loop:
|
||||
inc a
|
||||
cmp 64
|
||||
jnz loop
|
||||
|
||||
hlt
|
45
memoryMap.md
Normal file
45
memoryMap.md
Normal file
@ -0,0 +1,45 @@
|
||||
## Boot ROM
|
||||
Execution starts here, at address `$0000`.<br>
|
||||
The main program is located here, or the OS bootloader if an OS is present.
|
||||
|
||||
## GPIO
|
||||
Contains hardware multiplication (`$0400 * $0401 -> $0400`) and division (`$0402 / $0403 -> $0402 r $0403`), popcount (`$0404 -> $0404`), and a timer (`$0405`).<br>
|
||||
Value written to timer register = number of game ticks (32 ms) between interrupt triggers.<br>
|
||||
Write 0 to disable.
|
||||
|
||||
## Keyboard
|
||||
Read address `$0500` to get the next key event<br>
|
||||
7-bit Windows VKey code, MSB 1 = press, 0 = release<br>
|
||||
Returns 0 if buffer is empty.
|
||||
Write 1 to `$0500` to enable keyboard interrupts, 0 to disable.
|
||||
|
||||
## Serial Peripheral Interface
|
||||
Not yet implemented.
|
||||
|
||||
## Robot Controller
|
||||
Write to `$0701` to control the robot. Each bit is an action - MSB to LSB: Plant brick, destroy brick, move forward, backward, left, right, up, down.<br>
|
||||
Write a 6-bit color ID to `$0700` to set the color of the bricks the robot plants.<br>
|
||||
Read `$0700` to get the color of the brick the robot is on. MSB = brick exists. Returns 0 if no brick.
|
||||
|
||||
|
||||
## Text Display
|
||||
Write ASCII values to `$0800` to `$0BFF` to display characters at certain positions on screen.<br>
|
||||
`$0800` is top left, `$0BFF` is bottom right, rows are 64 bytes.
|
||||
|
||||
## Text Display Color
|
||||
Write 6-bit color IDs to `$0C00` to `$0FFF` to set the color of characters on screen.<br>
|
||||
MSB = whether to invert character mask (i.e. for highlighting).
|
||||
|
||||
## System RAM
|
||||
The OS may use this memory for the stack, system variables, etc.<br>
|
||||
If no OS is present, this memory can be used for any purpose, etc.<br>
|
||||
Located at `$1000` to `$1FFF`.
|
||||
|
||||
## User ROM
|
||||
User program and data can go here.<br>
|
||||
If no OS is present, the boot ROM will need to jump into this code.<br>
|
||||
Located at `$2000` to `$2FFF`.
|
||||
|
||||
## User RAM
|
||||
Your code can use this memory for variables, arrays, a heap, etc.<br>
|
||||
Located at `$3000` to `$3FFF`.
|
12
readme.md
12
readme.md
@ -4,20 +4,20 @@ For a list of instructions, see [instructionList.txt](instructionList.txt).
|
||||
|
||||
## How to use the assembler:
|
||||
1. Install `bllua3` from [https://notabug.org/redo/bllua3](https://notabug.org/redo/bllua3)
|
||||
2. Download this repo somewhere into the Blockland folder.
|
||||
2. Download this repo into `Add-Ons/8608` or anywhere within one of Blockland's main directories.
|
||||
3. In BL console, execute:
|
||||
```
|
||||
luaexec("your_path/assembler-8608.lua");
|
||||
luaexec("Add-Ons/8608/assembler-8608.lua");
|
||||
```
|
||||
4. To assemble a program, place a 1x1f ghost brick on the top-left corner of the ROM, face forward, and in BL console do:
|
||||
```
|
||||
AssembleBuildFile("other_path/filename.asm", "RomX RomY RomZ");
|
||||
AssembleBuildFile("Add-Ons/8608/examples/program.asm", "RomX RomY RomZ");
|
||||
```
|
||||
where `RomX` is the width of the ROM, `RomY` is the depth front to back, and `RomZ` is the height in bits, i.e., "16 16 8".
|
||||
|
||||
|
||||
You can also run the assembler from the command line to get a memory dump and disassembly in stdout, if you have lua installed:
|
||||
```
|
||||
luajit "your_path/assembler-8608.lua" "other_path/filename.asm"
|
||||
luajit "Add-Ons/8608/assembler-8608.lua" "Add-Ons/8608/examples/program.asm"
|
||||
```
|
||||
|
||||
## How to use the emulator:
|
||||
@ -27,3 +27,5 @@ For a list of instructions, see [instructionList.txt](instructionList.txt).
|
||||
love . C:/path/filename.asm
|
||||
```
|
||||
|
||||
## Memory Map
|
||||
[memory map](memoryMap.md)
|
||||
|
Loading…
x
Reference in New Issue
Block a user