| ... | ... |
@@ -30,7 +30,7 @@ Build the assembler and emulator by running the `build.sh` script. The assembler |
| 30 | 30 |
If you wish to build the emulator without graphics mode: |
| 31 | 31 |
|
| 32 | 32 |
```sh |
| 33 |
-cc src/devices/file.c src/uxn.c -DNDEBUG -Os -g0 -s src/uxncli.c -o bin/uxncli |
|
| 33 |
+cc src/devices/datetime.c src/devices/system.c src/devices/file.c src/uxn.c -DNDEBUG -Os -g0 -s src/uxncli.c -o bin/uxncli |
|
| 34 | 34 |
``` |
| 35 | 35 |
|
| 36 | 36 |
### Plan 9 |
| ... | ... |
@@ -94,7 +94,7 @@ uxnemu orca.rom | shim |
| 94 | 94 |
- `F1` toggle zoom |
| 95 | 95 |
- `F2` toggle debug |
| 96 | 96 |
- `F3` capture screen |
| 97 |
-- `F4` load boot.rom |
|
| 97 |
+- `F4` load launcher.rom |
|
| 98 | 98 |
|
| 99 | 99 |
### Buttons |
| 100 | 100 |
|
| ... | ... |
@@ -37,7 +37,7 @@ rm -f ./bin/uxnasm |
| 37 | 37 |
rm -f ./bin/uxnemu |
| 38 | 38 |
rm -f ./bin/uxncli |
| 39 | 39 |
rm -f ./bin/supervisor.rom |
| 40 |
-rm -f ./bin/boot.rom |
|
| 40 |
+rm -f ./bin/launcher.rom |
|
| 41 | 41 |
rm -f ./bin/asma.rom |
| 42 | 42 |
|
| 43 | 43 |
# When clang-format is present |
| ... | ... |
@@ -110,8 +110,8 @@ fi |
| 110 | 110 |
|
| 111 | 111 |
echo "Assembling(supervisor).." |
| 112 | 112 |
./bin/uxnasm projects/software/supervisor.tal bin/supervisor.rom |
| 113 |
-echo "Assembling(boot).." |
|
| 114 |
-./bin/uxnasm projects/software/boot.tal bin/boot.rom |
|
| 113 |
+echo "Assembling(launcher).." |
|
| 114 |
+./bin/uxnasm projects/software/launcher.tal bin/launcher.rom |
|
| 115 | 115 |
echo "Assembling(asma).." |
| 116 | 116 |
./bin/uxnasm projects/software/asma.tal bin/asma.rom |
| 117 | 117 |
|
| ... | ... |
@@ -22,8 +22,11 @@ |
| 22 | 22 |
%2// { #01 SFT2 }
|
| 23 | 23 |
%8** { #30 SFT2 }
|
| 24 | 24 |
|
| 25 |
-%EADDR { #fd04 }
|
|
| 26 |
-%ECODE { #fd06 }
|
|
| 25 |
+%SYS_EADDR { #fd04 }
|
|
| 26 |
+%SYS_ECODE { #fd06 }
|
|
| 27 |
+%SYS_DEBUG { #fd0e }
|
|
| 28 |
+%WST { #fe00 }
|
|
| 29 |
+%RST { #ff00 }
|
|
| 27 | 30 |
|
| 28 | 31 |
( devices ) |
| 29 | 32 |
|
| ... | ... |
@@ -56,6 +59,11 @@ |
| 56 | 59 |
;on-frame .Screen/vector DEO2 |
| 57 | 60 |
;on-button .Controller/vector DEO2 |
| 58 | 61 |
|
| 62 |
+ ( print initial memory ) |
|
| 63 |
+ SYS_DEBUG LDA #00 = ,&no-debug JCN |
|
| 64 |
+ ;print-stacks JSR2 |
|
| 65 |
+ &no-debug |
|
| 66 |
+ |
|
| 59 | 67 |
BRK |
| 60 | 68 |
|
| 61 | 69 |
@on-frame ( -> ) |
| ... | ... |
@@ -116,9 +124,9 @@ BRK |
| 116 | 124 |
|
| 117 | 125 |
;at-txt #4f ;draw-str JSR2 |
| 118 | 126 |
|
| 119 |
- EADDR LDA2 #47 ;draw-short JSR2 |
|
| 127 |
+ SYS_EADDR LDA2 #47 ;draw-short JSR2 |
|
| 120 | 128 |
|
| 121 |
- #0000 EADDR STA2 |
|
| 129 |
+ #0000 SYS_EADDR STA2 |
|
| 122 | 130 |
|
| 123 | 131 |
BRK |
| 124 | 132 |
|
| ... | ... |
@@ -136,9 +144,8 @@ RTN |
| 136 | 144 |
|
| 137 | 145 |
( load rom ) |
| 138 | 146 |
|
| 139 |
- |
|
| 140 | 147 |
RTN |
| 141 |
- &boot-path "boot.rom $1 |
|
| 148 |
+ &boot-path "launcher.rom $1 |
|
| 142 | 149 |
|
| 143 | 150 |
@draw-stacks ( -- ) |
| 144 | 151 |
|
| ... | ... |
@@ -148,12 +155,12 @@ RTN |
| 148 | 155 |
( working stack ) |
| 149 | 156 |
#0010 .Screen/y DEO2 |
| 150 | 157 |
DUP2 #0018 ** #0010 ++ .Screen/x DEO2 |
| 151 |
- DUP #fe00 LDA ( ptr ) EQU #4b + STH |
|
| 158 |
+ DUP #fe00 LDA ( ptr ) EQU #41 + STH |
|
| 152 | 159 |
DUP2 #fe01 ++ LDA STHr ;draw-byte JSR2 |
| 153 | 160 |
( return stack ) |
| 154 | 161 |
#0028 .Screen/y DEO2 |
| 155 | 162 |
DUP2 #0018 ** #0010 ++ .Screen/x DEO2 |
| 156 |
- DUP #ff00 LDA ( ptr ) EQU #4b + STH |
|
| 163 |
+ DUP #ff00 LDA ( ptr ) EQU #41 + STH |
|
| 157 | 164 |
DUP2 #ff01 ++ LDA STHr ;draw-byte JSR2 |
| 158 | 165 |
INC2 GTH2k ,&wst JCN |
| 159 | 166 |
POP2 POP2 |
| ... | ... |
@@ -235,6 +242,39 @@ JMP2r |
| 235 | 242 |
|
| 236 | 243 |
JMP2r |
| 237 | 244 |
|
| 245 |
+@print-stacks ( -- ) |
|
| 246 |
+ |
|
| 247 |
+ #0a EMIT |
|
| 248 |
+ WST ;&wst-txt ,print-stack JSR |
|
| 249 |
+ RST ;&rst-txt ,print-stack JSR |
|
| 250 |
+ |
|
| 251 |
+RTN |
|
| 252 |
+ &wst-txt "Working-stack $1 |
|
| 253 |
+ &rst-txt "Return-stack $1 |
|
| 254 |
+ |
|
| 255 |
+@print-stack ( addr* name* -- ) |
|
| 256 |
+ |
|
| 257 |
|
|
| 258 |
+ ( keep ptr ) LDAk STH |
|
| 259 |
+ ( keep counter ) LITr 00 |
|
| 260 |
+ ( skip ptr ) INC2 |
|
| 261 |
+ DUP2 #0020 ++ SWP2 |
|
| 262 |
+ &loop |
|
| 263 |
+ ( print cell ) |
|
| 264 |
+ EQUkr STHr #3b * #20 + EMIT |
|
| 265 |
+ LDAk ;print-hex/byte JSR2 |
|
| 266 |
+ EQUkr STHr #3d * #20 + EMIT |
|
| 267 |
+ ( break into columns ) |
|
| 268 |
+ SUB2k #0001 -- #0007 AND2 #0000 !! ,&no-lb JCN |
|
| 269 |
+ #0a EMIT |
|
| 270 |
+ &no-lb |
|
| 271 |
+ INCr |
|
| 272 |
+ INC2 GTH2k ,&loop JCN |
|
| 273 |
+ POP2 POP2 |
|
| 274 |
+ POP2r |
|
| 275 |
+ |
|
| 276 |
+RTN |
|
| 277 |
+ |
|
| 238 | 278 |
@print-hex ( value* -- ) |
| 239 | 279 |
|
| 240 | 280 |
SWP ,&byte JSR |
| ... | ... |
@@ -83,7 +83,6 @@ screen_resize(UxnScreen *p, Uint16 width, Uint16 height) |
| 83 | 83 |
if(bg && fg && pixels) {
|
| 84 | 84 |
p->width = width; |
| 85 | 85 |
p->height = height; |
| 86 |
- p->pixels = pixels; |
|
| 87 | 86 |
screen_clear(p, &p->bg); |
| 88 | 87 |
screen_clear(p, &p->fg); |
| 89 | 88 |
} |
| ... | ... |
@@ -119,8 +118,6 @@ screen_dei(Device *d, Uint8 port) |
| 119 | 118 |
case 0x3: return uxn_screen.width; |
| 120 | 119 |
case 0x4: return uxn_screen.height >> 8; |
| 121 | 120 |
case 0x5: return uxn_screen.height; |
| 122 |
- case 0x6: |
|
| 123 |
- |
|
| 124 | 121 |
default: return d->dat[port]; |
| 125 | 122 |
} |
| 126 | 123 |
} |
| ... | ... |
@@ -255,15 +255,10 @@ start(Uxn *u, char *rom) |
| 255 | 255 |
memory = (Uint8 *)calloc(0x10000, sizeof(Uint8)); |
| 256 | 256 |
supervisor_memory = (Uint8 *)calloc(0x10000, sizeof(Uint8)); |
| 257 | 257 |
|
| 258 |
- if(!uxn_boot(&supervisor, supervisor_memory, supervisor_memory + VISOR_DEV, (Stack *)(supervisor_memory + VISOR_WST), (Stack *)(supervisor_memory + VISOR_RST))) |
|
| 259 |
- return error("Boot", "Failed to start uxn.");
|
|
| 260 | 258 |
if(!uxn_boot(u, memory, supervisor_memory + PAGE_DEV, (Stack *)(supervisor_memory + PAGE_WST), (Stack *)(supervisor_memory + PAGE_RST))) |
| 261 | 259 |
return error("Boot", "Failed to start uxn.");
|
| 262 |
- if(!load(&supervisor, "supervisor.rom")) |
|
| 263 |
- error("Supervisor", "No debugger found.");
|
|
| 264 | 260 |
if(!load(u, rom)) |
| 265 | 261 |
return error("Boot", "Failed to load rom.");
|
| 266 |
- |
|
| 267 | 262 |
/* system */ devsystem = uxn_port(u, 0x0, system_dei, system_deo); |
| 268 | 263 |
/* console */ devconsole = uxn_port(u, 0x1, nil_dei, console_deo); |
| 269 | 264 |
/* screen */ devscreen = uxn_port(u, 0x2, screen_dei, screen_deo); |
| ... | ... |
@@ -282,16 +277,20 @@ start(Uxn *u, char *rom) |
| 282 | 277 |
/* unused */ uxn_port(u, 0xf, nil_dei, nil_deo); |
| 283 | 278 |
|
| 284 | 279 |
/* Supervisor */ |
| 285 |
- uxn_port(&supervisor, 0x0, system_dei, system_deo); |
|
| 286 |
- uxn_port(&supervisor, 0x1, nil_dei, console_deo); |
|
| 287 |
- uxn_port(&supervisor, 0x2, screen_dei, screen_deo); |
|
| 288 |
- uxn_port(&supervisor, 0x8, nil_dei, nil_deo); |
|
| 289 |
- |
|
| 290 |
- uxn_eval(&supervisor, PAGE_PROGRAM); |
|
| 280 |
+ if(!uxn_boot(&supervisor, supervisor_memory, supervisor_memory + VISOR_DEV, (Stack *)(supervisor_memory + VISOR_WST), (Stack *)(supervisor_memory + VISOR_RST))) |
|
| 281 |
+ return error("Boot", "Failed to start uxn.");
|
|
| 282 |
+ if(!load(&supervisor, "supervisor.rom")) |
|
| 283 |
+ error("Supervisor", "No debugger found.");
|
|
| 284 |
+ /* system */ uxn_port(&supervisor, 0x0, system_dei, system_deo); |
|
| 285 |
+ /* console */ uxn_port(&supervisor, 0x1, nil_dei, console_deo); |
|
| 286 |
+ /* screen */ uxn_port(&supervisor, 0x2, screen_dei, screen_deo); |
|
| 287 |
+ /* control */ uxn_port(&supervisor, 0x8, nil_dei, nil_deo); |
|
| 291 | 288 |
|
| 292 | 289 |
if(!uxn_eval(u, PAGE_PROGRAM)) |
| 293 | 290 |
return error("Boot", "Failed to start rom.");
|
| 294 | 291 |
|
| 292 |
+ uxn_eval(&supervisor, PAGE_PROGRAM); |
|
| 293 |
+ |
|
| 295 | 294 |
return 1; |
| 296 | 295 |
} |
| 297 | 296 |
|
| ... | ... |
@@ -330,7 +329,7 @@ static void |
| 330 | 329 |
restart(Uxn *u) |
| 331 | 330 |
{
|
| 332 | 331 |
set_size(WIDTH, HEIGHT, 1); |
| 333 |
- start(u, "boot.rom"); |
|
| 332 |
+ start(u, "launcher.rom"); |
|
| 334 | 333 |
} |
| 335 | 334 |
|
| 336 | 335 |
static Uint8 |
| ... | ... |
@@ -527,7 +526,7 @@ main(int argc, char **argv) |
| 527 | 526 |
console_input(&u, '\n'); |
| 528 | 527 |
} |
| 529 | 528 |
} |
| 530 |
- if(!loaded && !start(&u, "boot.rom")) |
|
| 529 |
+ if(!loaded && !start(&u, "launcher.rom")) |
|
| 531 | 530 |
return error("usage", "uxnemu [-s scale] file.rom");
|
| 532 | 531 |
run(&u); |
| 533 | 532 |
SDL_Quit(); |