From 650481f849218ba0c6fadca594ef16e442bdeb9b Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sun, 5 Jul 2020 08:03:15 -0400 Subject: [PATCH] z80/8086: extract 2>R code from stable ABI zone Only its jump at 0x33 remains. I've also fixed a strange offset oddity in 8086's (n) placement. It was off by 2, but strangely, it ran properly. Anyway, now it's fixed. --- blk/091 | 4 ++-- blk/283 | 2 +- blk/286 | 5 +---- blk/288 | 11 +++++++---- blk/397 | 2 +- blk/805 | 2 +- blk/807 | 7 ++----- blk/810 | 2 +- blk/813 | 8 ++++---- blk/814 | 4 ++++ cvm/forth.bin | Bin 5418 -> 5426 bytes cvm/xcomp.fs | 5 +++-- emul/Makefile | 4 ++-- 13 files changed, 29 insertions(+), 27 deletions(-) diff --git a/blk/091 b/blk/091 index df0e280..7cb7a46 100644 --- a/blk/091 +++ b/blk/091 @@ -5,8 +5,8 @@ sets that don't change (well, not without some binary manipu- lation). Here's the complete list of these references: 04 BOOT addr 06 (uflw) addr 08 LATEST -42 EXIT wordref 53 (br) wordref 67 (?br) wordref -80 (loop) wordref a9 2>R wordref bf (n) wordref +33 2>R wordref 42 EXIT wordref 53 (br) wordref +67 (?br) wordref 80 (loop) wordref bf (n) wordref d4 (s) wordref BOOT and (uflw) exist because they are referred to before those diff --git a/blk/283 b/blk/283 index 5db52a8..7aea058 100644 --- a/blk/283 +++ b/blk/283 @@ -10,5 +10,5 @@ NOP, NOP, NOP, NOP, ( unused ) 0 JP, ( RST 28 ) NOP, NOP, NOP, NOP, NOP, ( unused ) 0 JP, ( RST 30 ) -NOP, NOP, NOP, NOP, NOP, ( unused ) +0 A, 0 JP, ( 33, 2>R ) NOP, ( unused ) 0 JP, ( RST 38 ) diff --git a/blk/286 b/blk/286 index de29a29..9c11b0c 100644 --- a/blk/286 +++ b/blk/286 @@ -1,7 +1,4 @@ -CODE 2>R ( 0xa9 ) - DE POP, HL POP, - 17 BCALL, ( 17 == pushRS ) EXDEHL, 17 BCALL, -;CODE NOP, NOP, NOP, +ORG @ 0xb9 + HERE ! CODE (n) ( 0xbf, number literal ) ( Literal value to push to stack is next to (n) reference in the atom list. That is where IP is currently pointing. diff --git a/blk/288 b/blk/288 index 4475d60..fbd4b96 100644 --- a/blk/288 +++ b/blk/288 @@ -1,11 +1,14 @@ CODE >R - HL POP, - 17 BCALL, ( 17 == pushRS ) + HL POP, 17 BCALL, ( 17 == pushRS ) ;CODE CODE R> - 20 BCALL, ( 20 == popRS ) - HL PUSH, + 20 BCALL, ( 20 == popRS ) HL PUSH, ;CODE +CODE 2>R ( 0xa9 ) +PC ORG @ 0x35 + ! ( stable ABI JP ) + DE POP, HL POP, + 17 BCALL, ( 17 == pushRS ) EXDEHL, 17 BCALL, +;CODE NOP, NOP, NOP, CODE 2R> 20 BCALL, ( 20 == popRS ) EXDEHL, 20 BCALL, HL PUSH, DE PUSH, diff --git a/blk/397 b/blk/397 index 26160bf..d190732 100644 --- a/blk/397 +++ b/blk/397 @@ -1,6 +1,6 @@ ( Now we have "as late as possible" stuff. See B70 and B270. ) : _bchk DUP 0x7f + 0xff > IF LIT< br-ovfl (print) ABORT THEN ; -: DO 0xa9 ( 2>R ) , H@ ; IMMEDIATE +: DO 0x33 ( 2>R ) , H@ ; IMMEDIATE : LOOP 0x80 ( loop ) , H@ - _bchk , ; IMMEDIATE ( LEAVE is implemented in low xcomp ) : LITN 0xbf ( n ) , , ; diff --git a/blk/805 b/blk/805 index f303d73..dfa3049 100644 --- a/blk/805 +++ b/blk/805 @@ -12,4 +12,4 @@ JMPn, 0 A,, ( 1a, next ) 0 A, 0 A,, ( unused ) 0 A, 0 A,, ( unused ) 0 A, 0 A,, 0 A, 0 A, ( unused ) 0 A, 0 A,, ( unused ) -JMPn, 0 A,, ( 33, execute ) 0 A, 0 A, 0 A, 0 A,, ( unused ) +0 A, JMPn, 0 A,, ( 33, 2>R ) 0 A, 0 A, 0 A,, ( unused ) diff --git a/blk/807 b/blk/807 index af529d8..2822434 100644 --- a/blk/807 +++ b/blk/807 @@ -5,11 +5,8 @@ CODE (loop) ( 0x80 ) JNZ, L2 @ RPCs, ( branch ) ( don't branch ) BP 4 SUBxi, JMPs, L1 @ RPCs, -ORG @ 0xa3 + HERE ! -CODE 2>R ( 0xa9 ) - [BP] 4 POP[w]+, [BP] 2 POP[w]+, BP 4 ADDxi, -;CODE NOP, NOP, NOP, NOP, NOP, +ORG @ 0xb9 + HERE ! CODE (n) ( 0xbf, number literal ) DI DX MOVxx, DI [DI] MOVx[], DI PUSHx, DX INCx, DX INCx, -;CODE NOP, NOP, +;CODE NOP, NOP, NOP, NOP, diff --git a/blk/810 b/blk/810 index d191e2d..2077e0b 100644 --- a/blk/810 +++ b/blk/810 @@ -1,4 +1,4 @@ -lblexec BSET PC 0x36 - ORG @ 0x34 + ! ( DI -> wordref ) +lblexec BSET ( DI -> wordref ) AL [DI] MOVr[], DI INCx, ( PFA ) AL AL ORrr, IFZ, DI JMPr, THEN, ( native ) AL DECr, IFNZ, ( cell or does ) diff --git a/blk/813 b/blk/813 index 4bda302..590e9e1 100644 --- a/blk/813 +++ b/blk/813 @@ -7,10 +7,10 @@ CODE >R 1 chkPS, CODE R> [BP] 0 PUSH[w]+, BP DECx, BP DECx, ;CODE +CODE 2>R +PC 0x37 - ORG @ 0x35 + ! ( stable abi ) + [BP] 4 POP[w]+, [BP] 2 POP[w]+, BP 4 ADDxi, +;CODE CODE 2R> 2 chkPS, [BP] -2 PUSH[w]+, [BP] 0 PUSH[w]+, BP 4 SUBxi, ;CODE -CODE ROT ( a b c -- b c a ) 3 chkPS, - CX POPx, BX POPx, AX POPx, - BX PUSHx, CX PUSHx, AX PUSHx, -;CODE diff --git a/blk/814 b/blk/814 index 211ed6e..75b332a 100644 --- a/blk/814 +++ b/blk/814 @@ -1,3 +1,7 @@ +CODE ROT ( a b c -- b c a ) 3 chkPS, + CX POPx, BX POPx, AX POPx, + BX PUSHx, CX PUSHx, AX PUSHx, +;CODE CODE DUP 1 chkPS, AX POPx, AX PUSHx, AX PUSHx, ;CODE CODE ?DUP 1 chkPS, AX POPx, AX AX ORxx, AX PUSHx, IFNZ, AX PUSHx, THEN, ;CODE diff --git a/cvm/forth.bin b/cvm/forth.bin index f2e912933487c284c00cedb41de124483d781c65..8ab411fb02378c7b9882776e59ecb2657be2fa22 100644 GIT binary patch literal 5426 zcma)AZEREL6@KrHV>|x1`6^!<0h>VW8I~m=uYrmT1L(Flj@IgtU!mYDYFj(~zpEo2r%UdEVD1 z(Eb4_zW1E>ob#UVb1p&%aj#+AYplb|Q~t9ly5te7AVe7;DmXG_8bD}ka)J@y>P5BC z*Km?_qF6j*t`~Mu_2j`*L%~V23(VC|Fa)Q~1|aR>o?JDaww{~~H#>4Yd^p3o9%5^f zN0RY@Lb66Uge#XR5a&(|Wcl<&@M4Dz-b5}VUyS_WsC=o-3?_3ts>@pOLwubb=Rb$Vino9?3`zH>K76-w9R0ZQpI>@8%Z% zHtp)qBzVgfKf$fN{Po5C6y}fj^06%&_fuwbHr~tUc8fGStN;(6eSttAb~MSOU~p<| zI-fOZv&r{dUcR^FyGb01_e=A44vn9h9Hkkp?PPE3;P0;14idF@g!t&_XyqdumeB67 zg!bg}2d%yWU9mUy=yhK%+8=@qT1m`4oYP_=W~D=32@65^U^16fuuY8VF%cig<&x<_ zOTBP{=f%fyb;6;&uP>0Pw?^pN1^M1*r4w!l{1qTm+W-+(y2lVz;BJ@PRyydBU>G2| ztu%6!=e=TCrw+kWlj9S}QM=ZpFYAVOSD)ABfq!wpDl|g$L*Pro3HEu-U9}|a!B>Y* zO`5lKpY~A1L^PJk6?TYf?F-Fc6%)x^&IR#H!Vx?(b!u`3bSDwShr+^P_eP;%e-8}hFo_r`z`mOYOupb2>)iX68$or#5P(47t`4}>7WrjD(`-EK{^rC^|urN=65h z23)x!R)kNxqjl<^i_hWXfpjX9$!T(~s}VPJW_0+(35Lyp<$gh(o#1MQAO`=k z#JhmMsHu|{oS2|>i7VP1f{M_e8J?OR8#Uudx3nz`-J76SNwkWy(gPiOlTL5$7GY>J zhx41Zlfr{rI&t!mEhc8g@~R1Zg~u+M^r($GDA^~>qmXUD0i+2)ZWzxhB!2}iYSfQ> zF%bb3d56Nt2b$FmQ}&C$K^a%ssF)yr7|{45{9zaygHkk5UHgg|DPOxlDX*WEPEeOH z05r1$SzRU8OnblDKsxcJEY4{hU11Y1p-N`OA6Em?tf9fjRO@)80{#7@3L|FVaTP|M zMuk20Z>!L(D+T^sRzMkOejn{%w3@ja6Mrf{U$!gQS%#NHb@2S;xGX^@N-z&_v2dMLnWlz!Oq-)`MwLzmC6-GA?En zdf78r1TVtBnqV0M>nE1})Zo>ZkW@?~CfqqKFAQ9@D&9g(-O!4lx(=Sh`AECek(rIQ zk|{(gjglP$@XiVxal}L+b2yVr)XFC2(_9Wi`@nG#0zYz`!&U!UMNXX`*(?PbFbd#U zaYhNyY!4js+5-roh%~jd9qN!A-;6dBCpnu?ui9m#1snK~0RtDH*?>bpwbz&_Y zROilRQmH1GtK!W>>VR$sa2q@66|GNR73SFA4(Y6x1La@%gKNPvWwc(yL%oKI4JH}t z4Y;uZHN6|*PTTC-ux(a+xtc{_Nzv*9BT1eWdu?+t+b*v>08{x+wliRQ$7Z7P*4TFL z0o$S;)^0mZZ4kF*bICyljJLDjEyz}UY;1C7>W$;;Q6XvDUfZ>rMV;gEvKDeg9DHZ? z1|^ZX4MdI3dyo~+B@rbrqM*BIKeK8unzN#@6fAOT4HA1B4rZDJ>!6BJ4%piW7*&{) z*Y{;|&nF8E=Vwm1)5U7}v_{>U?9UdCZUpO+unkSWG0oxVK}REvqDW+t`JSzypg^j9 zU1p6EPqGyef@bkdI$wyU3+yosu8`x3i?jWh)pxuW{!ncIqxx9kU^0E&fQi+(>A$O- zatgN{`k^vYhk9F_^0qy)EP(L0a0Hdaz6zp8)k$XsP85!^&`RRD3MQy1x&TuR2r;RK z?l;Ko@YM4dL%0Qi$g<(U%&? zAEf8@15NvW=2q%6{)S}W%(7z)#Kbi>G4q;Ticn(x&w{zREG;

