Last active
April 28, 2023 00:39
-
-
Save ekipan/5691d14c17aed55041bdb4a2fb68e494 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| \ marker -- | |
| header save-buffers | |
| header empty-buffers header flush | |
| header update header buffer | |
| header block header list | |
| latest | |
| ( save each block in a separate | |
| prg file "b001" "b002" etc. ) | |
| header 's 's' c, '0' c, ':' c, | |
| header 'b 'b' , 0 , | |
| : "b000" ['] 'b 4 ; | |
| : "s0:b000" ['] 's 7 ; | |
| : path! ( b-) #10 /mod #10 /mod | |
| '0' + [ ' 'b 1+ ] literal c! | |
| '0' + [ ' 'b 2+ ] literal c! | |
| '0' + [ ' 'b 3 + ] literal c! ; | |
| ( in comments 'b' is a block index, | |
| 'i' a buffer index 0 1 2, and 'a' | |
| a buffer address $6800 $6c00 $7000 ) | |
| create abs 0 , 0 c, ( assigned blocks ) | |
| create dirty 0 , 0 c, ( need saved ) | |
| : >addr ( i-a) #10 lshift $6800 + ; | |
| : save-buf ( i-) | |
| dup dirty + c@ 0= IF drop exit THEN | |
| dup abs + c@ path! | |
| "s0:b000" $f $f open ioabort $f close | |
| dup >addr dup $400 + "b000" saveb | |
| 0 swap dirty + c! ; | |
| define save-buffers ( -) | |
| 0 save-buf 1 save-buf 2 save-buf ; | |
| define empty-buffers ( -) | |
| abs 3 0 fill dirty 3 0 fill ; | |
| define flush ( -) | |
| save-buffers empty-buffers ; | |
| ( always assign block 1 2 3 4 5 6 7 | |
| to buffer 1 2 0 1 2 0 1, to keep | |
| things simple. ) | |
| 0 value ab ( assigned block ) | |
| : buf ( -i) ab 3 mod ; | |
| : addr ( -a) buf >addr ; | |
| : diff? ( -f) buf abs + c@ ab <> ; | |
| : reassign ( -) | |
| buf save-buf ab buf abs + c! ; | |
| define update ( -) -1 buf dirty + c! ; | |
| define buffer ( b-a) | |
| to ab diff? IF reassign THEN addr ; | |
| define block ( b-a) | |
| to ab diff? IF reassign | |
| ab path! "b000" addr loadb 0= IF | |
| addr $400 0 fill THEN THEN addr ; | |
| define list ( b-) block $400 type ; | |
| to latest |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment