From c2c32bbed879d446c45c08c19260fcdc8c251cf0 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sun, 21 Jun 2020 13:09:51 -0400 Subject: [PATCH] pcat: properly handle IMMED flag in _find --- blk/750 | 2 +- blk/758 | 16 ++++++---------- blk/759 | 16 ---------------- blk/760 | 19 ++++++++----------- blk/761 | 20 ++++++++++++++++---- blk/762 | 11 +++++++++++ blk/763 | 4 ++++ blk/828 | 2 +- 8 files changed, 47 insertions(+), 43 deletions(-) delete mode 100644 blk/759 create mode 100644 blk/762 create mode 100644 blk/763 diff --git a/blk/750 b/blk/750 index 80836cc..69e4b00 100644 --- a/blk/750 +++ b/blk/750 @@ -1 +1 @@ -1 11 LOADR+ +1 13 LOADR+ diff --git a/blk/758 b/blk/758 index 762fc04..471e17a 100644 --- a/blk/758 +++ b/blk/758 @@ -1,10 +1,6 @@ -: MOVri, SWAP 0xb0 OR A, A, ; -: MOVxI, SWAP 0xb8 OR A, A,, ; -: MOVsx, 0x8e A, SWAP 3 LSHIFT OR 0xc0 OR A, ; -: MOVxm, 0x8b A, SWAP 3 LSHIFT 0x6 OR A, A,, ; -: INT, 0xcd A, A, ; -: ADDAXI, 0x05 A, A,, ; : ADDALi, 0x04 A, A, ; -: SUBxi, 0x83 A, SWAP 0xe8 OR A, A, ; -: ADDxi, 0x83 A, SWAP 0xc0 OR A, A, ; -: JMPr, 0xff A, 7 AND 0xe0 OR A, ; -: JMPf, ( seg off ) 0xea A, SPLITB A, A, A,, ; +: OPi CREATE C, DOES> C@ A, A, ; +0x04 OPi ADDALi, 0x24 OPi ANDALi, +0xcd OPi INT, +: OPI CREATE C, DOES> C@ A, A,, ; +0x05 OPI ADDAXI, 0x25 OPI ANDAXI, + diff --git a/blk/759 b/blk/759 deleted file mode 100644 index 5625538..0000000 --- a/blk/759 +++ /dev/null @@ -1,16 +0,0 @@ -( Place BEGIN, where you want to jump back and AGAIN after - a relative jump operator. Just like BSET and BWR. ) -: BEGIN, PC ; -: BSET PC SWAP ! ; -( same as BSET, but we need to write a placeholder ) -: FJR, PC 0 A, ; -: IFZ, JNZ, FJR, ; -: IFNZ, JZ, FJR, ; -: IFC, JNC, FJR, ; -: IFNC, JC, FJR, ; -: THEN, - DUP PC ( l l pc ) - -^ 1- ( l off ) - ( warning: l is a PC offset, not a mem addr! ) - SWAP ORG @ + BIN( @ - ( off addr ) - C! ; diff --git a/blk/760 b/blk/760 index 552aa71..16fa070 100644 --- a/blk/760 +++ b/blk/760 @@ -1,11 +1,8 @@ -: FWRs BSET 0 A, ; -: FSET @ THEN, ; -( : BREAK, FJR, 0x8000 OR ; -: BREAK?, DUP 0x8000 AND IF - 0x7fff AND 1 ALLOT THEN, -1 ALLOT - THEN ; ) -: RPCs, PC - 1- DUP 128 + 0xff > IF ABORT" PC ovfl" THEN A, ; -: RPCn, PC - 2- A,, ; -: AGAIN, ( BREAK?, ) RPCs, ; -( Use RPCx with appropriate JMP/CALL op. Example: - JMPs, 0x42 RPCs, or CALLn, 0x1234 RPCn, ) +: MOVri, SWAP 0xb0 OR A, A, ; +: MOVxI, SWAP 0xb8 OR A, A,, ; +: MOVsx, 0x8e A, SWAP 3 LSHIFT OR 0xc0 OR A, ; +: MOVxm, 0x8b A, SWAP 3 LSHIFT 0x6 OR A, A,, ; +: SUBxi, 0x83 A, SWAP 0xe8 OR A, A, ; +: ADDxi, 0x83 A, SWAP 0xc0 OR A, A, ; +: JMPr, 0xff A, 7 AND 0xe0 OR A, ; +: JMPf, ( seg off ) 0xea A, SPLITB A, A, A,, ; diff --git a/blk/761 b/blk/761 index bedee06..5625538 100644 --- a/blk/761 +++ b/blk/761 @@ -1,4 +1,16 @@ -: PUSHZ, CX 0 MOVxI, IFZ, CX INCx, THEN, CX PUSHx, ; -: CODE ( same as CREATE, but with native word ) - (entry) 0 ( native ) C, ; -: ;CODE JMPn, 0x1a ( next ) RPCn, ; +( Place BEGIN, where you want to jump back and AGAIN after + a relative jump operator. Just like BSET and BWR. ) +: BEGIN, PC ; +: BSET PC SWAP ! ; +( same as BSET, but we need to write a placeholder ) +: FJR, PC 0 A, ; +: IFZ, JNZ, FJR, ; +: IFNZ, JZ, FJR, ; +: IFC, JNC, FJR, ; +: IFNC, JC, FJR, ; +: THEN, + DUP PC ( l l pc ) + -^ 1- ( l off ) + ( warning: l is a PC offset, not a mem addr! ) + SWAP ORG @ + BIN( @ - ( off addr ) + C! ; diff --git a/blk/762 b/blk/762 new file mode 100644 index 0000000..552aa71 --- /dev/null +++ b/blk/762 @@ -0,0 +1,11 @@ +: FWRs BSET 0 A, ; +: FSET @ THEN, ; +( : BREAK, FJR, 0x8000 OR ; +: BREAK?, DUP 0x8000 AND IF + 0x7fff AND 1 ALLOT THEN, -1 ALLOT + THEN ; ) +: RPCs, PC - 1- DUP 128 + 0xff > IF ABORT" PC ovfl" THEN A, ; +: RPCn, PC - 2- A,, ; +: AGAIN, ( BREAK?, ) RPCs, ; +( Use RPCx with appropriate JMP/CALL op. Example: + JMPs, 0x42 RPCs, or CALLn, 0x1234 RPCn, ) diff --git a/blk/763 b/blk/763 new file mode 100644 index 0000000..bedee06 --- /dev/null +++ b/blk/763 @@ -0,0 +1,4 @@ +: PUSHZ, CX 0 MOVxI, IFZ, CX INCx, THEN, CX PUSHx, ; +: CODE ( same as CREATE, but with native word ) + (entry) 0 ( native ) C, ; +: ;CODE JMPn, 0x1a ( next ) RPCn, ; diff --git a/blk/828 b/blk/828 index 68c5f83..fa89bf0 100644 --- a/blk/828 +++ b/blk/828 @@ -4,7 +4,7 @@ CODE _find ( cur w -- a f ) SI INCx, ( first char ) AX AX XORxx, ( initial prev ) BEGIN, ( loop ) DI AX SUBxx, ( jump to prev wordref ) - AL [DI] -1 MOVr[]+, ( strlen ) + AL [DI] -1 MOVr[]+, 0x7f ANDALi, ( strlen ) CL AL CMPrr, IFZ, ( same len ) SI PUSHx, DI PUSHx, CX PUSHx, ( --> lvl 3 ) 3 ADDALi, ( header ) AH AH XORrr, DI AX SUBxx,