Zuv%$Xxpb48hZ5 zZ9Ah)<|2YK<}AJAb8V-@r*e|6cGhe=5{Z#~IJ0^52u3S=3?5 zN+C9zFzB`U%ZG}sk%^^{fEwpF}~(27i59hS$Kohy1H})uTi%km z?_ur8jdfeSxTyUDIID`dArBg5N&LOaL^3s@yVI52Ke%rwSY6EZ>8fmz?WlJX)9bHL zqpb_dQzlQ#?d}KSwcKx2I zltjm5#tnQc%MEY_r$#3xPngVdiv5qggv*Od?mNG%rA(Jh9j?bE;YCD$T+4ur*D|{F z4msyh?sqXkN$-7>YI05H73L7q*j;tIwuG-kF56$Oy1mQNh?vMFQt7TONMs7S0W;Xv zl{hW}t#u0Dq+hC1TNhgznYM?)#IDHCvw3L0tY5}>bAv2hrxq~kwZ_yI-i1Ibo788@ zJ}n7;*NF&Eo)Bl^~${64II}HpJ;S0ocR{RbT zv(klR4wJQz5;YhcDp@q!T6evL4>*>`4LfanD88~2_6nA;UOau@lkn!nZy_l-QY_AN znMs63ElmqhfU99MR%(TzA5xiU!VlHi^gl=7)E3G&wV(2hD;G~cb+hvl;s_b9SJaQY zXiNP{nVz$<;xV7(j zzHxZW;|5h=>dhr_%E9~yptEm4XFjh(y(b<1PF;DOxmU9!TygxL(D0e*u}q$s@OwC5 zXyn8zr{`dXDsRSqRrWgWq>hoP*5bMGiTfUYnj|ti(5p-MEMqsPXEWJa+23a+=CU@? z$bOB!pI#>oECEjp{+r_m7&DrwcAYN~mgnlw0(Dn2W&+pYlVUx}ea^WyB}14ZcI5HL zjd}4GrheZpdHYFu7oEp_k2};l=%A*`M5Efqlc_xRLQbAMs1E!sT>?@fRS5}kjL#X zO{Hr*)1S3cNRuC7;rzI<;*VoxJoeyAIG~G;1&+JKJCZ6U4mcsIgbWNhlpGEWY;N0q V0U!4tpWF?7eg*mo`da|n{tw~x9XJ30 literal 5418 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 diff --git a/cvm/xcomp.fs b/cvm/xcomp.fs index 8fb218d..d8f58c1 100644 --- a/cvm/xcomp.fs +++ b/cvm/xcomp.fs @@ -10,6 +10,8 @@ CREATE BIN( 0 , 270 LOAD ( xcomp overrides ) H@ ORG ! +ORG @ 0x33 + HERE ! +0 C, 0x04 C, ( 2>R ) ORG @ 0x3b + HERE ! ," EXIT" 0 , ( prev ) 4 C, @@ -21,13 +23,12 @@ ORG @ 0x5f + HERE ! 0x02 CODE (?br) ( 0x67 ) ORG @ 0x77 + HERE ! 0x03 CODE (loop) ( 0x80 ) -ORG @ 0xa3 + HERE ! -0x04 CODE 2>R ( 0xa9 ) ORG @ 0xb9 + HERE ! 0x05 CODE (n) ( 0xbf ) ORG @ 0xce + HERE ! 0x06 CODE (s) ( 0xd4 ) ( END OF STABLE ABI ) +0x04 CODE 2>R 0x07 CODE >R 0x08 CODE R> 0x09 CODE 2R> diff --git a/emul/Makefile b/emul/Makefile index b90b584..e66f0a9 100644 --- a/emul/Makefile +++ b/emul/Makefile @@ -7,7 +7,7 @@ BLKFS = $(CDIR)/blkfs .PHONY: all all: $(TARGETS) -forth: forth.c $(OBJS) $(CDIR)/blkfs +forth: forth.c $(OBJS) $(BLKFS) $(CC) forth.c $(OBJS) -lncurses -o $@ libz80/libz80.o: libz80/z80.c @@ -17,7 +17,7 @@ libz80/libz80.o: libz80/z80.c emul.o: emul.c forth.bin $(BLKFS) $(CC) -DFBIN_PATH=\"`pwd`/forth.bin\" -DBLKFS_PATH=\"`pwd`/$(BLKFS)\" -c -o emul.o emul.c -forth.bin: xcomp.fs $(STAGE) +forth.bin: xcomp.fs $(STAGE) $(BLKFS) $(CDIR)/stage < xcomp.fs > $@ $(BLKFS): $(STAGE)