From cbd9f035aecac29253c62716d913d16be6bdab3c Mon Sep 17 00:00:00 2001 From: Virgil Dupras Date: Wed, 9 Dec 2020 19:44:02 -0500 Subject: [PATCH] Add ~C!ERR A ~C! override can, if it wants, go put an error code in there, which ~AT28 does. This way, after a copy or xcomp process directly to EEPROM, one can verify whether all bytes were successfully written by checking whether "~C!ERR C@" is zero. --- blk.fs | 17 +++++++++++------ cvm/stage.bin | Bin 4935 -> 4953 bytes doc/impl.txt | 13 +++++++++---- 3 files changed, 20 insertions(+), 10 deletions(-) diff --git a/blk.fs b/blk.fs index 9d88b9e..1a7feb4 100644 --- a/blk.fs +++ b/blk.fs @@ -1078,6 +1078,7 @@ HERESTART [IF] [THEN] SYSVARS 0x04 + LD(i)HL, ( RAM+04 == HERE ) A XORr, SYSVARS 0x3e + LD(i)A, ( 3e == ~C! ) + SYSVARS 0x41 + LD(i)A, ( 41 == ~C!ERR ) DE BIN( @ 0x04 ( BOOT ) + LDd(i), JR, L1 FWR ( execute, B287 ) ( ----- 286 ) @@ -1689,7 +1690,7 @@ driver code. Load the low part with "353 LOAD", the high part with "390 LOAD" ( ----- 353 ) : RAM+ [ SYSVARS LITN ] + ; : BIN+ [ BIN( @ LITN ] + ; -: HERE 0x04 RAM+ ; +: HERE 0x04 RAM+ ; : ~C!ERR 0x41 RAM+ ; : CURRENT* 0x51 RAM+ ; : CURRENT CURRENT* @ ; : H@ HERE @ ; : FIND ( w -- a f ) CURRENT @ SWAP _find ; @@ -2159,14 +2160,18 @@ XCURRENT @ _xapply ORG @ 0x04 ( stable ABI BOOT ) + ! ':' X' _ 4 - C! ( give : its name ) '(' X' _ 4 - C! ( ----- 400 ) -( Write byte E at addr HL, assumed to be an AT28 EEPROM. - After that, poll repeatedly that address until writing is - complete. ) +( Write byte E at addr HL, assumed to be an AT28 EEPROM. After + that, poll repeatedly that address until writing is complete. + If last polled value is different than orig, set ~C!ERR ) (entry) ~AT28 ( warning: don't touch D register ) - (HL) E LDrr, E (HL) LDrr, ( poll ) BEGIN, + (HL) E LDrr, A E LDrr, ( orig ) EXAFAF', ( save ) + E (HL) LDrr, ( poll ) BEGIN, A (HL) LDrr, ( poll ) E CPr, ( same as old? ) E A LDrr, ( save old poll, Z preserved ) - JRNZ, AGAIN, RET, + JRNZ, AGAIN, + EXAFAF', ( orig ) E SUBr, ( equal? ) + IFNZ, SYSVARS 0x41 + ( ~C!ERR ) LD(i)A, THEN, + RET, ( ----- 401 ) Grid subsystem diff --git a/cvm/stage.bin b/cvm/stage.bin index 6827b77e1f7034e6086c15550ff67f416373f225..cb79ff7779cc9efd08d51cefbc585079d7512f10 100644 GIT binary patch literal 4953 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 literal 4935 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