| ... | ... |
@@ -22,43 +22,9 @@ evaluxn(u, u->vreset); /* Once on start */ |
| 22 | 22 |
evaluxn(u, u->vframe); /* Each frame |
| 23 | 23 |
``` |
| 24 | 24 |
|
| 25 |
-## Assembly Syntax |
|
| 25 |
+## Uxambly |
|
| 26 | 26 |
|
| 27 |
-### Define |
|
| 28 |
- |
|
| 29 |
-- `@label`, assign the current address to a label. |
|
| 30 |
-- `$label`, assign the current address to a local label. |
|
| 31 |
-- `;variable 2`, assign an address to a label automatically. |
|
| 32 |
-- `:const 1a2b`, assign an address to a label manually. |
|
| 33 |
-- `¯o { x 2 y 2 }`, define a macro named `macro`.
|
|
| 34 |
- |
|
| 35 |
-### Program |
|
| 36 |
- |
|
| 37 |
-- `ADD`, push an opcode. |
|
| 38 |
-- `.address`, push label address to memory. |
|
| 39 |
-- `,literal`, push label address to stack, prefixed with `LIT LEN`. |
|
| 40 |
-- `#1a`, push a literal byte/short. |
|
| 41 |
-- `+1a`, push a literal signed byte/short. |
|
| 42 |
-- `-1a`, push a literal signed byte/short(negative). |
|
| 43 |
-- `|0010`, move to position in the program. |
|
| 44 |
- |
|
| 45 |
-### Helpers |
|
| 46 |
- |
|
| 47 |
-- `=label`, helper to STR, equivalent to `,label STR`, or `label STR2`. |
|
| 48 |
-- `~label`, helper to LDR, equivalent to `,label LDR2`, or `,label LDR2`. |
|
| 49 |
- |
|
| 50 |
-### Blocks |
|
| 51 |
- |
|
| 52 |
-- `( comment )`, toggle parsing on/off. |
|
| 53 |
-- `[ 0123 abcd ]`, write shorts to memory. |
|
| 54 |
-- `[ Hello World ]`, write text to memory. |
|
| 55 |
- |
|
| 56 |
-### Operator modes |
|
| 57 |
- |
|
| 58 |
-- `#1234 #0001 ADD2`, 16-bits operators have the short flag `2`. |
|
| 59 |
-- `#12 #11 GTH JMP?`, conditional operators have the cond flag `?`. |
|
| 60 |
-- `+21 -03 MULS`, signed operators have the cond flag `S`. |
|
| 61 |
-- `ADDS2?`, modes can be combined. |
|
| 27 |
+Read more in the [Uxambly Guide](https://wiki.xxiivv.com/site/uxambly.html). |
|
| 62 | 28 |
|
| 63 | 29 |
``` |
| 64 | 30 |
( hello world ) |
| ... | ... |
@@ -107,7 +73,6 @@ RTS |
| 107 | 73 |
|
| 108 | 74 |
- Includes |
| 109 | 75 |
- Defines |
| 110 |
-- Local loops |
|
| 111 | 76 |
- Jump helpers |
| 112 | 77 |
|
| 113 | 78 |
## Notes |
| ... | ... |
@@ -211,9 +211,9 @@ RTS |
| 211 | 211 |
|
| 212 | 212 |
( get file length ) |
| 213 | 213 |
,document.body =document.eof |
| 214 |
- @load-file-loop NOP |
|
| 214 |
+ $loop NOP |
|
| 215 | 215 |
( incr ) ~document.eof #0001 ADD2 =document.eof |
| 216 |
- ~document.eof LDR #00 NEQ ^load-file-loop MUL JMPS |
|
| 216 |
+ ~document.eof LDR #00 NEQ ^$loop MUL JMPS |
|
| 217 | 217 |
|
| 218 | 218 |
RTS |
| 219 | 219 |
|
| ... | ... |
@@ -221,10 +221,10 @@ RTS |
| 221 | 221 |
|
| 222 | 222 |
=i |
| 223 | 223 |
~selection.from #0001 SUB2 =j ( start -> end ) |
| 224 |
- @shift-left-loop NOP |
|
| 224 |
+ $loop NOP |
|
| 225 | 225 |
( move ) ~j ~i ADD2 LDR ~j STR |
| 226 | 226 |
( incr ) ~j #0001 ADD2 =j |
| 227 |
- ~j ~document.eof LTH2 ^shift-left-loop MUL JMPS |
|
| 227 |
+ ~j ~document.eof LTH2 ^$loop MUL JMPS |
|
| 228 | 228 |
~document.eof ~i SUB2 =document.eof |
| 229 | 229 |
|
| 230 | 230 |
RTS |
| ... | ... |
@@ -250,11 +250,11 @@ RTS |
| 250 | 250 |
|
| 251 | 251 |
@goto-linestart |
| 252 | 252 |
|
| 253 |
- @goto-linestart-loop NOP |
|
| 253 |
+ $loop NOP |
|
| 254 | 254 |
~selection.from #0001 SUB2 LDR #0a EQU RTS? |
| 255 | 255 |
~selection.from #0001 SUB2 LDR #0d EQU RTS? |
| 256 | 256 |
( decr ) ~selection.from DUP2 =selection.to #0001 SUB2 =selection.from |
| 257 |
- ~selection.from LDR #00 NEQ ^goto-linestart-loop MUL JMPS |
|
| 257 |
+ ~selection.from LDR #00 NEQ ^$loop MUL JMPS |
|
| 258 | 258 |
( clamp at document body ) |
| 259 | 259 |
~selection.from ,document.body GTH2 RTS? |
| 260 | 260 |
,document.body DUP2 =selection.from #0001 ADD2 =selection.to |
| ... | ... |
@@ -263,11 +263,11 @@ RTS |
| 263 | 263 |
|
| 264 | 264 |
@goto-lineend |
| 265 | 265 |
|
| 266 |
- @goto-lineend-loop NOP |
|
| 266 |
+ $loop NOP |
|
| 267 | 267 |
~selection.from LDR #0a EQU RTS? |
| 268 | 268 |
~selection.from LDR #0d EQU RTS? |
| 269 | 269 |
( incr ) ~selection.from #0001 ADD2 DUP2 #0001 ADD2 =selection.to =selection.from |
| 270 |
- ~selection.from LDR #00 NEQ ^goto-lineend-loop MUL JMPS |
|
| 270 |
+ ~selection.from LDR #00 NEQ ^$loop MUL JMPS |
|
| 271 | 271 |
( clamp at document body ) |
| 272 | 272 |
~selection.from ,document.eof LTH2 RTS? |
| 273 | 273 |
,document.eof #0001 SUB2 DUP2 =selection.from #0001 ADD2 =selection.to |
| ... | ... |
@@ -277,13 +277,13 @@ RTS |
| 277 | 277 |
@find-wordstart |
| 278 | 278 |
|
| 279 | 279 |
~selection.to =j |
| 280 |
- @find-wordstart-loop NOP |
|
| 280 |
+ $loop NOP |
|
| 281 | 281 |
( decr ) ~j #0001 SUB2 =j |
| 282 |
- ,find-wordstart-end ~j LDR #20 EQU JMP2? POP2 |
|
| 283 |
- ,find-wordstart-end ~j LDR #0a EQU JMP2? POP2 |
|
| 284 |
- ,find-wordstart-end ~j LDR #0d EQU JMP2? POP2 |
|
| 285 |
- ~j ,document.body GTH2 ^find-wordstart-loop MUL JMPS |
|
| 286 |
- @find-wordstart-end |
|
| 282 |
+ ,$end ~j LDR #20 EQU JMP2? POP2 |
|
| 283 |
+ ,$end ~j LDR #0a EQU JMP2? POP2 |
|
| 284 |
+ ,$end ~j LDR #0d EQU JMP2? POP2 |
|
| 285 |
+ ~j ,document.body GTH2 ^$loop MUL JMPS |
|
| 286 |
+ $end |
|
| 287 | 287 |
( return ) ~j #0001 SUB2 |
| 288 | 288 |
|
| 289 | 289 |
RTS |
| ... | ... |
@@ -291,13 +291,13 @@ RTS |
| 291 | 291 |
@find-wordend |
| 292 | 292 |
|
| 293 | 293 |
~selection.to =j |
| 294 |
- @find-wordend-loop NOP |
|
| 294 |
+ $loop NOP |
|
| 295 | 295 |
( incr ) ~j #0001 ADD2 =j |
| 296 |
- ,find-wordend-end ~j LDR #20 EQU JMP2? POP2 |
|
| 297 |
- ,find-wordend-end ~j LDR #0a EQU JMP2? POP2 |
|
| 298 |
- ,find-wordend-end ~j LDR #0d EQU JMP2? POP2 |
|
| 299 |
- ~j ,document.body GTH2 ^find-wordend-loop MUL JMPS |
|
| 300 |
- @find-wordend-end |
|
| 296 |
+ ,$end ~j LDR #20 EQU JMP2? POP2 |
|
| 297 |
+ ,$end ~j LDR #0a EQU JMP2? POP2 |
|
| 298 |
+ ,$end ~j LDR #0d EQU JMP2? POP2 |
|
| 299 |
+ ~j ,document.body GTH2 ^$loop MUL JMPS |
|
| 300 |
+ $end |
|
| 301 | 301 |
( return ) ~j #0001 ADD2 |
| 302 | 302 |
|
| 303 | 303 |
RTS |
| ... | ... |
@@ -305,12 +305,12 @@ RTS |
| 305 | 305 |
@find-lineoffset ( return character offset from linestart ) |
| 306 | 306 |
|
| 307 | 307 |
#0000 =j |
| 308 |
- @find-lineoffset-loop NOP |
|
| 308 |
+ $loop NOP |
|
| 309 | 309 |
( incr ) ~j #0001 ADD2 =j |
| 310 |
- ,find-lineoffset-end ~selection.from ~j SUB2 LDR #0a EQU JMP2? POP2 |
|
| 311 |
- ,find-lineoffset-end ~selection.from ~j SUB2 LDR #0d EQU JMP2? POP2 |
|
| 312 |
- ~selection.from ~j SUB2 ,document.body GTH2 ^find-lineoffset-loop MUL JMPS |
|
| 313 |
- @find-lineoffset-end |
|
| 310 |
+ ,$end ~selection.from ~j SUB2 LDR #0a EQU JMP2? POP2 |
|
| 311 |
+ ,$end ~selection.from ~j SUB2 LDR #0d EQU JMP2? POP2 |
|
| 312 |
+ ~selection.from ~j SUB2 ,document.body GTH2 ^$loop MUL JMPS |
|
| 313 |
+ $end |
|
| 314 | 314 |
( return ) ~j |
| 315 | 315 |
|
| 316 | 316 |
RTS |
| ... | ... |
@@ -318,14 +318,14 @@ RTS |
| 318 | 318 |
@find-line ( position -> addr ) |
| 319 | 319 |
|
| 320 | 320 |
,document.body =j #0000 =pt.y |
| 321 |
- @find-line-loop NOP |
|
| 322 |
- ,find-line-end ~pt.y ~position.y #0001 SUB2 GTH2 JMP2? POP2 |
|
| 323 |
- ,find-line-no-space ~j LDR #0a NEQ ~j LDR #0d NEQ #0101 EQU2 JMP2? POP2 |
|
| 321 |
+ $loop NOP |
|
| 322 |
+ ,$end ~pt.y ~position.y #0001 SUB2 GTH2 JMP2? POP2 |
|
| 323 |
+ ,$no-space ~j LDR #0a NEQ ~j LDR #0d NEQ #0101 EQU2 JMP2? POP2 |
|
| 324 | 324 |
( incr ) ~pt.y #0001 ADD2 =pt.y |
| 325 |
- @find-line-no-space |
|
| 325 |
+ $no-space |
|
| 326 | 326 |
( incr ) ~j #0001 ADD2 =j |
| 327 |
- ~j LDR #00 NEQ ^find-line-loop MUL JMPS |
|
| 328 |
- @find-line-end |
|
| 327 |
+ ~j LDR #00 NEQ ^$loop MUL JMPS |
|
| 328 |
+ $end |
|
| 329 | 329 |
( return ) ~j |
| 330 | 330 |
|
| 331 | 331 |
RTS |
| ... | ... |
@@ -336,12 +336,12 @@ RTS |
| 336 | 336 |
|
| 337 | 337 |
#0000 =pt.x |
| 338 | 338 |
|
| 339 |
- @find-selection-loop NOP |
|
| 340 |
- ,find-selection-end ~j ~pt.x ADD2 LDR #0a EQU JMP2? POP2 |
|
| 341 |
- ,find-selection-end ~j ~pt.x ADD2 LDR #0d EQU JMP2? POP2 |
|
| 339 |
+ $loop NOP |
|
| 340 |
+ ,$end ~j ~pt.x ADD2 LDR #0a EQU JMP2? POP2 |
|
| 341 |
+ ,$end ~j ~pt.x ADD2 LDR #0d EQU JMP2? POP2 |
|
| 342 | 342 |
( incr ) ~pt.x #0001 ADD2 =pt.x |
| 343 |
- ~pt.x ~position.x #0001 SUB2 LTH2 ^find-selection-loop MUL JMPS |
|
| 344 |
- @find-selection-end |
|
| 343 |
+ ~pt.x ~position.x #0001 SUB2 LTH2 ^$loop MUL JMPS |
|
| 344 |
+ $end |
|
| 345 | 345 |
( return ) ~pt.x ADD2 |
| 346 | 346 |
|
| 347 | 347 |
RTS |
| ... | ... |
@@ -350,18 +350,18 @@ RTS |
| 350 | 350 |
|
| 351 | 351 |
,document.body =selection.from #0000 =pt.x #0000 =pt.y |
| 352 | 352 |
|
| 353 |
- @select-loop |
|
| 354 |
- ,no-space ~selection.from LDR #0a NEQ ~selection.from LDR #0d NEQ #0101 EQU2 JMP2? POP2 |
|
| 353 |
+ $loop |
|
| 354 |
+ ,$no-space ~selection.from LDR #0a NEQ ~selection.from LDR #0d NEQ #0101 EQU2 JMP2? POP2 |
|
| 355 | 355 |
( incr ) ~pt.y #0001 ADD2 =pt.y |
| 356 | 356 |
#0000 =pt.x |
| 357 |
- @no-space |
|
| 358 |
- ,no-reached ~pt.y ~position.y #0001 SUB2 GTH2 ~pt.x ~position.x #0001 SUB2 GTH2 #0101 NEQ2 JMP2? POP2 |
|
| 357 |
+ $no-space |
|
| 358 |
+ ,$no-reached ~pt.y ~position.y #0001 SUB2 GTH2 ~pt.x ~position.x #0001 SUB2 GTH2 #0101 NEQ2 JMP2? POP2 |
|
| 359 | 359 |
~selection.from #0001 ADD2 =selection.to |
| 360 | 360 |
RTS |
| 361 |
- @no-reached |
|
| 361 |
+ $no-reached |
|
| 362 | 362 |
( incr ) ~pt.x #0001 ADD2 =pt.x |
| 363 | 363 |
( incr ) ~selection.from #0001 ADD2 =selection.from |
| 364 |
- ,select-loop ~selection.from LDR #00 NEQ JMP2? POP2 |
|
| 364 |
+ ,$loop ~selection.from LDR #00 NEQ JMP2? POP2 |
|
| 365 | 365 |
|
| 366 | 366 |
RTS |
| 367 | 367 |
|
| ... | ... |
@@ -392,17 +392,17 @@ RTS |
| 392 | 392 |
|
| 393 | 393 |
#0000 =j |
| 394 | 394 |
#0000 =SPRT.x #0000 =SPRT.y |
| 395 |
- @draw-lines-loop |
|
| 395 |
+ $loop |
|
| 396 | 396 |
~scroll.y ~j ADD2 =addr |
| 397 | 397 |
#0000 =SPRT.x |
| 398 | 398 |
,font_hex #00 ,addr #0001 ADD2 LDR #f0 AND #04 ROR #08 MUL ADD2 =SPRT.addr |
| 399 |
- ( draw ) #02 ~addr ~position.y EQU2 #06 MUL ADD =SPRT.color |
|
| 399 |
+ ( draw ) #02 ~addr ~position.y EQU2 #0c MUL ADD =SPRT.color |
|
| 400 | 400 |
#0008 =SPRT.x |
| 401 | 401 |
,font_hex #00 ,addr #0001 ADD2 LDR #0f AND #08 MUL ADD2 =SPRT.addr |
| 402 |
- ( draw ) #02 ~addr ~position.y EQU2 #06 MUL ADD =SPRT.color |
|
| 402 |
+ ( draw ) #02 ~addr ~position.y EQU2 #0c MUL ADD =SPRT.color |
|
| 403 | 403 |
( incr ) ~j #0001 ADD2 =j |
| 404 | 404 |
( incr ) ~SPRT.y #0008 ADD2 =SPRT.y |
| 405 |
- ,draw-lines-loop ~j ~SCRN.height #0008 SUB2 #0008 DIV2 NEQ2 JMP2? POP2 |
|
| 405 |
+ ,$loop ~j ~SCRN.height #0008 SUB2 #0008 DIV2 NEQ2 JMP2? POP2 |
|
| 406 | 406 |
|
| 407 | 407 |
RTS |
| 408 | 408 |
|
| ... | ... |
@@ -469,9 +469,9 @@ RTS |
| 469 | 469 |
|
| 470 | 470 |
#0018 =SPRT.x |
| 471 | 471 |
|
| 472 |
- @draw-textarea-loop |
|
| 472 |
+ $loop |
|
| 473 | 473 |
|
| 474 |
- ,draw-textarea-end ~SPRT.y ~SCRN.height #0010 SUB2 GTH2 JMP2? POP2 |
|
| 474 |
+ ,$end ~SPRT.y ~SCRN.height #0010 SUB2 GTH2 JMP2? POP2 |
|
| 475 | 475 |
|
| 476 | 476 |
( get character ) |
| 477 | 477 |
,font #00 ~j LDR #20 SUB #0008 MUL2 ADD2 =SPRT.addr |
| ... | ... |
@@ -481,29 +481,29 @@ RTS |
| 481 | 481 |
~j ~selection.to LTH2 #0101 EQU2 |
| 482 | 482 |
#05 MUL ADD =SPRT.color |
| 483 | 483 |
|
| 484 |
- ,no-linebreak ~j LDR #0a NEQ ~j LDR #0d NEQ #0101 EQU2 JMP2? POP2 |
|
| 484 |
+ ,$no-linebreak ~j LDR #0a NEQ ~j LDR #0d NEQ #0101 EQU2 JMP2? POP2 |
|
| 485 | 485 |
( draw linebreak ) |
| 486 | 486 |
,linebreak_icn =SPRT.addr |
| 487 |
- ( draw ) #03 |
|
| 487 |
+ ( draw ) #02 |
|
| 488 | 488 |
~j ~selection.from #0001 SUB2 GTH2 |
| 489 | 489 |
~j ~selection.to LTH2 #0101 EQU2 |
| 490 |
- #05 MUL ADD =SPRT.color |
|
| 490 |
+ #06 MUL ADD =SPRT.color |
|
| 491 | 491 |
( fill clear ) |
| 492 |
- @fill-clear |
|
| 492 |
+ $fill-clear |
|
| 493 | 493 |
( incr ) ~SPRT.x #0008 ADD2 =SPRT.x |
| 494 | 494 |
,font =SPRT.addr |
| 495 | 495 |
#01 =SPRT.color |
| 496 |
- ,fill-clear ~SPRT.x ~SCRN.width #0008 SUB2 LTH2 JMP2? POP2 |
|
| 496 |
+ ,$fill-clear ~SPRT.x ~SCRN.width #0008 SUB2 LTH2 JMP2? POP2 |
|
| 497 | 497 |
#0010 =SPRT.x |
| 498 | 498 |
( incr ) ~SPRT.y #0008 ADD2 =SPRT.y |
| 499 |
- @no-linebreak |
|
| 499 |
+ $no-linebreak |
|
| 500 | 500 |
|
| 501 | 501 |
( incr ) ~j #0001 ADD2 =j |
| 502 | 502 |
( incr ) ~SPRT.x #0007 ADD2 =SPRT.x |
| 503 | 503 |
|
| 504 |
- ,draw-textarea-loop ~j LDR #00 NEQ JMP2? POP2 |
|
| 504 |
+ ,$loop ~j LDR #00 NEQ JMP2? POP2 |
|
| 505 | 505 |
|
| 506 |
- @draw-textarea-end |
|
| 506 |
+ $end |
|
| 507 | 507 |
|
| 508 | 508 |
RTS |
| 509 | 509 |
|
| ... | ... |
@@ -513,10 +513,10 @@ RTS |
| 513 | 513 |
#0000 =SPRT.y |
| 514 | 514 |
,scrollbar_bg =SPRT.addr |
| 515 | 515 |
|
| 516 |
- @draw-scrollbar-loop |
|
| 516 |
+ $loop |
|
| 517 | 517 |
( draw ) #08 =SPRT.color |
| 518 | 518 |
( incr ) ~SPRT.y #0008 ADD2 =SPRT.y |
| 519 |
- ,draw-scrollbar-loop ~SPRT.y ~SCRN.height LTH2 JMP2? POP2 |
|
| 519 |
+ ,$loop ~SPRT.y ~SCRN.height LTH2 JMP2? POP2 |
|
| 520 | 520 |
|
| 521 | 521 |
#0000 =SPRT.y |
| 522 | 522 |
,arrowup_icn =SPRT.addr |
| ... | ... |
@@ -536,16 +536,14 @@ RTS |
| 536 | 536 |
@draw-titlebar |
| 537 | 537 |
|
| 538 | 538 |
#0018 ~SCRN.height #0008 SUB2 #09 ,filepath |
| 539 |
- |
|
| 540 | 539 |
( load ) =label.addr =label.color =SPRT.y =SPRT.x |
| 541 | 540 |
~label.addr |
| 542 |
- @draw-titlebar-loop NOP |
|
| 541 |
+ $loop NOP |
|
| 543 | 542 |
( draw ) DUP2 LDR #00 SWP #20 SUB #0008 MUL2 ,font ADD2 =SPRT.addr ~label.color =SPRT.color |
| 544 | 543 |
( incr ) #0001 ADD2 |
| 545 | 544 |
( incr ) ~SPRT.x #0008 ADD2 =SPRT.x |
| 546 |
- DUP2 LDR #00 NEQ ^draw-titlebar-loop MUL JMPS |
|
| 545 |
+ DUP2 LDR #00 NEQ ^$loop MUL JMPS |
|
| 547 | 546 |
POP2 |
| 548 |
- |
|
| 549 | 547 |
( selection ) |
| 550 | 548 |
~selection.from ,document.body SUB2 ,draw-short JSR2 |
| 551 | 549 |
|
| ... | ... |
@@ -625,8 +623,8 @@ RTS |
| 625 | 623 |
@arrowdown_icn [ 0010 1010 fe7c 3810 ] |
| 626 | 624 |
@load_icn [ feaa d6aa d4aa f400 ] |
| 627 | 625 |
@save_icn [ fe82 8282 848a f400 ] |
| 628 |
-@filepath1 [ projects/examples/jumptest.usm 00 ] |
|
| 629 |
-@filepath [ projects/software/left.usm 00 ] |
|
| 626 |
+@filepath [ projects/examples/gui.hover.usm 00 ] |
|
| 627 |
+@filepath1 [ projects/software/left.usm 00 ] |
|
| 630 | 628 |
|
| 631 | 629 |
|4000 ;document Document |
| 632 | 630 |
|
| ... | ... |
@@ -641,4 +639,4 @@ RTS |
| 641 | 639 |
|FF60 ;FILE File |
| 642 | 640 |
|
| 643 | 641 |
|FFF0 .RESET .FRAME .ERROR ( vectors ) |
| 644 |
-|FFF8 [ a0fe a0f7 a0f2 ] ( palette ) |
|
| 642 |
+|FFF8 [ 30ff e0f3 b0f3 ] ( palette ) |