1
0
mirror of https://github.com/hsoft/collapseos.git synced 2024-11-26 17:48:05 +11:00

Compare commits

..

4 Commits

Author SHA1 Message Date
Virgil Dupras
f38de1c151 Introduce the notion of Extra words 2020-04-29 21:52:18 -04:00
Virgil Dupras
0044011f06 Move AT28 and TRS80 drivers to higher blocknos
I'm reserving the 100-200 range for non-bootstrapping needs.
2020-04-29 21:04:10 -04:00
Virgil Dupras
0cf26547ff Add words FLUSH and COPY 2020-04-29 20:21:18 -04:00
Virgil Dupras
581f04a4bc Keep stage1 bootstrap bin instead of stage 0
XPACKed source needing to be kept in bootstrap bin didn't make
much sense. With the removal of stripfc, it makes more sense to keep
the compiled form of stage 1 in repository as a bootstrap binary.

Also, rename it to forth.bin.
2020-04-29 19:38:43 -04:00
29 changed files with 69 additions and 42 deletions

View File

@ -3,12 +3,12 @@ MASTER INDEX
3 Usage 30 Dictionary 3 Usage 30 Dictionary
70 Implementation notes 100 Block editor 70 Implementation notes 100 Block editor
120 Linker 140 Addressed devices 120 Linker 140 Addressed devices
150 AT28 Driver 150 Extra words
200 Z80 assembler 260 Cross compilation 200 Z80 assembler 260 Cross compilation
280 Z80 boot code 350 ACIA driver 280 Z80 boot code 350 ACIA driver
370 SD Card driver 390 Inner core 370 SD Card driver 390 Inner core
420 Core words 420 Core words 480 AT28 Driver
490 TRS80 Drivers

View File

@ -1,6 +1,7 @@
Dictionary Dictionary
Be sure to read usage guide (B3) first. List of words defined in Inner core (B390), Core words (B420)
and Extra words (B150).
31 Glossary 34 Symbols 31 Glossary 34 Symbols
37 Entry management 40 Defining words 37 Entry management 40 Defining words

View File

@ -1,7 +1,7 @@
Entry management Entry management
(find) a -- a f Read at a and find it in dict. If found, '? x -- a f Find x it in dict. If found, f=1 and
f=1 and a = wordref. If not found, f=0 and a = wordref. If not found, f=0 and
a = string addr. a = string addr.
' x -- a Push addr of word x to a. If not found, ' x -- a Push addr of word x to a. If not found,
aborts. aborts.

View File

@ -1,6 +1,8 @@
Disk Disk
BLK> -- a Address of the current block variable. BLK> -- a Address of the current block variable.
COPY s d -- Copy contents of s block to d block.
FLUSH -- Write current block to disk if dirty.
LIST n -- Prints the contents of the block n on screen LIST n -- Prints the contents of the block n on screen
in the form of 16 lines of 64 columns. in the form of 16 lines of 64 columns.
LOAD n -- Interprets Forth code from block n LOAD n -- Interprets Forth code from block n

View File

@ -1,3 +1,4 @@
152 LOAD ( extras )
103 105 LOADR 103 105 LOADR
: BROWSE : BROWSE
@ -13,4 +14,3 @@
; ;

16
blk/150
View File

@ -1,6 +1,14 @@
AT28 Driver Extra words
Write to an AT28 EEPROM while making sure that proper timing The Core words (B420) section contains the absolute minimum
is followed and verify data integrity. needed to get a usable Forth interpreter with input buffer and
disk blocks access running. The goal here is to minimize the
binary size of a minimum Collapse OS install.
Load with "151 LOAD" Extra words are words you will most likely want because they
are generally useful. They are so useful that they are part
of the Dictionary (B30).
Some programs need them, so they will automatically LOAD them.
To that end, the loader is conditional: it aborts if extra
words are already present. Load with "152 LOAD".

3
blk/152 Normal file
View File

