From 6fab30b1648b74ed74b0d737a8367a1fb4a6461b Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Sun, 5 Jul 2020 22:35:54 -0400 Subject: [PATCH] z80: inline lblfind's routine into _find word --- blk/282 | 2 +- blk/291 | 12 ++++++------ blk/292 | 6 +++--- blk/294 | 13 ++++++------- blk/295 | 17 +++++++---------- blk/296 | 6 ------ blk/297 | 4 +--- blk/330 | 15 --------------- 8 files changed, 24 insertions(+), 51 deletions(-) delete mode 100644 blk/296 delete mode 100644 blk/330 diff --git a/blk/282 b/blk/282 index 844f5ad..02c092c 100644 --- a/blk/282 +++ b/blk/282 @@ -1 +1 @@ -VARIABLE lblofl VARIABLE lblexec VARIABLE lblfind +VARIABLE lblofl VARIABLE lblexec diff --git a/blk/291 b/blk/291 index bb36291..f6b1bc1 100644 --- a/blk/291 +++ b/blk/291 @@ -1,12 +1,12 @@ -lblfind BSET -( Find the entry corresponding to word name where (HL) points - to in dictionary having its tip at DE and sets DE to point - to that entry. Z if found, NZ if not. ) - HL PUSH, +( Native words ) +H@ 4 + XCURRENT ! ( make next CODE have 0 prev field ) +CODE _find ( cur w -- a f ) + HL POP, ( w ) DE POP, ( cur ) chkPS, + HL PUSH, ( --> lvl 1 ) ( First, figure out string len ) A (HL) LDrr, A ORr, ( special case. zero len? we never find anything. ) - IFNZ, ( fail-B296 ) + IFZ, PUSH0, JPNEXT, THEN, ( Let's do something weird: We'll hold HL by the *tail*. Because of our dict structure and because we know our lengths, it's easier to compare starting from the end. ) diff --git a/blk/292 b/blk/292 index 95c70da..54e671c 100644 --- a/blk/292 +++ b/blk/292 @@ -1,7 +1,7 @@ - BEGIN, ( inner ) + BEGIN, ( loop ) ( DE is a wordref, first step, do our len correspond? ) - HL PUSH, ( --> lvl 1 ) - DE PUSH, ( --> lvl 2 ) + HL PUSH, ( --> lvl 2 ) + DE PUSH, ( --> lvl 3 ) DE DECd, LDA(DE), 0x7f ANDi, ( remove IMMEDIATE flag ) diff --git a/blk/294 b/blk/294 index 16b6875..815ebc5 100644 --- a/blk/294 +++ b/blk/294 @@ -1,16 +1,15 @@ ( At this point, Z is set if we have a match. In all cases, we want to pop HL and DE ) - DE POP, ( <-- lvl 2 ) - HL POP, ( <-- lvl 1 ) - JRZ, L2 FWR ( end-B296, match? we're done! ) + DE POP, ( <-- lvl 3 ) + IFZ, ( match, we're done! ) + HL POP, HL POP, ( <-- lvl 1-2 ) DE PUSH, PUSH1, + JPNEXT, + THEN, ( no match, go to prev and continue ) - HL PUSH, ( --> lvl 1 ) DE DECd, DE DECd, DE DECd, ( prev field ) - DE PUSH, ( --> lvl 2 ) + DE PUSH, ( --> lvl 3 ) EXDEHL, LDDE(HL), - - ( cont. ) diff --git a/blk/295 b/blk/295 index 35e1ffb..24acf7d 100644 --- a/blk/295 +++ b/blk/295 @@ -1,16 +1,13 @@ ( DE contains prev offset ) - HL POP, ( <-- lvl 2 ) - ( HL is prev field's addr. Is offset zero? ) - DEZ, - IFNZ, + HL POP, ( <-- lvl 3, prev field ) + DEZ, IFNZ, ( offset not zero ) ( get absolute addr from offset ) ( carry cleared from "or e" ) DE SBCHLd, EXDEHL, ( result in DE ) THEN, - HL POP, ( <-- lvl 1 ) - JRNZ, AGAIN, ( inner-B292, try to match again ) - ( Z set? end of dict, unset Z ) - - - ( cont. ) + HL POP, ( <-- lvl 2 ) + JRNZ, AGAIN, ( loop-B292, try to match again ) + ( Z set? end of dict, not found. "w" already on PSP TOS ) + PUSH0, +;CODE diff --git a/blk/296 b/blk/296 deleted file mode 100644 index 2e87d90..0000000 --- a/blk/296 +++ /dev/null @@ -1,6 +0,0 @@ - THEN, ( zero length check, B291 ) - A XORr, - A INCr, - L2 FSET ( end ) - HL POP, - RET, diff --git a/blk/297 b/blk/297 index d54ce12..da06ddb 100644 --- a/blk/297 +++ b/blk/297 @@ -1,6 +1,4 @@ -( Native words ) -H@ 4 + XCURRENT ! ( make next CODE have 0 prev field ) -CODE (br) ( TODO: move with other native words ) +CODE (br) L1 BSET ( used in ?br and loop ) PC ORG @ 0x3d + ! ( stable ABI JP ) E 0 IY+ LDrIXY, D 1 IY+ LDrIXY, diff --git a/blk/330 b/blk/330 deleted file mode 100644 index f701161..0000000 --- a/blk/330 +++ /dev/null @@ -1,15 +0,0 @@ -CODE _find ( cur w -- a f ) - HL POP, ( w ) - DE POP, ( cur ) - chkPS, - lblfind @ CALL, - IFNZ, - ( not found ) - HL PUSH, - PUSH0, - JPNEXT, - THEN, - ( found ) - DE PUSH, - PUSH1, -;CODE