commit e05290f235498d3ce320f6d136a608b7c64b31bb
parent bf0051394445a64e09d2b854cf4eda486cb94ea2
Author: neauoire <aliceffekt@gmail.com>
Date: Wed, 24 Feb 2021 20:28:20 -0800
Rewrote the image routine
Diffstat:
5 files changed, 90 insertions(+), 115 deletions(-)
diff --git a/build.sh b/build.sh
@@ -20,5 +20,5 @@ cc -std=c89 -DDEBUG -Wall -Wno-unknown-pragmas -Wpedantic -Wshadow -Wextra -Werr
# cc uxn.c emulator.c -std=c89 -Os -DNDEBUG -g0 -s -Wall -Wno-unknown-pragmas -L/usr/local/lib -lSDL2 -o bin/emulator
# run
-./bin/assembler examples/devchord.usm bin/boot.rom
+./bin/assembler examples/images.usm bin/boot.rom
./bin/emulator bin/boot.rom
diff --git a/emulator.c b/emulator.c
@@ -196,7 +196,7 @@ drawdebugger(Uint32 *dst, Uxn *u)
Uint8 x = (i % 8) * 3 + 3, y = i / 8 + 3, b = u->ram.dat[i];
drawicn(dst, x * 8, y * 8, icons[(b >> 4) & 0xf], 1, 0);
drawicn(dst, x * 8 + 8, y * 8, icons[b & 0xf], 1, 0);
- y = VER - i / 8, b = u->wst.dat[i];
+ y = VER - 1 + i / 8, b = u->wst.dat[i];
drawicn(dst, x * 8, y * 8, icons[(b >> 4) & 0xf], 1 + (u->wst.ptr == i), 0);
drawicn(dst, x * 8 + 8, y * 8, icons[b & 0xf], 1 + (u->wst.ptr == i), 0);
}
diff --git a/examples/devmousedrag.usm b/examples/devmousedrag.usm
@@ -1,112 +0,0 @@
-( drag )
-
-:dev/r fff8 ( std read port )
-:dev/w fff9 ( std write port )
-
-;dragx 2 ;dragy 2
-;mousex 2 ;mousey 2
-;lastx 2 ;lasty 2
-;originx 2 ;originy 2
-;down 1 ;state 1
-
-|0100 @RESET
-
- #05 =dev/r ( set dev/read mouse )
- #02 =dev/w ( set dev/write to sprite )
- ,draw-picture JSR
-
-BRK
-
-|c000 @FRAME
-
- ( clear last cursor )
- #10 ,clear_icn ~lastx ~lasty ,draw-sprite JSR
- ( record mouse values )
- #00 IOR2 =mousex #02 IOR2 =mousey
- #04 IOR #11 ADD =state
- ( draw mouse )
- ~state ,cursor_icn ~mousex ~mousey ,draw-sprite JSR
- ( update last pos )
- ~mousex =lastx ~mousey =lasty
-
- ( get touch )
- #05 IOR #01 EQU ,on-touch ROT JMP? POP2
- #05 IOR #10 EQU ,on-release ROT JMP? POP2
- #01 ~down EQU ,on-drag ROT JMP? POP2
-
- BRK
-
- @on-touch
- #01 =down
- #00 IOR2 =originx #02 IOR2 =originy
- ,update JSR
- BRK
-
- @on-release
- #00 =down
- ,update JSR
- BRK
-
- @on-drag
- #00 IOR2 ~originx SUBS2 ~dragx ADDS2 =dragx
- #02 IOR2 ~originy SUBS2 ~dragy ADDS2 =dragy
- #00 IOR2 =originx #02 IOR2 =originy
- ,update JSR
- BRK
-
- @update
- ,draw-picture JSR
-
-BRK
-
-@draw-picture
- #01 ,graphic #0040 ~dragx ADD2 #0040 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0008 ADD2 #0048 ~dragx ADD2 #0040 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0010 ADD2 #0050 ~dragx ADD2 #0040 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0018 ADD2 #0058 ~dragx ADD2 #0040 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0020 ADD2 #0040 ~dragx ADD2 #0048 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0028 ADD2 #0048 ~dragx ADD2 #0048 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0030 ADD2 #0050 ~dragx ADD2 #0048 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0038 ADD2 #0058 ~dragx ADD2 #0048 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0040 ADD2 #0040 ~dragx ADD2 #0050 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0048 ADD2 #0048 ~dragx ADD2 #0050 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0050 ADD2 #0050 ~dragx ADD2 #0050 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0058 ADD2 #0058 ~dragx ADD2 #0050 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0060 ADD2 #0040 ~dragx ADD2 #0058 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0068 ADD2 #0048 ~dragx ADD2 #0058 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0070 ADD2 #0050 ~dragx ADD2 #0058 ~dragy ADD2 ,draw-sprite JSR
- #01 ,graphic #0078 ADD2 #0058 ~dragx ADD2 #0058 ~dragy ADD2 ,draw-sprite JSR
- RTS
-
-@draw-sprite
- IOW2 ( y byte )
- IOW2 ( x byte )
- IOW2 ( sprite address )
- IOW ( layer-color )
- RTS
-
-@clear_icn [ 0000 0000 0000 0000 ]
-@cursor_icn [ 80c0 e0f0 f8e0 1000 ]
-
-@graphic [
- ff80 8080 8080 8088
- ffff fffc f8f9 f1f4
- ffff 0010 c721 2120
- ffff 3f0f 0717 c343
- 8888 8080 8080 8080
- f0f1 f2f5 f2f1 f0f4
- 1208 804c 9212 4c00
- 7303 0343 1b1b fbfb
- 8080 8f83 8383 8393
- f0f3 f1f0 e4c0 80ff
- 00c7 c7c6 4606 00ff
- c3d3 c307 870f 3fff
- 8f83 8383 8383 83ff
- fff7 fdff c0e2 f1ff
- 7fef bfff 07af 5fff
- ffff ffff ffff ffff
-]
-
-|d000 @ERROR BRK
-|FFF0 [ f0ac f0bb f053 ] ( palette )
-|FFFA .RESET .FRAME .ERROR ( vectors )
diff --git a/examples/images.usm b/examples/images.usm
@@ -0,0 +1,87 @@
+( drag )
+
+:dev/r fff8 ( std read port )
+:dev/w fff9 ( std write port )
+
+&Point { x 1 y 1 }
+
+&Point2d { x 2 y 2 }
+&Picture2d { x 2 y 2 width 1 height 1 color 1 addr 2 }
+
+;pict Picture2d ;pictpt Point
+
+|0100 @RESET
+
+ #05 =dev/r ( set dev/read mouse )
+ #02 =dev/w ( set dev/write to sprite )
+
+ #0030 #0042 #04 #04 #01 ,graphic ,draw-picture JSR
+ #0040 #0052 #04 #04 #02 ,graphic ,draw-picture JSR
+ #0050 #0062 #04 #04 #03 ,graphic ,draw-picture JSR
+
+ #0058 #0042 #04 #04 #05 ,graphic ,draw-picture JSR
+ #0068 #0052 #04 #04 #06 ,graphic ,draw-picture JSR
+ #0078 #0062 #04 #04 #07 ,graphic ,draw-picture JSR
+
+ #0080 #0042 #04 #04 #0a ,graphic ,draw-picture JSR
+ #0090 #0052 #04 #04 #0c ,graphic ,draw-picture JSR
+ #00a0 #0062 #04 #04 #0e ,graphic ,draw-picture JSR
+
+BRK
+
+@draw-picture ( x y width height addr -> picture )
+
+ =pict.addr =pict.color =pict.height =pict.width =pict.y =pict.x
+ #00 =pictpt.y
+ @draw-picture-row
+ #00 =pictpt.x
+ @draw-picture-col
+ ( draw )
+ ~pict.color
+ ~pict.addr
+ #0008 #00 ~pictpt.x MUL2 ADD2 ( x )
+ #0008 #00 ~pictpt.y ~pict.width MUL MUL2 ADD2 ( y * width )
+ ~pict.x #0008 #00 ~pictpt.x MUL2 ADD2
+ ~pict.y #0008 #00 ~pictpt.y MUL2 ADD2
+ ,draw-sprite JSR
+ ( draw - end )
+ ( incr x ) ~pictpt.x #01 ADD =pictpt.x
+ ~pictpt.x ~pict.width LTH ,draw-picture-col ROT JMP? POP2
+ ( incr y ) ~pictpt.y #01 ADD =pictpt.y
+ ~pictpt.y ~pict.height LTH ,draw-picture-row ROT JMP? POP2
+
+RTS
+
+@draw-sprite
+ IOW2 ( y byte )
+ IOW2 ( x byte )
+ IOW2 ( sprite address )
+ IOW ( layer-color )
+ RTS
+
+@clear_icn [ 0000 0000 0000 0000 ]
+@cursor_icn [ 80c0 e0f0 f8e0 1000 ]
+
+@graphic [
+ ff80 8080 8080 8088
+ ffff fffc f8f9 f1f4
+ ffff 0010 c721 2120
+ ffff 3f0f 0717 c343
+ 8888 8080 8080 8080
+ f0f1 f2f5 f2f1 f0f4
+ 1208 804c 9212 4c00
+ 7303 0343 1b1b fbfb
+ 8080 8f83 8383 8393
+ f0f3 f1f0 e4c0 80ff
+ 00c7 c7c6 4606 00ff
+ c3d3 c307 870f 3fff
+ 8f83 8383 8383 83ff
+ fff7 fdff c0e2 f1ff
+ 7fef bfff 07af 5fff
+ ffff ffff ffff ffff
+]
+
+|c000 @FRAME BRK
+|d000 @ERROR BRK
+|FFF0 [ f0ac f0bb f053 ] ( palette )
+|FFFA .RESET .FRAME .ERROR ( vectors )
diff --git a/uxn.c b/uxn.c
@@ -108,7 +108,7 @@ Uint8 opr[][2] = {
{1,0}, {1,2}, {2,2}, {2,3}, {3,3}, {1,0}, {0,1}, {2,1},
{2,1}, {2,1}, {2,1}, {2,1}, {2,1}, {2,1}, {2,1}, {2,1},
/* 16-bit */
- {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, /* TODO */
+ {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {2,2}, {4,0}, /* TODO */
{0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {0,0}, /* TODO */
{0,0}, {0,0}, {0,0}, {0,0}, {0,0}, {1,0}, {0,1}, {0,0}, /* TODO */
{4,2}, {4,2}, {4,2}, {4,2}, {4,2}, {4,2}, {4,2}, {4,2}