From 9246b3990878080b7d5879d6c645c846c4f1d2fe Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Fri, 15 Sep 2023 16:10:24 -0400 Subject: [PATCH] IN and OUT opcodes, zipoff bugfixes, anonymous labels --- asm.jrt | 22 +++++++++++++++++++++- assemble.com | Bin 12361 -> 12705 bytes game.jrt | 6 +++--- jort.com | Bin 4626 -> 4675 bytes text.jrt | 50 +++++++++++++++++++++++++++++++++++++++----------- zipoff.com | Bin 14517 -> 14917 bytes zipoff.jrt | 37 ++++++++++++++++++++----------------- 7 files changed, 83 insertions(+), 32 deletions(-) diff --git a/asm.jrt b/asm.jrt index b56b39b..7525b7e 100755 --- a/asm.jrt +++ b/asm.jrt @@ -85,6 +85,10 @@ array patchtable 10 2 cells * allot assembly in the 'here' arena. ) : L! [ ' ' , ] 2 cells + target swap ! ; +array anonlabels 10 cells allot +: <@ ( labelid -- ) cells anonlabels + @ @+ ; +: :> ( labelid -- ) cells anonlabels + target swap ! ; + : memreg create , does> @ oparg-base ! oparg-complete! ; 0 memreg BX+SI] 1 memreg BX+DI] 2 memreg BP+SI] 3 memreg BP+DI] 4 memreg SI] 5 memreg DI] 6 memreg BP] 7 memreg BX] @@ -175,7 +179,8 @@ var ignoreimm dup 0xf6 ' >extbreg|mem* *? if drop 2ret then 0xf7 ' >extwreg|mem* *? if 2ret then ; -1 :op RET- oparg-imm? if oparg-val @ w>t then ; +1 :op RET- oparg-imm? if 0xc2 >t oparg-val @ w>t then ; +1 :op RETF- oparg-imm? if 0xca >t oparg-val @ w>t then ; 1 :op PUSH 0x50 >wreg+op* 0x06 >segreg+op* @@ -325,3 +330,18 @@ var ignoreimm 2 :op LEA oparg-wreg? arg2 oparg-mem? and if 0x8d >memreg then ; +: AL? oparg-reg? oparg-val @ 0x10 = and ; +: AX? oparg-reg? oparg-val @ 0x00 = and ; + +: >inout* ( base ) + arg2 oparg-reg? oparg-val @ 0x03 ( DX ) = and arg1 if + AL? if 8 + >t 2ret then + AX? if 9 + >t 2ret then + then + arg2 oparg-imm? arg1 if + AL? if >t oparg-val @ >t 2ret then + AX? if 1+ >t oparg-val @ >t 2ret then + then ; + +2 :op IN 0xe4 >inout* ; +2 :op OUT 0xe6 >inout* ; diff --git a/assemble.com b/assemble.com index 0961549e6f2dc0bbb20f1211845ee0e5275b2bd2..085c1c25c9d5a5db5ff146de95518a2f8a1d0114 100755 GIT binary patch delta 5021 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 fTGt`$#r0ae_eRLzA+krl;{i-R}Y_hf) zH8ro+Hwf@(sZ%&n?Bun)PMQd`Lzg%#bcv&ZwAjQIsf~LuAp-k0E1)Egk}t$O$~^c~ z;H;+#-#y^L4}uCy?YA@ejN{sDk2JNW@xxtb>b6XboT@C^A_ZA0Z710QX=?2xzlUEF zg;G+Kieu7L%kDFEzU~H5WQkZRmvq@SVC?6Tz!Dj|JI>yardoIJ+IgmKM0{EDRgX)k zTD|a7Y3e)wFI*-BSo`M3SUprK?@JO(^yCr=JL4PuCmHRv-5AEU8D@&oG@p`Yq*cO8 zk|oRu*7AC}jbD>IsE}eh=PQo$8EIHRb<{qKvL8tri=~p;RKFdy2OO7em!~K+-?d8^ zu@6o{r~IhQSuBHhl|f~WT!t|I_h7YzdF)4cO&R9-$N@3P+(Oz$tdlPgs5Gz1jyxJ@ z;xC{_RFVNXbnn)Ec7gq=^osONI9K{udZu_;7MPPvyA%R5-ux z%IB4l(henDT&^;g-#S0?^{y>j{YnhYM02NyS`g3uWq9s#^~x)ip_v0Y>#5t23oFw( zg|3OPE6-JiuB{tt ze|-MP^t+cVb%!$jr1-uNy>))W_IG6V_Fqdkl?4x9Qorkab5#Y_faSQU9+RKJOf2Ie zmhZ!s$)>wwb}M_Lv|e2t-yF_no{wqTIRBNF4~(L<4W+k2b9b%|$t-E-qZAzK zbcrvD?Wnm_S}JvkCqiA~I6oSg2#kq?T3#3v$F#E6$t_&bZk!XZ>$Mj^MMabKW;R*)y*!Lgr=xA?yd|hWdP8$XyMHqPtQq%rv^*@8 zw(B13(E(N?QU(u^1R^cE;ExJ&{*Ja9(WOX%WqN?^@21q>(GrNY5T2p7EsaO2yWEp z1c{8x3<2wW9sN@b=NDk3UfaR98iIkd4u@!~ogrV3;nZx!8R=rr91aB-p_A}E z<0i(KO)t%6*&(Cz0lzEu8rbT|xSdJ#r}C}rXsJ)HE$&A!)@R4|VV-0A(BN}ME&rRL z@C(L0-8y#6w?Bfq_JMnG7T`vhM%UNIL+Dc*U!&G?HL?NM8T>tBgzg97Gr9+hy+Ekt zD9r-yht0zis}&#PQuSf>&SMqnN9G;UKtu zeiu~*cxzaI9=q3}&g#M^`4^f1I7V=YQ^o$*{!)5drW8cIb7g+9Na}0xU*kiCTt-Srm)OOb=E@B+Nj+le7nYZN;}27B<* zr_J?J6W?pz9cp{fKz2SVBX#(T=7VORNk+=hXKux@Rf+%<7ooUEyMaAVN~g?o$iEJg zTDd!(NTZM*C^PUnzKL@qv|i}1J$TQQt4h`6?w39>pGBwB5rM^R`ktUZ`Yi@hhU#4?-Q+Nm1QMVqt54sd3go^K{4<=VqXc6NHB7(Lg6(6==bD z_gnPzZ$c*Y@^RiFtP3^qF3W=>CVhbT4H@mTGu7Ik*3l7tu~o)aEQ4SyMn&B$5=k95 z8_PIpH|r0bHKxFt3B;RES{8oaowV{ob(XBKL>9*peNRaI=QW+2d^XYRCjJj}%7ZO> zkPQ%dCSh*mGfQT!lPv5_Wyt7d%c%Jm>bx_*M*qeRfklpdG9tb${+_`}#{5qGFJl4v AE&u=k delta 2647 zcmY*bZEREL6@Jfa-|y@DC7NtiXqyxopff0wMwGOWMT=R{gwl+xW6-8b?CZqDv0Z=E zSj*&0MHPu63fEOAVI6BAQM{KOk$&3nbNK6OwmMBR3WN$2u&k9=Q@Nf z(v9wY&bjA3AJ2KN&#m*;tzY_=t%xVAFYMjUXU^+Z$r!cYw?>^KPLFZMzUbWTG?|F6 z-z=@W~AjOf8>5!km_3Gi9CB1)16e-bzws6mH>ZXoEXpu*BmyV+tkk$2e+ zY4+ikg}vt+A3Z&OZn=4@6lCd)n__*^?6w)cieD847EPveE-O}!hz?i+iwJ)>cm)c1vugvLM|nzAXzZk*Zu%w^l6q z(em&8$4s88{foR`mKYWvCifD=6i2AVo>b_5A`nxGf(LsQ5ktfiN!M@DFJ*=0^07o} z<+Z#*>C7n}bn)NGi*f{}C2AL;e^(aeVju!j{E)CH$CSRJkoO&_hap*J6m=!eaXgaV z;p#OscJWux@hpzYuLZtRRK{)wMV2az4B)WVspB{L9(!M0qpGZBzU8ki3x~wIN{{l5 z`ZX#nb}n679>3MH(BrrK@;}G6*Hy-p`f{Dh3KtLEQ>QNdYI*G62MW$JH=z(x<_ii% zve?oK%VSqNM}IwbPHn$ujXHXA?CPe`mu^2DMKds!#n|TotC`jQ>Q#wy+MdIneyUC` z9-cqDpzcxTesgl{Z<|FL&v_SRYTOpvwwu~Mh5-MFCs*w5;M3T!jB{S)<|{1gs- z3)fh22p1xk>5sY{?0c2R)eY(n8R?Qvbg)9@u)20zizcvQIvb;XieQs0wU>8l#LSZ# z-JRk&?EpTV)4F&BHen+-NtW8iPir0=t$eO-gQ3a;TH}VFA`kK-nQ(0{>va##Ye7FU z2Cl*h?PHC=j!Ig)You3~eN(D`gcw)_&c4QV_h7#+`GzEJYY7JQR%FYI3ehm;X3~jN z9tTB?E$UPJIlUN|z<0trHZT#*4-}%qZXV68!e_#p!LP-zAF{D>U8^hCOZ8HpctYzF zr}%W>bl|8spcjRsVo`rj@8u5N;WfpHo|+zH-%g}xVh!mY>Jc09Rr z*RDv{&d%NlDhPwaioy~jBW^6wk6Km&N|jPv41Ex+CHO%|WDn%>WG0E(91<|KnzLd! zSV40T*c13_Hz)>GB&z`X$_PYOfVlv$c6`397olESZy;F=fQJyNf``a=5D6J5k0?6S z(#!foh}PruZ-oNv>3*8RWj&5q1TPPwMu0^#G<$k_1AUUHQWUMa^4@bsnZ`Jh!Tlt@ zu^BjKyl$wsF=RYKFB_kPLZ}Tm=SZfgC#1*jfQdr!RU}19mYOKhcV)y*}z{j6@JQG^=)Ja{rG#(*FCUWX9?y* zq(bM-FEFVt-lR70kIg#MgHF7-sog2UC-);bY+@EzXU&S)#;=)OyzIf>Ob&^--_iz7 zT&^{K#ted+#7`LYx(y8k6UmE0pLj)_#$NS=f{-8b7pi9P;F}=<2He2}Em(w50(dlC1D4WiIh9)pRV}PYt_AINNg01WwfI45p?e`IJA@Jl10?@ z;HJf4^bT_c+k=Bb1O!2vw_UJV%qzYg8<&0V~%erW*m3##?tSI38FW9JZgeLNd zG|i1HwCjJ?Ioq5=pxd0{cA$z1LV7wK=;f_}?O1Qbq0jjbkO_l)itiGdwKg7hJb1#U z9~J&WhKJm2ZT82EDlXRzyNat=g^%zKsb}Hp(!sfCHj&Bae9_TtfwdEeCr>&KvTf2S z3Ns2H1|3jyjQ_ePK-NxU+q&&FS2(l3(&kTHNzUs&> pagew % ; +:t texty textpos @ 1 >> pagew / ; +:t textx! texty pagew 1 << * + textpos ! ; +:t texty! pagew 1 << * textx + textpos ! ; +:t nextline texty 1+ pagew 1 << * textpos ! ; : PREP-TEXTCOPY-XY PREP-TEXTCOPY - ADD SI textpos @+ ; + ADD DI textpos @+ ; :ASM draw-text ( s -- ) - INT 3 # MOV BX SI POP SI PREP-TEXTCOPY-XY @@ -41,8 +71,6 @@ L: draw-next-char JMP draw-next-char 0 <: SUB DI textpage @+ - INC DI MOV textpos @+ DI MOV SI BX NEXT - diff --git a/zipoff.com b/zipoff.com index eafd1a8bf385428a8ec1c52d14ca31e64e835a49..533a9e8356d8decbe31b7fd51e5285f9e0d15e0d 100755 GIT binary patch delta 7211 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 bO-rP0cOgl%+g-5#`iF)SBfZt|HI)1x`u`%3 delta 6856 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 TX^+t@-2)q=gY9MTQIGsT2`lbW diff --git a/zipoff.jrt b/zipoff.jrt index 3df9e39..eab6c38 100755 --- a/zipoff.jrt +++ b/zipoff.jrt @@ -23,6 +23,8 @@ L: DOFAR array tdict DICTSIZE allot array &FARCALL L@ DOFAR , comseg , +:init comseg &FARCALL cell + ! ; ( comseg can change! ) + asm-here array $DOFAR INC BX INC BX @@ -37,33 +39,34 @@ array $DOFAR asm-com : te word tdict dict-lookup interpretword ; immediate -: tlookup ( -- tcp ) word tdict dict-lookup drop cell + @ ; +: tlookup ( -- tcp ) word tdict dict-lookup not if dup err then cell + @ ; : t' tlookup interpretnumber ; immediate : t& tlookup cell + interpretnumber ; immediate : t, tlookup state if lit ' w>t , else w>t then ; immediate : '>t tlookup w>t ; -: chained-lookup - primary-dict dict-lookup dup if return then drop tdict dict-lookup ; +: tdict| ' tdict ' dictionary redefine ; +: |tdict ' primary-dict ' dictionary redefine ; -: tcomp| - ' lookup-current ' lookup redefine - ' tdict ' dictionary redefine - :| cell + @ w>t |; ' compileword redefine - :| t, LIT_ w>t |; ' compilenum redefine ; -: |tcomp - ' chained-lookup ' lookup redefine - ' primary-dict ' dictionary redefine - ' , ' compileword redefine - ' lit ' compilenum redefine ; - -|tcomp - -: DEF asm-com tcomp| new-word latest wordname lastlabel ! |tcomp $DOFAR , target , ; +: DEF asm-com tdict| new-word latest wordname lastlabel ! |tdict $DOFAR , target , ; : :asm asm-here new-word here cell + , ; s" coredefs.jrt" loadfile +( now we have LIT_ and can hook the compiler ) +: chained-lookup + primary-dict dict-lookup dup if return then drop tdict dict-lookup ; + +: tcomp| tdict| + ' lookup-current ' lookup redefine + :| cell + @ w>t |; ' compileword redefine + :| t, LIT_ w>t |; ' compilenum redefine ; + +: |tcomp |tdict + ' chained-lookup ' lookup redefine + ' , ' compileword redefine + ' lit ' compilenum redefine ; + : :timm tcomp| new-word immediate |tcomp $DOCOLON , ] ; :timm [[ |tcomp ['] [ ; : ]] tcomp| ] ; :timm ; t, return |tcomp ['] [ ;