From e5384d5aefccfddb33ada018177a14cd02ac8875 Mon Sep 17 00:00:00 2001 From: Jeremy Penner Date: Mon, 16 Oct 2023 15:54:44 -0400 Subject: [PATCH] cleanup and implement file i/o, boolean logic removed "active file" concept from minijort in favour of taking a file pointer on the stack --- asm.jrt | 9 ++- boot.jor | 8 +-- minijort.c | 102 +++++++-------------------- minijort.exe | Bin 81709 -> 80839 bytes minijort.prj | Bin 3796 -> 3796 bytes tinyjort.com | Bin 1106 -> 1810 bytes tinyjort.jrt | 192 +++++++++++++++++++++++++++++++++++++++++++++++---- 7 files changed, 213 insertions(+), 98 deletions(-) diff --git a/asm.jrt b/asm.jrt index 5bd500f..21f8f51 100755 --- a/asm.jrt +++ b/asm.jrt @@ -290,9 +290,14 @@ var ignoreimm : >grp2* ( ext -- ) 0xd0 swap-args oparg-imm? oparg-val @ 1 = and not if ( 1, d0/d1 ) - oparg-reg? oparg-val @ 0x11 = and + oparg-reg? oparg-val @ 0x11 = and if 2 + ( CL, d2/d3 ) else swap-args 2drop return then - then swap-args 'extregmem 1 ignoreimm ! *? 0 ignoreimm ! if 2ret then ; + then swap-args + oparg-wreg? if 1 + ' >extreg* else + oparg-breg? if ' >extbreg* else + oparg-mem? if byteptr? not if 1 + then :| >mem 2ret |; else + 2drop then then then + 1 ignoreimm ! *? 0 ignoreimm ! if 2ret then ; 2 :op XCHG arg2 oparg-reg? oparg-val @ 0x00 = and arg1 oparg-wreg? and diff --git a/boot.jor b/boot.jor index 682cd79..71f07ee 100755 --- a/boot.jor +++ b/boot.jor @@ -49,13 +49,13 @@ key const sp then ; : interpreter begin word dup b@ while compileword repeat drop ; -: loadfp ( -- ) +: loadfp ( fp -- fp ) infile @ >r - fdeactivate infile ! + infile ! interpreter - infile @ factivate + infile @ r open loadfp close p3x#_q=D$%$zxM&OLK(?5yx8Eb}n* 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 delta 18267 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 diff --git a/minijort.prj b/minijort.prj index e507312145a7d2dfec952288a83f1ae4ca77cdc9..212ee0d0064f0d8ff27ef2f7712bd37c084e3427 100755 GIT binary patch delta 43 ycmca2dqsAGIvaD?7NyNvY$w=wL$)Y|Ge|QqyjsM-&@}l!Pb;$*P^z8Rmk|IzBn~nF delta 43 ycmca2dqsAGIvaD!LdDHmY$w=wlNKt5N6IiTh%aVf*fIG(Pb+g6P^z8Rmk|ItpAFmq diff --git a/tinyjort.com b/tinyjort.com index 258ba8190d413c64542be9cc0c802f67e01bd298..46113e9f2f7c25d1ec69261822d18a606a9f3365 100755 GIT binary patch literal 1810 zcmY+FYitx%6vxlKGjs2DG0;eSL=-bZYfy?bN)>5K>vl^>TDGM~ww{ z(xQzlArRK0G({r@@C%X{p_RyL4DvDt%F9A-3Gy6 zAdtO2W6LblPFqPBAocY)DDh?jb1!LbsLP5!HwBVa%eXJ<++wN7$?nRY*3=X{1BF|tqE-iwZU!T#{gI|y|vx6 z;69q2Xx;b)^HD#PUMRg*I=uJdi9Ms4DX{N5giS<*<(i2$nIARxycol0>?4O-6w?qL_0lUzD<*5CQ zbH%+*ft14=67+uReCBRKMI{`QV8{E;NwfwflI(y_5J{hRRxL!ggU&v8m;y~%a0N#S zM(sV$OYV>YRIh+;vQtSZ{bV18%`IResPz zeg%{?vH`)C|KY(771XL&#De!!ZWPaCr&Z9}B|b0kti?4fPlv0j5zcbC`lqmzb{%dY z+3S(7(NGtLlb9JU&g*^>h7uQQ0_Vkzq7w@iYvF7y-d1T@DH^um8Lhs)uNJ&2RSl?B z1$A0q?X*V%8fcb0!x0q9#ODQ)XVw`B&7Hse~fduR;Z2naZ=K!LcL-Buj$md$eIrNb>FdVY@?-rG(y3Hw;C;v}8r z4>HiAiBy*f$5^h?7}4cQ?Z#GP(NsEV%N9OBQOq(U9q<*)tu|VkNAxT^!=&^aL#a3A zO_riBu@V+|#0Q%fodH?_b delta 632 zcmYk3J!lj`7>3`O@7ru*5dy(VFf744qC`cwG!Z$GtWD0pYH=ZWF)PLx6DDgCK{ybL ztVcv51i?nIun2;}Aqb{XP%KVVM8rZ7EEG`?1R<=q&dkQ2W?-Iu-uL^4UFv+<-ut=4 zH|RS}aEtGAi555&J;Qj_Cns&RxJ)EK^lruRd_jpn1{XEobLVOH!Qh;2APK`7qjL0u>M zag4&C??18?io#m(^UFV}jEfZ3-5h)nkfUWRQ+Ua}mZS3oE}y6>tdJWP{)meNXVl_{ z2LH9qSP!rD*u=FDxJSCt!zWD^a`LRE8$HvQ>S$0{7vGyki@Vw2b$f$^+@nzBAn`FY zWINw!wp(G4E0wyBd`*`jRT&4l?zeK{GaNOhrlv8bMH>tZnyJlIr!i;5`be6Lv=TqH zU-t?)g_Dtra9A91^h?-YlG!D`Kv%@F4jbUXkXM@Y=#^vZY!O+ui_vyk|D~B&3l(7^ zPZ(~FOsFDE=q+FU%A58lvunC_RiJB_R^*!PyJaWL50vx*`si~u%Ior%?5D+n?M`Rl RpzHGUq%GwKEvy1|=ik2i&_)0N diff --git a/tinyjort.jrt b/tinyjort.jrt index 567c61a..adbdae4 100755 --- a/tinyjort.jrt +++ b/tinyjort.jrt @@ -98,13 +98,15 @@ L@ $$VAR CONST $DOVAR ( some helpers for making manually defining colon words slightly less ugly ) : '>t t' w>t ; : @>t t& @t w>t ; -: :t DEF [ t& $DOCOLON @t lit ] w>t ; +: :t DEF [ t& $DOCOLON lit ] w>t ; :CP $DODEFERRED INC BX INC BX MOV BX @[ BX] JMP @[ BX] +: DEFERRED DEF [ t& $DODEFERRED lit ] w>t '>t ; + :ASM LIT_ LODSW PUSH AX @@ -228,19 +230,6 @@ L: fail-digit 0 <: PUSH CX NEXT -:ASM emit - MOV AH 2 # - POP DX - INT 0x21 # - NEXT - -:ASM key - MOV AH 8 # - INT 0x21 # - XOR AH AH - PUSH AX - NEXT - :ASM terminate MOV AH 0x4c # MOV AL 0 # ( todo: pop ) @@ -268,6 +257,97 @@ L: fail-digit 0 <: PUSH AX NEXT +L: TRUE 0xffff w>t +L: FALSE 0 w>t +L: RETTRUE + PUSH TRUE + NEXT +L: RETFALSE + PUSH FALSE + NEXT + +:ASM not + POP AX + CMP AX FALSE + JZ RETTRUE + JMP RETFALSE + +:ASM = + POP AX + POP BX + CMP AX BX + JZ RETTRUE + JMP RETFALSE + +:ASM < + POP AX + POP BX + CMP AX BX + JL RETTRUE + JMP RETFALSE + +:ASM > + POP AX + POP BX + CMP AX BX + JG RETTRUE + JMP RETFALSE + +:ASM and + POP AX + POP BX + CMP AX FALSE + JZ RETFALSE + CMP BX FALSE + JZ RETFALSE + JMP RETTRUE + +:ASM or + POP AX + POP BX + OR AX BX + JZ RETFALSE + JMP RETTRUE + +:t != '>t = '>t not '>t return +:t <= '>t > '>t not '>t return +:t >= '>t < '>t not '>t return + +:ASM & + POP AX + POP BX + AND AX BX + PUSH AX + NEXT + +:ASM | + POP AX + POP BX + OR AX BX + PUSH AX + NEXT + +:ASM ^ + POP AX + POP BX + XOR AX BX + PUSH AX + NEXT + +:ASM << ( val count ) + POP CX + POP AX + SHL AX CL + PUSH AX + NEXT + +:ASM >> + POP CX + POP AX + SHR AX CL + PUSH AX + NEXT + :ASM @ POP BX MOV AX @[ BX] @@ -281,6 +361,13 @@ L: fail-digit 0 <: PUSH AX NEXT +:ASM ub@ + POP BX + MOV AL @[ BX] + XOR AH AH + PUSH AX + NEXT + :ASM @far POP ES POP BX MOV AX @[ ES: BX] @@ -354,6 +441,81 @@ L: fail-digit 0 <: :t segalloc '>t lastseg '>t @ '>t LIT_ 4096 w>t '>t + '>t dup '>t lastseg '>t ! '>t return +2 CONST cell +:t allot '>t here '>t + '>t here! '>t return +:t , '>t here '>t ! '>t cell '>t allot '>t return +:t b, '>t here '>t b! '>t LIT_ 1 w>t '>t allot '>t return + +:ASM overwrite + MOV AH 0x3c # + XOR CX CX ( non-system, non-hidden ) + POP DX ( filename ptr ) + INT 0x21 # + PUSH AX + NEXT + +:ASM open + MOV AH 0x3d # + MOV AL 2 # ( read/write access, allow child inheritance ) + POP DX ( filename ptr ) + INT 0x21 # + PUSH AX + NEXT + +:ASM close + MOV AH 0x3e # + POP BX + INT 0x21 # + NEXT + +0 VAR, fcount +:ASM fread + MOV AH 0x3f # + POP BX ( fp ) + POP DX ( buffer ) + POP CX ( length ) + INT 0x21 # + MOV t& fcount @+ AX ( save number of bytes read ) + NEXT + +:ASM fwrite + MOV AH 0x40 # + POP BX ( fp ) + POP DX ( buffer ) + POP CX ( length ) + INT 0x21 # + MOV t& fcount @+ AX ( save number of bytes written ) + NEXT + +-1 CONST EOF +0 VAR, fbuffer +:t fgetc '>t LIT_ 1 w>t '>t fbuffer '>t t fread + '>t fbuffer '>t ub@ + '>t fcount '>t @ '>t not '>t BZ_ target @ 3 cells + w>t + '>t drop '>t EOF '>t return +:t fputc '>t swap '>t fbuffer '>t b! + '>t LIT_ 1 w>t '>t fbuffer '>t t fwrite '>t return + +:ASM console-emit + MOV AH 2 # + POP DX + INT 0x21 # + NEXT +DEFERRED emit console-emit + +:ASM console-key + MOV AH 8 # + INT 0x21 # + XOR AH AH + PUSH AX + NEXT + +0 VAR, infile ( 0 is a predefined file handle meaning stdin ) +:t in-key '>t infile '>t @ '>t dup '>t BZ_ target @ 4 cells + w>t + '>t drop '>t console-key '>t return + '>t fgetc '>t return +DEFERRED key in-key + ( test program ) ARRAY hex65 key 6 >t key 5 >t 0 >t L: test-word t' hex65 w>t t' number w>t t' drop w>t t' emit w>t t' terminate w>t @@ -373,5 +535,5 @@ target @ t& &here !t dbg" Program assembled, saving tinyjort.com" s" tinyjort.com" overwrite -0x100 target @ :noname for i tseg b@far fputc next ; execute +0x100 target @ :noname for i tseg b@far over fputc next ; execute close