| ... | ... |
@@ -64,7 +64,7 @@ SDL_Texture *gTexture; |
| 64 | 64 |
Uint32 *pixels; |
| 65 | 65 |
|
| 66 | 66 |
Screen screen; |
| 67 |
-Device *devconsole, *devscreen, *devmouse, *devkey, *devsprite, *devctrl, *devsystem; |
|
| 67 |
+Device *devscreen, *devmouse, *devkey, *devctrl; |
|
| 68 | 68 |
|
| 69 | 69 |
#pragma mark - Helpers |
| 70 | 70 |
|
| ... | ... |
@@ -380,6 +380,24 @@ sprite_poke(Uint8 *m, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 380 | 380 |
return b1; |
| 381 | 381 |
} |
| 382 | 382 |
|
| 383 |
+Uint8 |
|
| 384 |
+file_poke(Uint8 *m, Uint16 ptr, Uint8 b0, Uint8 b1) |
|
| 385 |
+{
|
|
| 386 |
+ FILE *f; |
|
| 387 |
+ ptr += 8; |
|
| 388 |
+ if(b0 == 0x0d) {
|
|
| 389 |
+ char *name = &m[(m[ptr] << 8) + m[ptr + 1]]; |
|
| 390 |
+ Uint16 length = (m[ptr + 2] << 8) + m[ptr + 3]; |
|
| 391 |
+ Uint16 addr = (m[ptr + 4] << 8) + b1; |
|
| 392 |
+ f = fopen(name, "w"); |
|
| 393 |
+ if(!fwrite(&m[addr], length, 1, f)) |
|
| 394 |
+ return error("Save", "Failure");
|
|
| 395 |
+ fclose(f); |
|
| 396 |
+ printf("Exported %s[%d bytes]\n", name, length);
|
|
| 397 |
+ } |
|
| 398 |
+ return b1; |
|
| 399 |
+} |
|
| 400 |
+ |
|
| 383 | 401 |
Uint8 |
| 384 | 402 |
system_poke(Uint8 *m, Uint16 ptr, Uint8 b0, Uint8 b1) |
| 385 | 403 |
{
|
| ... | ... |
@@ -449,15 +467,22 @@ main(int argc, char **argv) |
| 449 | 467 |
if(!init()) |
| 450 | 468 |
return error("Init", "Failed");
|
| 451 | 469 |
|
| 452 |
- devconsole = portuxn(&u, "console", ppnil, console_poke); |
|
| 470 |
+ portuxn(&u, "console", ppnil, console_poke); |
|
| 453 | 471 |
devscreen = portuxn(&u, "screen", ppnil, screen_poke); |
| 454 |
- devsprite = portuxn(&u, "sprite", ppnil, sprite_poke); |
|
| 472 |
+ portuxn(&u, "sprite", ppnil, sprite_poke); |
|
| 455 | 473 |
devctrl = portuxn(&u, "controller", ppnil, ppnil); |
| 456 | 474 |
devkey = portuxn(&u, "key", ppnil, ppnil); |
| 457 | 475 |
devmouse = portuxn(&u, "mouse", ppnil, ppnil); |
| 458 |
- |
|
| 459 |
- u.devices = 15; /* pad to last device */ |
|
| 460 |
- devsystem = portuxn(&u, "system", ppnil, system_poke); |
|
| 476 |
+ portuxn(&u, "file", ppnil, file_poke); |
|
| 477 |
+ portuxn(&u, "empty", ppnil, ppnil); |
|
| 478 |
+ portuxn(&u, "empty", ppnil, ppnil); |
|
| 479 |
+ portuxn(&u, "empty", ppnil, ppnil); |
|
| 480 |
+ portuxn(&u, "empty", ppnil, ppnil); |
|
| 481 |
+ portuxn(&u, "empty", ppnil, ppnil); |
|
| 482 |
+ portuxn(&u, "empty", ppnil, ppnil); |
|
| 483 |
+ portuxn(&u, "empty", ppnil, ppnil); |
|
| 484 |
+ portuxn(&u, "empty", ppnil, ppnil); |
|
| 485 |
+ portuxn(&u, "system", ppnil, system_poke); |
|
| 461 | 486 |
|
| 462 | 487 |
/* Write screen size to dev/screen */ |
| 463 | 488 |
u.ram.dat[devscreen->addr + 0] = (HOR * 8 >> 8) & 0xff; |
| ... | ... |
@@ -3,7 +3,8 @@ |
| 3 | 3 |
&Screen { width 2 height 2 pad 4 x 2 y 2 color 1 }
|
| 4 | 4 |
&Sprite { pad 8 x 2 y 2 addr 2 color 1 }
|
| 5 | 5 |
&Controller { buttons 1 }
|
| 6 |
-&Mouse { x 2 y 2 state 1 chord 1 }
|
|
| 6 |
+&Mouse { x 2 y 2 state 1 chord 1 change 1 }
|
|
| 7 |
+&File { pad 8 name 2 length 2 binary 2 }
|
|
| 7 | 8 |
|
| 8 | 9 |
&Rect2d { x1 2 y1 2 x2 2 y2 2 }
|
| 9 | 10 |
&Point2d { x 2 y 2 }
|
| ... | ... |
@@ -37,7 +38,7 @@ |
| 37 | 38 |
BRK |
| 38 | 39 |
|
| 39 | 40 |
@FRAME |
| 40 |
- |
|
| 41 |
+ |
|
| 41 | 42 |
( keyboard controls ) |
| 42 | 43 |
|
| 43 | 44 |
,no-ctrl ~dev/ctrl.buttons #00 EQU JMP? POP2 |
| ... | ... |
@@ -67,11 +68,21 @@ BRK |
| 67 | 68 |
|
| 68 | 69 |
,no-toolbar-click ~dev/mouse.y ~bankview.y #0010 SUB2 SUB2 #0008 DIV2 #0000 NEQ2 JMP? POP2 |
| 69 | 70 |
,no-toolbar-click ~dev/mouse.x ~bankview.x SUB2 #0008 DIV2 #000c LTH2 JMP? POP2 |
| 70 |
- ,no-toolbar-click ~dev/mouse.x ~bankview.x SUB2 #0008 DIV2 #000e GTH2 JMP? POP2 |
|
| 71 |
- ~mouse.x ~bankview.x SUB2 #0008 DIV2 #000c SUB2 SWP POP =bankview.mode |
|
| 71 |
+ ,no-toolbar-click ~dev/mouse.x ~bankview.x SUB2 #0008 DIV2 #000f GTH2 JMP? POP2 |
|
| 72 |
+ ~mouse.x ~bankview.x SUB2 #0008 DIV2 #000d SUB2 SWP POP =bankview.mode |
|
| 73 |
+ ( release ) #00 =dev/mouse.state |
|
| 72 | 74 |
,redraw JSR ,click-end JMP |
| 73 | 75 |
@no-toolbar-click |
| 74 | 76 |
|
| 77 |
+ ( save button ) |
|
| 78 |
+ |
|
| 79 |
+ ,no-save-click ~dev/mouse.y ~bankview.y #0010 SUB2 SUB2 #0008 DIV2 #0000 NEQ2 JMP? POP2 |
|
| 80 |
+ ,no-save-click ~dev/mouse.x ~tileview.x SUB2 #0008 DIV2 #000f NEQU2 JMP? POP2 |
|
| 81 |
+ ( save ) ,save_name =dev/file.name #0800 =dev/file.length ~bankview.addr =dev/file.binary |
|
| 82 |
+ ( release ) #00 =dev/mouse.state |
|
| 83 |
+ ,redraw JSR ,click-end JMP |
|
| 84 |
+ @no-save-click |
|
| 85 |
+ |
|
| 75 | 86 |
( bankview ) |
| 76 | 87 |
|
| 77 | 88 |
~dev/mouse.x ~bankview.x GTH2 ~dev/mouse.x ~bankview.x #0080 ADD2 LTH2 #0101 EQU2 |
| ... | ... |
@@ -108,13 +119,15 @@ BRK |
| 108 | 119 |
~dev/mouse.y ~bankview.y SUB2 #0008 DIV2 #0008 MUL2 #0010 MUL2 ADD2 |
| 109 | 120 |
~bankview.addr ADD2 =tileview.addr |
| 110 | 121 |
,redraw JSR ,click-end JMP |
| 122 |
+ |
|
| 111 | 123 |
@no-bank-click |
| 112 | 124 |
|
| 113 | 125 |
( tileview ) |
| 114 | 126 |
|
| 115 | 127 |
~dev/mouse.x ~tileview.x GTH2 ~dev/mouse.x ~tileview.x #0080 ADD2 LTH2 #0101 EQU2 |
| 116 | 128 |
~dev/mouse.y ~tileview.y GTH2 ~dev/mouse.y ~tileview.y #0080 ADD2 LTH2 #0101 EQU2 |
| 117 |
- #0101 NEQ2 ,click-end ROT JMP? POP2 |
|
| 129 |
+ #0101 NEQ2 ,no-tile-click ROT JMP? POP2 |
|
| 130 |
+ |
|
| 118 | 131 |
~dev/mouse.x ~tileview.x SUB2 #0008 DIV2 #0008 MUL2 #0040 DIV2 |
| 119 | 132 |
~dev/mouse.y ~tileview.y SUB2 #0008 DIV2 #0008 MUL2 #0040 DIV2 #0002 MUL2 ADD2 |
| 120 | 133 |
#0008 MUL2 |
| ... | ... |
@@ -125,13 +138,15 @@ BRK |
| 125 | 138 |
( mask ) #01 #07 ~pos.x #0008 DIV2 SWP POP SUB ROL |
| 126 | 139 |
XOR |
| 127 | 140 |
( save ) ~addr ~pos.y #0008 DIV2 ADD2 STR |
| 128 |
- ,redraw JSR |
|
| 141 |
+ ,redraw JSR |
|
| 142 |
+ |
|
| 143 |
+ @no-tile-click |
|
| 129 | 144 |
|
| 130 | 145 |
@click-end |
| 131 | 146 |
|
| 132 | 147 |
,draw-cursor JSR |
| 133 | 148 |
|
| 134 |
-BRK |
|
| 149 |
+BRK |
|
| 135 | 150 |
|
| 136 | 151 |
@redraw |
| 137 | 152 |
|
| ... | ... |
@@ -152,7 +167,7 @@ RTS |
| 152 | 167 |
|
| 153 | 168 |
( toolbar ) |
| 154 | 169 |
|
| 155 |
- ~bankview.x #0060 ADD2 =dev/sprite.x |
|
| 170 |
+ ~bankview.x #0068 ADD2 =dev/sprite.x |
|
| 156 | 171 |
~bankview.y #0010 SUB2 =dev/sprite.y |
| 157 | 172 |
,tool_selector =dev/sprite.addr |
| 158 | 173 |
#01 ~bankview.mode #00 EQU ADD =dev/sprite.color |
| ... | ... |
@@ -165,6 +180,10 @@ RTS |
| 165 | 180 |
,tool_eraser =dev/sprite.addr |
| 166 | 181 |
#01 ~bankview.mode #02 EQU ADD =dev/sprite.color |
| 167 | 182 |
|
| 183 |
+ ~tileview.x #0078 ADD2 =dev/sprite.x |
|
| 184 |
+ ,save_icn =dev/sprite.addr |
|
| 185 |
+ #01 =dev/sprite.color |
|
| 186 |
+ |
|
| 168 | 187 |
( guides ) |
| 169 | 188 |
|
| 170 | 189 |
#00 =i ,font_hex =dev/sprite.addr |
| ... | ... |
@@ -375,9 +394,10 @@ RTS |
| 375 | 394 |
@tool_selector [ 80c0 e0f0 f8e0 1000 ] |
| 376 | 395 |
@tool_hand [ 4040 4070 f8f8 f870 ] |
| 377 | 396 |
@tool_eraser [ 2050 b87c 3e1c 0800 ] |
| 378 |
- |
|
| 379 |
-@blank_icn [ 0000 0000 0000 0000 ] |
|
| 380 |
-@cell1_icn [ 7cfe fefe fefe 7c00 ] |
|
| 397 |
+@blank_icn [ 0000 0000 0000 0000 ] |
|
| 398 |
+@cell1_icn [ 7cfe fefe fefe 7c00 ] |
|
| 399 |
+@save_icn [ fe82 8282 848e f400 ] |
|
| 400 |
+@save_name [ nasu_export.chr 00 ] |
|
| 381 | 401 |
|
| 382 | 402 |
@font_hex ( 0-F ) |
| 383 | 403 |
[ |
| ... | ... |
@@ -566,6 +586,7 @@ RTS |
| 566 | 586 |
|FF20 ;dev/sprite Sprite |
| 567 | 587 |
|FF30 ;dev/ctrl Controller |
| 568 | 588 |
|FF50 ;dev/mouse Mouse |
| 589 |
+|FF60 ;dev/file File |
|
| 569 | 590 |
|
| 570 | 591 |
|FFF0 .RESET .FRAME .ERROR ( vectors ) |
| 571 | 592 |
|FFF8 [ 35ac c03c afac ] ( palette ) |
| 572 | 593 |
\ No newline at end of file |