From 5c24d9ded085f9200aed8d56d92bcbab4c728d26 Mon Sep 17 00:00:00 2001 From: Devine Lu Linvega Date: Fri, 17 Mar 2023 21:33:40 -0700 Subject: [PATCH] Added chr-view --- gui/chr-view/akane20x10.icn | Bin 0 -> 4096 bytes gui/chr-view/build.sh | 25 +++ gui/chr-view/chr-view.tal | 340 ++++++++++++++++++++++++++++++++++++ gui/chr-view/pc9820x10.chr | Bin 0 -> 8192 bytes 4 files changed, 365 insertions(+) create mode 100644 gui/chr-view/akane20x10.icn create mode 100755 gui/chr-view/build.sh create mode 100644 gui/chr-view/chr-view.tal create mode 100644 gui/chr-view/pc9820x10.chr diff --git a/gui/chr-view/akane20x10.icn b/gui/chr-view/akane20x10.icn new file mode 100644 index 0000000000000000000000000000000000000000..26a6b8d560ecdacec9bc9c372ae255959e366115 GIT binary patch literal 4096 zcmbtX&5PUG6~B@tEL>V^U`(@UkkD+51DQ=1CFNzVX+pLRSa_4cUGxu_2OZKy2I)EU zRro>OWp^>oMwMY)x(X8*J0YdpENW&IVumh;31l4lhH*8v^nT|`n$Nt~LhnU7lJ33d zp5OVpM~o%yR&}LHm-m(XmFK!{ftk$11wMLwNtE=0y|j5ad3a=#Lf>%@cFR_YpLx%p?jOjYTs?@c<@+I z7Q|v+s(=K)RrOdGxVx~qskqGIp04R#-PGlD-f(TrDCTpy&&hD@+g{%ek0BTOY-68$ zyv2p?t1D|AW6h!Y;k(0E`>$TVx`e&n<=b_??%S*Rj$y0~F|YH7&hJ~WMGRjVI>X1b zmRhu!jbQUpU{^{7^uF!FPhA$-GSgt^z)o!a;c;UB*fxb-W19e(DJsS)RV(p-rK`BO zG#+rT)*|e@%T1n5%t^@;wsxGgU*?4n7j6+GqMqS7JPygy3y=3|em$rUjn%xzTpN=T3aosvXsjmH3m)6K(^&*)Ejwj&n4__T(sB) zE)71W2}<~ZuU@gy8|2enET%a=sMw4#sb76w?KkmV@s&T)xZY#k(f%u!lXl&7+BwNd zl0^-BCPyhK8{yRKz zGXcJb=JScA#5!l~j1SqJ^bl?BI=frY2W*c%{vI}GpJky{CZ))EHc$k1%DiG90G~}? zyX4=y&fQX5vedXa5IK|fjN_q0_Vrj#B0Zp;lsFYKS#@dtF zv?U$9sVw=t2W%EIRg<+!w;PqSym_Y-Vb%d+Etg+4I>zdmU(Vny@Wg4qajR6Y3lc07 zAKEU5*lM6_ByTeSzcdq9J^h7lZkYU{7+0TVrJ&O{U$v4UUWVru^h&kI1`VHk_X;}r zIvvSWQaw1^W8`6UcjT}4AvZ1TA~q5R-ITKXc>gkd5>7R}#}UU;L6Pfzt%aCAKf7=) z<9xEDwq#2F+wPk-@@82gyUVqX)Z*PGYiVG2x%<#BO-8Rd{DEm4IZ?NkE5J%RY{Ng0 z=UFA?+go0d@UBk~_rKmS1-?YKv%4fK+HyIy0r8;g8{LAOJ?5wR*5p0z>lMY*EvDV~ z+0ePO^b2)GO7p^*#V);XhR)IE%k`Jdm(AHMoFkCu;4OKQC2810lPrby(rRU7Od0$w z9oWVGv^U1M&n@O-jwfMn)l%B;g8S`dvqac&xt>x+eoy!iFX)PST;|EMiFiq#|Ek}B z2i&-dU($dx;YDkOY}GdF3Aqv;;yd(;G4MxhGLo&J2ActFbqVhUE#ORR4jw#}UhbWK zno$lVe?$@Q#YVOEZs*<3I^ud0eN5Q>S`YXu3Ty=1$TeJbcS-OAev_;+ z_H>hX(G$63R)%j8mTbTOm1;Fh_kLEs<{#O5#4l>>q9Nb&Z~R&R+cf)*I>G1^SMy0e z$2t9{{pn;nn|qve2A-LYQ~C_Ku9II;lj^5EIwbT*qUkejGZu)CW9;kUI~AmL21HQwT7W^G*E_rJYUZc66#Mt-gQ^Q-fP zG&sKxru)+=?3|4QyYVco5o6R(^F?%wzk&vV4ru1k`YAfZM18czJ4IEBru&>ksjZiVf@rS)Z z1EX!e^gANSAdX5xRbiF^Yg3MHIis%#^EsMlRYfX1|CYsti4K;n16a0wgj-Bv2P z&t=S|G0L|@{cIjbu0XzkFO2B)3s8j%zif02)U&8p!o_@!e}(vt{S#DFRL>tCpCbN& z+95elH)qocD$(|`CPFeu0+TTX-iZ$BIR4wDyCu|(-$wC~I7!{Np$$an!^h7bJb&=? z9~Uuy?m5Xj!5IHt`1|amPNx>w@XyJ?q{kCn7x3dua#>jiZaV9@$uEpS2X2yQmfHE- zKW^W=vz6ulZ5#aUe!~93eKJCnql>>R;G!WM19Q|(8RE;7(4#%gJ^dB+j8!NePEU65 T=Q(^IH;){|JpLTA@r-^4yxzqN literal 0 HcmV?d00001 diff --git a/gui/chr-view/build.sh b/gui/chr-view/build.sh new file mode 100755 index 0000000..b0f1f52 --- /dev/null +++ b/gui/chr-view/build.sh @@ -0,0 +1,25 @@ +#!/bin/sh -e + +ASM="uxncli $HOME/roms/drifblim.rom" +EMU="uxnemu" +LIN="uxncli $HOME/roms/uxnlin.rom" + +SRC="chr-view.tal" +DST="chr-view.rom" +CPY="$HOME/roms" +ARG="pc9820x10.chr" + +if [[ "$*" == *"--lint"* ]] +then + $LIN $SRC +fi + +$ASM $SRC $DST + +if [[ "$*" == *"--save"* ]] +then + cp $DST $CPY +fi + +$EMU $DST $ARG + diff --git a/gui/chr-view/chr-view.tal b/gui/chr-view/chr-view.tal new file mode 100644 index 0000000..ac94077 --- /dev/null +++ b/gui/chr-view/chr-view.tal @@ -0,0 +1,340 @@ +( uxnemu chr-view.rom image.chr ) + +|00 @System &vector $2 &wst $1 &rst $1 &pad $4 &r $2 &g $2 &b $2 &debug $1 &halt $1 +|10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1 +|20 @Screen &vector $2 &width $2 &height $2 &auto $1 &pad $1 &x $2 &y $2 &addr $2 &pixel $1 &sprite $1 +|80 @Controller &vector $2 &button $1 &key $1 +|a0 @File &vector $2 &success $2 &stat $2 &delete $1 &append $1 &name $2 &length $2 &read $2 &write $2 + +|0000 + + @src $40 + +|0100 ( -> ) + + set-theme-dark + + #0280 .Screen/width DEO2 ( 640px ) + #01e0 .Screen/height DEO2 ( 480px ) + + ;on-console .Console/vector DEO2 + ;on-control .Controller/vector DEO2 + + load-theme + +BRK + +@on-console ( -> ) + + ;src STH2 + ( read source ) + .Console/read DEI + DUP #20 LTH OVR #7f GTH ORA ?&end + STH2kr slen #003f GTH2 ?&end + STH2r sput BRK + &end + POP + + ( mode from src ) + STH2kr scap #0004 SUB2 ;&icn-ext scmp #00 EQU ?&no-icn + set-mode-icn + &no-icn + + ( resize from src ) + STH2kr scap #0009 SUB2 read-size + ORAk #00 EQU ?&no-size + OVR #00 SWP #30 SFT2 .Screen/width DEO2 + #00 OVR INC #30 SFT2 .Screen/height DEO2 + &no-size + POP2 + + STH2r draw-image + +BRK + &icn-ext ".icn $1 + +@on-control ( -> ) + + .Controller/button DEI + DUP #10 NEQ ?&no-u + .Screen/height DEI2 #0008 SUB2 .Screen/height DEO2 + ;src draw-image + &no-u + DUP #20 NEQ ?&no-d + .Screen/height DEI2 #0008 ADD2 .Screen/height DEO2 + ;src draw-image + &no-d + DUP #40 NEQ ?&no-l + .Screen/width DEI2 #0008 SUB2 .Screen/width DEO2 + ;src draw-image + &no-l + DUP #80 NEQ ?&no-r + .Screen/width DEI2 #0008 ADD2 .Screen/width DEO2 + ;src draw-image + &no-r + DUP #01 NEQ ?&no-a + toggle-theme + &no-a + DUP #02 NEQ ?&no-b + toggle-mode + &no-b + POP + +BRK + +@toggle-theme ( -- ) + + .System/r DEI2 #05cf EQU2 ?&no-light + set-theme-dark + ;src !draw-image + &no-light + set-theme-light + ;src draw-image + +JMP2r + +@set-theme-dark ( -- ) + + #05cf .System/r DEO2 + #05cf .System/g DEO2 + #05cf .System/b DEO2 + +JMP2r + +@set-theme-light ( -- ) + + #fc50 .System/r DEO2 + #fc50 .System/g DEO2 + #fc50 .System/b DEO2 + +JMP2r + +@toggle-mode ( -- ) + + ;draw-image/length LDA2 #0010 EQU2 ?&no-chr + set-mode-chr + ;src !draw-image + &no-chr + set-mode-icn + ;src draw-image + +JMP2r + +@set-mode-chr ( -- ) + + #0010 ;draw-image/length STA2 + #81 ;draw-image/color STA + +JMP2r + +@set-mode-icn ( -- ) + + #0008 ;draw-image/length STA2 + #03 ;draw-image/color STA + +JMP2r + +@read-size ( 00x00* -- w h ) + + DUP2 sbyte #00 EQU ?&cancel + INC2k INC2 LDA LIT "x NEQ ?&cancel + DUP2 #0003 ADD2 sbyte #00 EQU ?&cancel + ( y ) DUP2 #0003 ADD2 sbyte STH + ( x ) sbyte STHr + +JMP2r + &cancel POP2 #0000 JMP2r + +( +@|drawing ) + +@draw-image ( name* -- ) + + #0000 DUP2 .Screen/x DEO2 .Screen/y DEO2 + + .File/name DEO2 + [ LIT2 &length 0010 ] .File/length DEO2 + ;&buf .Screen/addr DEO2 + #01 .Screen/auto DEO + &stream + ;&buf .File/read DEO2 + [ LIT &color 81 ] .Screen/sprite DEO + .Screen/x DEI2 .Screen/width DEI2 LTH2 ?&no-line + #0000 .Screen/x DEO2 + .Screen/y DEI2k #0008 ADD2 ROT DEO2 + &no-line + .File/success DEI2 ORA ?&stream + + draw-interface + +JMP2r + &buf $10 + +@draw-interface ( -- ) + + #0000 .Screen/x DEO2 + .Screen/height DEI2 #0008 SUB2 .Screen/y DEO2 + + ;src draw-str + + ( size ) + LIT "( draw-chr + .Screen/width DEI2 #03 SFT2 NIP draw-byte + LIT "x draw-chr + .Screen/height DEI2 #03 SFT2 NIP draw-byte + LIT ") draw-chr + +JMP2r + +@draw-str ( str* -- ) + + LDAk #00 EQU ?&skip + &while + LDAk draw-chr + INC2 LDAk ?&while + &skip + POP2 + +JMP2r + +@draw-byte ( byte -- ) + + DUP #04 SFT draw-hex + +@draw-hex ( char -- ) + + #0f AND DUP #09 GTH #07 MUL ADD #30 ADD + +@draw-chr ( char -- ) + + #20 SUB #00 SWP #30 SFT2 ;font ADD2 .Screen/addr DEO2 + [ LIT &color 03 ] .Screen/sprite DEO + +JMP2r + +( + +@|stdlib ) + +@slen ( str* -- len* ) + + DUP2 scap SWP2 SUB2 + +JMP2r + +@scap ( str* -- end* ) + + LDAk #00 NEQ JMP JMP2r + &while INC2 LDAk ?&while + +JMP2r + +@sput ( char str* -- ) + + scap STA + +JMP2r + +@sbyte ( str* -- byte ) + + LDAk chex STH + INC2 LDA chex + STHr #40 SFT ADD + +JMP2r + +@chex ( char -- hex ) + + DUP #2f GTH OVR #3a LTH AND ?&number + DUP #60 GTH OVR #67 LTH AND ?&lc + DUP #40 GTH OVR #47 LTH AND ?&uc + POP #00 JMP2r + &number #30 SUB JMP2r + &uc #37 SUB JMP2r + &lc #57 SUB + +JMP2r + +@scmp ( a* b* -- flag ) + + STH2 + &loop + LDAk LDAkr STHr NEQ ?&end + LDAk LDAkr STHr ORA ?¬-end + POP2 POP2r #01 JMP2r + ¬-end + INC2 INC2r !&loop + &end + POP2 POP2r #00 + +JMP2r + +( theme ) + +@load-theme ( -- ) + + ;&path .File/name DEO2 + #0002 .File/length DEO2 + ;&r .File/read DEO2 + ;&g .File/read DEO2 + ;&b .File/read DEO2 + .File/success DEI2 ORA #01 JCN JMP2r + LIT2 &r $2 .System/r DEO2 + LIT2 &g $2 .System/g DEO2 + LIT2 &b $2 .System/b DEO2 + +JMP2r + &path ".theme $1 + +( +@|assets ) + +@font ( block8 ) +0000 0000 0000 0000 1010 1010 1000 1000 +2828 0000 0000 0000 44fe 4444 44fe 4400 +107e 807c 02fc 1000 0044 0810 2044 0000 +7884 8864 9a84 7a00 1020 0000 0000 0000 +2040 4040 4040 2000 0804 0404 0404 0800 +0044 2810 2844 0000 0010 107c 1010 0000 +0000 0000 0010 2000 0000 007c 0000 0000 +0000 0000 0000 1000 0204 0810 2040 8000 +7c82 8282 8282 7c00 3010 1010 1010 3800 +7c82 027c 8080 fe00 7c82 021c 0282 7c00 +2242 82fe 0202 0200 fe80 807c 0282 7c00 +7c82 80fc 8282 7c00 fe82 0408 0810 1000 +7c82 827c 8282 7c00 7c82 827e 0202 0200 +0000 1000 1000 0000 0000 1000 1010 2000 +0008 1020 1008 0000 0000 7c00 7c00 0000 +0010 0804 0810 0000 7c82 820c 1000 1000 +7c82 92aa aa92 6400 7c82 82fe 8282 8200 +fc82 82fc 8282 fc00 7c82 8080 8082 7c00 +fc82 8282 8282 fc00 fe80 80f0 8080 fe00 +fe80 80f0 8080 8000 7c82 808e 8282 7c00 +8282 82fe 8282 8200 3810 1010 1010 3800 +0602 0202 0282 7c00 8284 88f0 8884 8200 +8080 8080 8080 fe00 ec92 9292 9292 9200 +c2a2 a292 8a8a 8600 7c82 8282 8282 7c00 +fc82 82fc 8080 8000 7c82 8282 8a84 7a00 +fc82 82fc 8282 8200 7c82 807c 0282 7c00 +fe10 1010 1010 1000 8282 8282 8286 7a00 +8282 4444 2828 1000 9292 9292 9292 6c00 +8244 2810 2844 8200 8282 4428 1010 1000 +fe02 0c10 6080 fe00 6040 4040 4040 6000 +8040 2010 0804 0200 0c04 0404 0404 0c00 +1028 0000 0000 0000 0000 0000 0000 fe00 +1008 0000 0000 0000 0000 7c02 7e82 7e00 +0000 fc82 fc82 fc00 0000 7c82 8082 7c00 +0000 027e 8282 7e00 0000 7c82 fc80 7e00 +0000 7c82 e080 8000 0000 7c82 7e02 fc00 +0000 80fc 8282 8200 0000 1000 1010 1000 +0000 0200 0282 7c00 0000 8284 f884 8200 +0000 8080 8080 7e00 0000 6c92 9292 9200 +0000 bcc2 8282 8200 0000 7c82 8282 7c00 +0000 fc82 fc80 8000 0000 7c82 7e02 0200 +0000 bcc2 8080 8000 0000 7e80 7c02 fc00 +0000 fe10 1010 1000 0000 8282 8282 7c00 +0000 8282 4428 1000 0000 9292 9292 6c00 +0000 8244 3844 8200 0000 8282 7e02 7c00 +0000 fe02 7c80 fe00 2040 4080 4040 2000 +1010 1010 1010 1000 0804 0402 0404 0800 +0000 0032 4c00 0000 aa55 aa55 aa55 aa55 diff --git a/gui/chr-view/pc9820x10.chr b/gui/chr-view/pc9820x10.chr new file mode 100644 index 0000000000000000000000000000000000000000..8279d678e7c0021694f119f6366e3c9f6da83b07 GIT binary patch literal 8192 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 literal 0 HcmV?d00001