From c0dec444a4b84750542f9227c0e889070f8292c8 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Mon, 9 Oct 2023 00:09:40 -0400 Subject: [PATCH] RLE encoder, Rick's Clubhouse welcome screen --- dialer.com | Bin 5363 -> 7010 bytes dialer.jrt | 11 ++++++++++- embed.jrt | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ iter.jrt | 2 +- rickclub.bin | 1 + zipoff.com | Bin 20172 -> 20174 bytes zipstub.seg | Bin 4214 -> 4214 bytes 7 files changed, 63 insertions(+), 2 deletions(-) create mode 100755 embed.jrt create mode 100755 rickclub.bin diff --git a/dialer.com b/dialer.com index 1085d5a2894b3282909f4b1fbc6458dbe90eef5b..b31789e7c07d6f249bef396378925ff5b2395efb 100755 GIT binary patch delta 2718 zcma)8UuaWj6hG(Q+|+v0o8%@i$&JY!L#Wfbw$h441<{G%^mbeAv`oQjwVl;j*V#;g9>gS?bt&dOvJ3#e}O#=v~d+5_TpaVpbu`NJLmg)v*-#F!pS+m z^Y8ba`z7c8vG76j#RgSbk{ns8x*F;uBXhO}m2qvv2q!U`tjUK~M2ol$mFN@}aPgoM zd2W6`Aszw_C>xbr^}N6oZd5+6UafRj7ce(?II_S!7|pB0csBZm(vO{ZMk!(k1_`+w zy{UMp!WAL8;*U|bFDO>vooH6ct5awN-WM8Y=E)m}T9Q?ei7?VcJw1F8{#1q$%;V9! zQMO+YcEmg>?X_4B>!@9$$e zpmuO?)NzlPQ*`uCh4{S z%+td2>rAKLsoMk9P->&H^VKR32g1J1nJux0F15@VJgqonmC?wTkpkMW8)6b3rr;~n z!#W{12q}>iTqAsgkaa>XfCq$B%9KFr;4i`(Ar$j4Ec6vZUm^6x=q6*#?hDPsIgn9L zY8~p&0Y)aZ^TLw~%5R?KFR}K}mDo1S5XsxZJA@BotJ~JL!Sz@Xug6AXA4faP^=7je z!F{rL(3!|85xgiggiY~IJZoSPzpXCfH`UE9J-C&nE{&)dDBlr^^E>IM^ z?jT>8*0?)H&sp}Y#m)M0`mn^iy=qnO|3PidHfszFxjP#&Tf_8YGty4Oc;;?ZG zZ&~GdRz|IvQsb6-%eCNp->z^-5GF0SRT01mY^tI~KIZpcK-} z{J_?sR)oemAcA*AuYClEd4DT$~&C3S*pOjMqg<}qK^8TE%+ zK@nUL{ltXJahI%sWIbxhDpXg_gT`Cd`6)b!2mF~mh09#3Nw_9rg0>r`8G>yDODUc~ zDHRY>>Lj&N3ZF#Ek>wbPNC|eeY8#Y7HDMwJ(U7pR)b?L;`m}u`#Ro9-z%|dB?fD8aA9nfdpnU=FDJ6JSU7+!SGke6qTEj06Nrbca4Ny&&M5=R z8I@mXirVSK>BI@jI!3QhyDi$Bcq+mAc58d6J#->*PT`82#V=V~EPrVY<15xri2}A- z9@>x!e(0(NY_`T|1=`l6c0ns(++rd(sHI9RIsK^hh^)D^OYc)^PWWrIO3&Tm^b|eZ2@_g5H^J4*5>`0u01{3Tvw)Rmwm7+lkMr-Pb-@Xa2mxtvIgIx zuDrr!`Vc0QyLKGP+I_q2LwyG_c5lzVo*bp;GCezbpQmiuiq|`nV8X|&4qC`zn#~Zd lOExt%H8eIf!r!qW>`1P0Hf?%&O`F}cthv5kWFMu+@DGJEtgZk6 delta 1064 zcmYjPTSydP6#maYjyKlbotb~2SlLEWq>Hw$tzFon$V3v?E@ru?V6b`=#VaP}1z4ngVps<(H(vFWB#S`39iM^dl$43ONXljXnohFa&=dMAocBd`P{wKG zusixanfdj1(-Ll*SDZYk*8|eL}oR+A3))SQe50tydyd%x&1My(W;q71u+ z@pyj1@Fr7Y zPMuKGkQ79u3kwunN$qRR^B5H)=NPsYn3OM3L+UzpCrV_osJaQg6)}x(B}FIH3d~j` zmV^%TXkRqab1F6viAGLZLy>6gRDT~zLj$m_8f(s*Ro0pQL94fWC}Iu9u&k!mzqQWV zV%7Sva&>4D9-5aurS*gmMj{dgqT?~c_(B&dlY|duAP}hW*Z7$xlJL#k*Afct-`8pd Lw$=G^^G?Gb0div , 770 freq>div , 852 freq>div , 941 freq>div , : connect ( st -- ) call noisy 200 sleep-csec handshake ; +import embed.jrt +array rick-welcome-rle { s" rickclub.bin" embed-rle } + +: xmit-screen ( rle -- ) 0 0 textxy! rle-decode each + i 8 >> textpen ! i emit + next ; + +: rick-welcome rick-welcome-rle xmit-screen ; + { : X ( v -- v ) 2* 1 | ; : o ( v -- v ) 2* ; } 7 const logoh @@ -144,7 +153,7 @@ var curr-logobit lgray fg! ; : go splash 0 15 textxy! - s" 5551212" connect s" CONNECT 57600" xmit nl ; + s" 5551212" connect s" CONNECT 57600" xmit nl rick-welcome ; ' go ' main redefine diff --git a/embed.jrt b/embed.jrt new file mode 100755 index 0000000..05ccd21 --- /dev/null +++ b/embed.jrt @@ -0,0 +1,51 @@ +: filebytes ( fp -- ) >arg + (( begin dup fgetc dup EOF != while yield repeat drop close )) ; + +{ +( rle encoding is designed for textmode screens and assumes a file with an + even number of bytes ) +var rle-start +var rle-run +: >rle-start 0 rle-run ! target rle-start ! 0 w>t ; +: rle-ctrl ( -- b ) rle-run @ b@t 0xff & ; +: rle-word ( -- v ) rle-run @ 1+ @t ; +: repeating? ( -- f ) rle-ctrl 0x80 & not ; +: inc-run ( -- f ) + rle-ctrl dup 0x7f & 0x7f < if 1+ rle-run @ b!t 1 else drop 0 then ; +: >rle ( v -- ) rle-run @ if + dup rle-word = if ( is match ) + repeating? if ( is repeating run ) + inc-run if drop return then + else ( undo last value of non-repeating run ) + rle-ctrl 1- rle-run @ b!t + target cell - rle-run ! + 1 rle-run @ b!t + ( grow target by 1 byte ) 0 >t + rle-run @ 1+ !t ( write value at end of target ) + return + then + else ( no match ) + repeating? not if inc-run if w>t return then then + then + then ( if we have gotten here, start a new run ) + target rle-run ! 0 >t w>t ; + +: >rle-done 0 rle-run ! target rle-start @ !t ; + +: encode-rle ( -- , with iterator that returns bytes ) + >rle-start each i iteration if i 8 << | >rle else drop then next >rle-done ; +: embed-rle ( host-filename -- ) open filebytes encode-rle ; +: embed ( host-filename -- ) + target 0 w>t open filebytes each i >t next target swap !t ; +} + +: embed-size ( embed -- v ) dup @ swap - ; +: embed-data ( embed -- p ) cell + ; + +: rle-decode ( p -- ) + >arg (( dup @ swap cell + +arg ( pend p ) + begin + 1+ dup 1- ub@ dup 0x80 & swap 0x7f & 1+ times + if ( non-repeating ) each dup @ map cell + next + else ( repeating ) each dup @ map next cell + then + 2dup <= until drop drop )) ; diff --git a/iter.jrt b/iter.jrt index 5c77311..6545f1d 100755 --- a/iter.jrt +++ b/iter.jrt @@ -98,7 +98,7 @@ nexttop :push >next { ( Because we dereference pointers on the return stack, we must run this from the caller's segment. Copy the definition into the host segment. ) : EACH_ r ; - : each ' EACH_ , >i 0 , ; immediate + : each ' EACH_ , here >i 0 , ; immediate : continue ' GOTO_ , i cell - , ; immediate : next ['] continue here i ; diff --git a/rickclub.bin b/rickclub.bin new file mode 100755 index 0000000..e0e64f4 --- /dev/null +++ b/rickclub.bin @@ -0,0 +1 @@ + ÛÛÛÛÛÛ»  ÛÛ»  ÛÛÛÛÛÛ» ÛÛ»  ÛÛ» ÜÛ» ÛÛÛÛÛÛÛ»          ÛÛÉÍÍÛÛ» ÛÛº ÛÛÉÍÍÍͼ ÛÛº ÛÛɼ ßͼ ÛÛÉÍÍÍͼ     ÿ ÛÛÛÛÛÛɼ ÛÛº ÛÛº      ÛÛÛÛÛɼ      ÛÛÛÛÛÛÛ»        ( 2 7 3 ) 5 5 5 - 1 2 1 2 ÛÛÉÍÍÛÛ» ÛÛº ÛÛº      ÛÛÉÍÛÛ»      ÈÍÍÍÍÛÛº        ÛÛº  ÛÛº ÛÛº ÈÛÛÛÛÛÛ» ÛÛº  ÛÛ»     ÛÛÛÛÛÛÛº        Èͼ  Èͼ Èͼ  ÈÍÍÍÍͼ Èͼ  Èͼ     ÈÍÍÍÍÍͼ        ÜÜÜÜÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜÜÜÜÜ ÜÜÜ ÜÜÜ ÜÜÜÜÜÜÜ ÜÜÜÜÜÜÜ     ÛÿÜÜÜÜÛ ÛÿÛ ÛÿÛ ÛÿÛ ÛÿÜÜÿÛÜ ÛÿÛÜÛÿÛ ÛÿÜÜÜÿÛ ÛÿÛ ÛÿÛ ÛÿÜÜÜÜÛ ÛÿÜÜÜÜÛ ÛÿÛÜÜÜÜ ÛÿÛÜÜÜÜ ÛÿÛÜÛÿÛ ÛÿÜÜÜÿÛ ÛÿÜÜÜÿÛ ÛÿÛÜÛÿÛ ÛÿÛÜÛÿÛ ÛÜÜÜÜÿÛ ÛÿÜÜÜÛÜ ÛÜÜÜÜÜÛ ÛÜÜÜÜÜÛ ÛÜÜÜÜÜÛ ÛÜÜÜÜÜÛ ÛÜÛ ÛÜÛ ÛÜÜÜÜÜÛ ÛÜÜÜÜÜÛ ÛÜÜÜÜÜÛ ÛÜÜÜÜÜÛ SYSOP:ÿRick Toews ßÛßßÜ ßÛßßÜ ÜßßßÜ ÚOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄO¿O Û Û Û Û Û ³O O OYOoOuOrO OfOrOiOeOnOdOlOyO OlOoOcOaOlO OcOoOmOpOuOtOeOrO O O³O ßÛßßßÛ ßÛßßßÛ ßßÜÜ ³O O O O O O O O O O O OhOaOnOgOoOuOtO!O O O O O O O O O O O O O O³O Û Û Û Û Û ÀOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÄOÙO ß ßßß ß ßßß ßÜÜÜÜß \ No newline at end of file diff --git a/zipoff.com b/zipoff.com index 8411ac16e9a66908c4d192c30de270bd2b70684a..62e922e377f2b07da2f0b23b0105b18470630da1 100755 GIT binary patch delta 1004 zcmYk4UuYCp6vpozXEuM_otfA*TT0V5R-+Qf#uz2Kb~LSMGI#DyTM+DniIdIUWN@6> z&Yc9!%j$!IRtt7$X{&iDeee%HNJ0?}()zHJG%Q%8R4LfTQYeLD5&9r)^~~-@eHy;s z_nmXkxpU{IaAgXw{Nv%WvA%PgJ|XMLVE=c zGgh*#5q0e9d++T&(?qLq8XB~1yw`+pPXD*<=cF)~i0%w@;|EdFcn#l=G(#(8Nf~oP z#2z~oqRTi-wi%yg%9xTSl()S+b6qxqw)9+0?k5dMuOZO0$^YM!@NmHF15lL~&XB0# zflGxY^-+HU74u_u zz(LNXeu*}a6&>5nMl{MijoT9p@JsR@b7>U>jE8;@v(56Y=rDO@*$Ida@o`>cUOf15 zxe#3-y`_qIRO*GrjvE4AyB201*qRo)1S9h?u9&||uyL=5I_+Q-th0bfx{UuNBCewp zE#nd-v|1u9Jbqlu{J34jb@&EkzJ(HfG1Cd_$AxzX648G1#nKV_5V{_fjLhORf0_w= z*kSHS7kY$`(68lFRH}iho|C6&J)l>?f}EvG@Ikv+RgdJ)%@i6c+MH|8HeRE=Zi+aD z)sU{V!XX964Y#tON_Hxfri2!+c&~DqHX_FhCs;n*0XH_OsJW-09l#l-J=#D!ad)(j zuERoflD^tIm}@`|4|J%5#Efz&E&-kQN8+DxQ^}AN8uuKJhqmi#U;(Wt*P~zQ3#D#2 zK6DPkI9qy})qiqLHC0c^>W8@$;w;pv8EwRwfZS$vo;D$Wf(2ThvpkS~wbg1y+-0n| zhyvB1BGP&B0Qg_3f5T#hfPJ9XT3l0gs{!8K`!0ir4T64Jlw-;NVhX3#T z|G)EnXU@)5ynPinJ$!s%eBerlPmYqagWsu_d)Br7*q=RTXn<Qyjx=-*_6E*Y;G zH;iz7Ick1u;O!FwnudVyH|lXSD*C$7WVH99mkJ+Q9Xoz_m8PcHcoPwt3m9r z84rDhUhc@9$1z$e5nd!**D zb!tD|2&=XE1Kx+MllI0fXAH7`g(pb}aS%51@2EZX zw<34_HgdSRPb)`b%u%>G%>dVl?`Ty8;4oA|<8Rp~%Ul3FN zb<&mH*5-vSSZqNJ;FcDcd8j)Yhy~QzOL$v*AmlLZ3Zhoi9fQ&`AQH{tT@u74R7G<* z3l62|hz6cLD|&u@BZx~-0naxON$h!AVf}pY*P)O)zqmQBMyr9$DtMjyKJcUO(K}tR(9HfkptIN)3J+ZN)Kvm>$K* zzepRhr}Z*qaW?@uaNLwu@)6L