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.
This commit is contained in:
parent
dda80801d5
commit
cbd9f035ae
17
blk.fs
17
blk.fs
@ -1078,6 +1078,7 @@ HERESTART [IF]
|
|||||||
[THEN]
|
[THEN]
|
||||||
SYSVARS 0x04 + LD(i)HL, ( RAM+04 == HERE )
|
SYSVARS 0x04 + LD(i)HL, ( RAM+04 == HERE )
|
||||||
A XORr, SYSVARS 0x3e + LD(i)A, ( 3e == ~C! )
|
A XORr, SYSVARS 0x3e + LD(i)A, ( 3e == ~C! )
|
||||||
|
SYSVARS 0x41 + LD(i)A, ( 41 == ~C!ERR )
|
||||||
DE BIN( @ 0x04 ( BOOT ) + LDd(i),
|
DE BIN( @ 0x04 ( BOOT ) + LDd(i),
|
||||||
JR, L1 FWR ( execute, B287 )
|
JR, L1 FWR ( execute, B287 )
|
||||||
( ----- 286 )
|
( ----- 286 )
|
||||||
@ -1689,7 +1690,7 @@ driver code. Load the low part with "353 LOAD", the high part
|
|||||||
with "390 LOAD"
|
with "390 LOAD"
|
||||||
( ----- 353 )
|
( ----- 353 )
|
||||||
: RAM+ [ SYSVARS LITN ] + ; : BIN+ [ BIN( @ LITN ] + ;
|
: RAM+ [ SYSVARS LITN ] + ; : BIN+ [ BIN( @ LITN ] + ;
|
||||||
: HERE 0x04 RAM+ ;
|
: HERE 0x04 RAM+ ; : ~C!ERR 0x41 RAM+ ;
|
||||||
: CURRENT* 0x51 RAM+ ; : CURRENT CURRENT* @ ;
|
: CURRENT* 0x51 RAM+ ; : CURRENT CURRENT* @ ;
|
||||||
: H@ HERE @ ;
|
: H@ HERE @ ;
|
||||||
: FIND ( w -- a f ) CURRENT @ SWAP _find ;
|
: 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! ( give : its name )
|
||||||
'(' X' _ 4 - C!
|
'(' X' _ 4 - C!
|
||||||
( ----- 400 )
|
( ----- 400 )
|
||||||
( Write byte E at addr HL, assumed to be an AT28 EEPROM.
|
( Write byte E at addr HL, assumed to be an AT28 EEPROM. After
|
||||||
After that, poll repeatedly that address until writing is
|
that, poll repeatedly that address until writing is complete.
|
||||||
complete. )
|
If last polled value is different than orig, set ~C!ERR )
|
||||||
(entry) ~AT28 ( warning: don't touch D register )
|
(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? )
|
A (HL) LDrr, ( poll ) E CPr, ( same as old? )
|
||||||
E A LDrr, ( save old poll, Z preserved )
|
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 )
|
( ----- 401 )
|
||||||
Grid subsystem
|
Grid subsystem
|
||||||
|
|
||||||
|
BIN
cvm/stage.bin
BIN
cvm/stage.bin
Binary file not shown.
13
doc/impl.txt
13
doc/impl.txt
@ -160,9 +160,9 @@ Here's a list of them:
|
|||||||
|
|
||||||
SYSVARS FUTURE USES +3c BLK(*
|
SYSVARS FUTURE USES +3c BLK(*
|
||||||
+02 CURRENT +3e ~C!*
|
+02 CURRENT +3e ~C!*
|
||||||
+04 HERE +41 FUTURE USES
|
+04 HERE +41 ~C!ERR
|
||||||
+06 C<? +43 FUTURE USES
|
+06 C<? +42 FUTURE USES
|
||||||
+08 C<* override +45 FUTURE USES
|
+08 C<* override +43 FUTURE USES
|
||||||
+0a NL ialias +51 CURRENTPTR
|
+0a NL ialias +51 CURRENTPTR
|
||||||
+0c C<* +53 EMIT ialias
|
+0c C<* +53 EMIT ialias
|
||||||
+0e WORDBUF +55 KEY ialias
|
+0e WORDBUF +55 KEY ialias
|
||||||
@ -197,6 +197,10 @@ BLK* "Disk blocks" in usage.txt.
|
|||||||
the routine that writes a byte to memory and then returns.
|
the routine that writes a byte to memory and then returns.
|
||||||
Register usage is arch-dependent, see boot code for details.
|
Register usage is arch-dependent, see boot code for details.
|
||||||
|
|
||||||
|
~C!ERR: When an error happens during ~C! write overrides, sets
|
||||||
|
this byte to a nonzero value. Otherwise, stays at zero. Has to
|
||||||
|
be reset to zero manually after an error.
|
||||||
|
|
||||||
DRIVERS section is reserved for recipe-specific drivers.
|
DRIVERS section is reserved for recipe-specific drivers.
|
||||||
|
|
||||||
FUTURE USES section is unused for now.
|
FUTURE USES section is unused for now.
|
||||||
@ -214,7 +218,8 @@ very few things.
|
|||||||
2. Set CURRENT to value of LATEST field in stable ABI.
|
2. Set CURRENT to value of LATEST field in stable ABI.
|
||||||
3. Set HERE to HERESTART const if defined, to CURRENT other-
|
3. Set HERE to HERESTART const if defined, to CURRENT other-
|
||||||
wise.
|
wise.
|
||||||
4. Execute the word referred to by 0x04 (BOOT) in stable ABI.
|
4. Initialize ~C! and ~C!ERR to 0.
|
||||||
|
5. Execute the word referred to by 0x04 (BOOT) in stable ABI.
|
||||||
|
|
||||||
In a normal system, BOOT is in core words at B396 and does a
|
In a normal system, BOOT is in core words at B396 and does a
|
||||||
few things:
|
few things:
|
||||||
|
Loading…
Reference in New Issue
Block a user