@ -0,0 +1,3 @@
'? CASE NOT [IF]
153 157 LOADR
[THEN] DROP ( from '? )

View File

@ -8,3 +8,4 @@
; IMMEDIATE ; IMMEDIATE
: ENDOF [COMPILE] ELSE ; IMMEDIATE : ENDOF [COMPILE] ELSE ; IMMEDIATE

View File

6
blk/155 Normal file
View File

@ -0,0 +1,6 @@
: FILL ( a n b -- )
SWAP 2 PICK + ( a b a+n ) ROT ( b a+n a ) DO ( b )
DUP I C!
LOOP
;

4
blk/156 Normal file
View File

@ -0,0 +1,4 @@
: EMPTY
LIT< _sys (find) NOT IF ABORT THEN
DUP HERE ! CURRENT ! ;

5
blk/157 Normal file
View File

@ -0,0 +1,5 @@
: WIPE BLK( 1024 0 FILL BLK!! ;
( src dst -- )
: COPY SWAP BLK@ BLK> ! BLK! ;

View File

@ -8,9 +8,9 @@
: LITS 34 , SCPY ; : LITS 34 , SCPY ;
: LIT< WORD LITS ; IMMEDIATE : LIT< WORD LITS ; IMMEDIATE
: LITA 36 , , ; : LITA 36 , , ;
: '? WORD (find) ;
: ' : '
WORD (find) (?br) [ 4 , ] EXIT '? (?br) [ 4 , ] EXIT
LIT< (wnf) (find) DROP EXECUTE LIT< (wnf) (find) DROP EXECUTE
; ;
: ['] ' LITA ; IMMEDIATE : ['] ' LITA ; IMMEDIATE

View File

@ -6,10 +6,5 @@
LOOP LOOP
2DROP 2DROP
; ;
: FILL ( a n b -- )
SWAP 2 PICK + ( a b a+n ) ROT ( b a+n a ) DO ( b )
DUP I C!
LOOP
;
: DELW 1- 0 SWAP C! ; : DELW 1- 0 SWAP C! ;
: PREV 3 - DUP @ - ; : PREV 3 - DUP @ - ;

View File

@ -11,6 +11,3 @@
WORD( HERE ! ( w ) WORD( HERE ! ( w )
PREV CURRENT ! PREV CURRENT !
; ;
: EMPTY
LIT< _sys (find) NOT IF ABORT THEN
DUP HERE ! CURRENT ! ;

View File

@ -2,10 +2,10 @@
BLK> @ BLK!* @ EXECUTE BLK> @ BLK!* @ EXECUTE
0 BLKDTY ! 0 BLKDTY !
; ;
: FLUSH BLKDTY @ IF BLK! THEN ;
: BLK@ ( n -- ) : BLK@ ( n -- )
FLUSH
DUP BLK> @ = IF DROP EXIT THEN DUP BLK> @ = IF DROP EXIT THEN
BLKDTY @ IF BLK! THEN
DUP BLK> ! BLK@* @ EXECUTE DUP BLK> ! BLK@* @ EXECUTE
; ;

View File

@ -1,4 +1,2 @@
( b1 b2 -- ) ( b1 b2 -- )
: LOADR 1+ SWAP DO I DUP . CRLF LOAD LOOP ; : LOADR 1+ SWAP DO I DUP . CRLF LOAD LOOP ;
: WIPE BLK( 1024 0 FILL BLK!! ;

6
blk/480 Normal file
View File

@ -0,0 +1,6 @@
AT28 Driver
Write to an AT28 EEPROM while making sure that proper timing
is followed and verify data integrity.
Load with "481 LOAD"

View File

View File

@ -4,5 +4,5 @@ Drivers for the TRS-80 keyboard, video and floppy. At the
moment, they are thin layer over the drivers provided by moment, they are thin layer over the drivers provided by
TRSDOS' SVC. TRSDOS' SVC.
Load the Z80 words with "162 LOAD" and the high level part Load the Z80 words with "492 LOAD" and the high level part
with "164 LOAD". with "494 LOAD".

View File

2
emul/.gitignore vendored
View File

@ -3,5 +3,5 @@
/stage2 /stage2
/forth /forth
/*-bin.h /*-bin.h
/stage1.bin /stage0.bin
/blkfs /blkfs

View File

@ -14,7 +14,10 @@ $(BLKPACK):
$(BIN2C): $(BLKPACK) $(BIN2C): $(BLKPACK)
$(BLKUNPACK): $(BLKPACK) $(BLKUNPACK): $(BLKPACK)
stage0-bin.h: $(BIN2C) stage0.bin: stage2 xcomp.fs
cat xcomp.fs | ./stage2 > stage0.bin
stage0-bin.h: stage0.bin $(BIN2C)
$(BIN2C) KERNEL < stage0.bin > $@ $(BIN2C) KERNEL < stage0.bin > $@
stage1: stage.c $(OBJS) stage0-bin.h stage1: stage.c $(OBJS) stage0-bin.h
@ -23,13 +26,11 @@ stage1: stage.c $(OBJS) stage0-bin.h
stage1dbg: stage.c $(OBJS) stage0-bin.h stage1dbg: stage.c $(OBJS) stage0-bin.h
$(CC) -DDEBUG stage.c $(OBJS) -o $@ $(CC) -DDEBUG stage.c $(OBJS) -o $@
stage1.bin: stage1.fs stage1 # not dependent on forth.bin to avoid circular deps.
./stage1 < stage1.fs > $@ forth-bin.h: $(BIN2C)
$(BIN2C) KERNEL < forth.bin > $@
stage1-bin.h: stage1.bin $(BIN2C) stage2: stage.c $(OBJS) forth-bin.h blkfs-bin.h
$(BIN2C) KERNEL < stage1.bin > $@
stage2: stage.c $(OBJS) stage1-bin.h blkfs-bin.h
$(CC) -DSTAGE2 stage.c $(OBJS) -o $@ $(CC) -DSTAGE2 stage.c $(OBJS) -o $@
blkfs: $(BLKPACK) blkfs: $(BLKPACK)
@ -38,7 +39,7 @@ blkfs: $(BLKPACK)
blkfs-bin.h: blkfs $(BIN2C) blkfs-bin.h: blkfs $(BIN2C)
$(BIN2C) BLKFS < blkfs > $@ $(BIN2C) BLKFS < blkfs > $@
forth: forth.c $(OBJS) stage1-bin.h blkfs-bin.h forth: forth.c $(OBJS) forth-bin.h blkfs-bin.h
$(CC) forth.c $(OBJS) -o $@ $(CC) forth.c $(OBJS) -o $@
libz80/libz80.o: libz80/z80.c libz80/libz80.o: libz80/z80.c
@ -50,8 +51,8 @@ emul.o: emul.c
.PHONY: updatebootstrap .PHONY: updatebootstrap
updatebootstrap: stage2 updatebootstrap: stage1 stage1.fs
cat xcomp.fs | ./stage2 > stage0.bin ./stage1 < stage1.fs > forth.bin
.PHONY: pack .PHONY: pack
pack: pack:

BIN
emul/forth.bin Normal file

Binary file not shown.

View File

@ -3,7 +3,7 @@
#include <unistd.h> #include <unistd.h>
#include <termios.h> #include <termios.h>
#include "emul.h" #include "emul.h"
#include "stage1-bin.h" #include "forth-bin.h"
#include "blkfs-bin.h" #include "blkfs-bin.h"
// in sync with glue.asm // in sync with glue.asm

View File

@ -3,7 +3,7 @@
#include <unistd.h> #include <unistd.h>
#include "emul.h" #include "emul.h"
#ifdef STAGE2 #ifdef STAGE2
#include "stage1-bin.h" #include "forth-bin.h"
#include "blkfs-bin.h" #include "blkfs-bin.h"
#else #else
#include "stage0-bin.h" #include "stage0-bin.h"

Binary file not shown.

View File

@ -46,7 +46,7 @@ Addressed devices are at B140. To know what you have to paste, open the loader
block (B142) and see what blocks it loads. For each of the blocks, copy/paste block (B142) and see what blocks it loads. For each of the blocks, copy/paste
the code in your interpreter. the code in your interpreter.
Do the same thing with the AT28 driver (B150) Do the same thing with the AT28 driver (B480)
If you're doing the real thing and not using the emulator, pasting so much code If you're doing the real thing and not using the emulator, pasting so much code
at once might freeze up the RC2014, so it is recommended that you use at once might freeze up the RC2014, so it is recommended that you use

View File

@ -12,7 +12,7 @@ CURRENT @ XCURRENT !
H@ 256 /MOD 2 PC! 2 PC! H@ 256 /MOD 2 PC! 2 PC!
0x3000 BIN( ! 0x3000 BIN( !
282 LOAD ( boot.z80 ) 282 LOAD ( boot.z80 )
162 LOAD ( trs80.z80 ) 492 LOAD ( trs80.z80 )
393 LOAD ( icore ) 393 LOAD ( icore )
(entry) _ (entry) _
( Update LATEST ) ( Update LATEST )