From d041b91846bc8906206212ab118602c7df9f7f96 Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Fri, 22 May 2020 23:12:03 -0400 Subject: [PATCH] Optimize chkPS Use EXX instead of the stack for HL protection and remove all spurious uses of chkPS, I wanted to inline chkPS in next because of its "tight loop" status, but for reasons I don't understand, doing so breaks Collapse OS. Later... --- blk/285 | 4 ++-- blk/286 | 8 ++++---- blk/299 | 11 +++++++---- blk/310 | 1 - blk/312 | 1 - blk/322 | 1 - blk/323 | 1 - blk/324 | 1 - emul/forth.bin | Bin 6044 -> 6029 bytes 9 files changed, 13 insertions(+), 15 deletions(-) diff --git a/blk/285 b/blk/285 index 1bb3bce..79de6c2 100644 --- a/blk/285 +++ b/blk/285 @@ -1,11 +1,11 @@ CODE (?br) ( 0x67 ) - HL POPqq, chkPS, + HL POPqq, HLZ, JRZ, L2 BWR ( BR + 2. False, branch ) L1 BSET ( loop will jump here ) ( True, skip next 2 bytes and don't branch ) IY INCss, IY INCss, - JPNEXT, + JPNEXT, NOP, NOP, NOP, CODE (loop) ( 0x77 ) 0 IX+ INC(IXY+), IFZ, 1 IX+ INC(IXY+), THEN, ( I++ ) ( Jump if I <> I' ) diff --git a/blk/286 b/blk/286 index 2b35008..0a8a05e 100644 --- a/blk/286 +++ b/blk/286 @@ -1,11 +1,11 @@ CODE >R ( 0xa8 ) - HL POPqq, chkPS, + HL POPqq, 17 BCALL, ( 17 == pushRS ) -;CODE +;CODE NOP, NOP, NOP, CODE 2>R ( 0xb9 ) - DE POPqq, HL POPqq, chkPS, + DE POPqq, HL POPqq, 17 BCALL, ( 17 == pushRS ) EXDEHL, 17 BCALL, -;CODE +;CODE NOP, NOP, NOP, CODE R> ( 0xce ) 20 BCALL, ( 20 == popRS ) HL PUSHqq, diff --git a/blk/299 b/blk/299 index d547d8f..7563212 100644 --- a/blk/299 +++ b/blk/299 @@ -1,10 +1,13 @@ PC ORG @ 0x1e + ! ( chkPS ) - HL PUSHqq, +( Note that you only need to call this in words that push + back to PSP. If they don't, calling chkPS is redundant with + check in next ) + EXX, ( We have the return address for this very call on the stack - and protected registers. 4 - is to compensate that. ) - HL PS_ADDR 4 - LDddnn, + and protected registers. 2 - is to compensate that. ) + HL PS_ADDR 2 - LDddnn, SP SUBHLss, - HL POPqq, + EXX, CNC RETcc, ( PS_ADDR >= SP? good ) JR, L2 BWR ( abortUnderflow-B298 ) diff --git a/blk/310 b/blk/310 index 19cc92b..49003c9 100644 --- a/blk/310 +++ b/blk/310 @@ -1,6 +1,5 @@ CODE PICK HL POPqq, - chkPS, ( x2 ) L SLAr, H RLr, SP ADDHLss, diff --git a/blk/312 b/blk/312 index b2db2ee..d5d4528 100644 --- a/blk/312 +++ b/blk/312 @@ -2,7 +2,6 @@ CODE 2DROP HL POPqq, HL POPqq, - chkPS, ;CODE ( a b -- a b a b ) diff --git a/blk/322 b/blk/322 index 076a17c..e5c4f5e 100644 --- a/blk/322 +++ b/blk/322 @@ -1,7 +1,6 @@ CODE ! HL POPqq, DE POPqq, - chkPS, (HL) E LDrr, HL INCss, (HL) D LDrr, diff --git a/blk/323 b/blk/323 index 746d380..58fb98a 100644 --- a/blk/323 +++ b/blk/323 @@ -1,7 +1,6 @@ CODE C! HL POPqq, DE POPqq, - chkPS, (HL) E LDrr, ;CODE diff --git a/blk/324 b/blk/324 index 7e732d4..4234faa 100644 --- a/blk/324 +++ b/blk/324 @@ -1,7 +1,6 @@ CODE PC! BC POPqq, HL POPqq, - chkPS, L OUT(C)r, ;CODE diff --git a/emul/forth.bin b/emul/forth.bin index 11e79e1ec78dc8cf1d85eb16a9c529af7f3bc306..bb31f0309d5b04334213f16085a8ab0c4524dfb1 100644 GIT binary patch literal 6029 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 literal 6044 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