1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ;; low-level TR-DOS words
3 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
5 $FORTH_CONST (TR-FINFO) #5CDD
6 $FORTH_VAR (TRDOS-R/O) 0
8 $FORTH_CODE_WORD (TR-CMD)
38 $FORTH_END_CODE_WORD (TR-CMD)
44 $FORTH_END_WORD (TR-INIT)
50 256U* 0 0 2 (TR-CMD) ;S
51 $FORTH_END_WORD (TR-SEEK)
54 $FORTH_WORD (TR-SETSECTOR)
57 256U* 0 0 2 (TR-CMD) ;S
58 $FORTH_END_WORD (TR-SETSECTOR)
65 ;; (TR-CMD): ( 0 t_s buf cnt_5 -- )
66 >R LIT #FF AND SWAP LIT #FF AND 256U* +
67 0 SWAP R> LIT #0105 (TR-CMD)
69 $FORTH_END_WORD (TR-READ)
73 ;; ( num cnt addr -- )
75 ;; (TR-CMD): ( 0 t_s buf cnt_5 -- )
77 0 LIT 16 U/MOD 256U* +
78 0 SWAP R> R> SWAP 0 MAX LIT 255 MIN 256U* LIT 5 + (TR-CMD)
80 $FORTH_END_WORD TR-SREAD
84 ;; ( num cnt addr -- )
86 ;; (TR-CMD): ( 0 t_s buf cnt_5 -- )
87 (TRDOS-R/O) @ TBRANCH tr_swrite_skip
89 0 LIT 16 U/MOD 256U* +
90 0 SWAP R> R> SWAP 0 MAX LIT 255 MIN 256U* LIT 6 + (TR-CMD)
94 $FORTH_END_WORD TR-SWRITE
96 $FORTH_WORD (TR-HEADLOAD)
99 (TR-FINFO) LIT 16 ERASE
100 DUP -1 > OVER LIT 128 < AND 0BRANCH trheaderload0
101 256U* 0 0 LIT 8 (TR-CMD) BRANCH trheaderload1
106 $FORTH_END_WORD (TR-HEADLOAD)
108 $FORTH_WORD (TR-GET-LAST-FILEBUF)
110 ;; ( -- first_buf_num )
111 ;; first_buf_num == starting logical sector (for TR-SREAD)
112 LIT #5CEC C@ LIT 16 * LIT #5CEB C@ +
114 $FORTH_END_WORD (TR-GET-LAST-FILEBUF)
116 ;; used after (TR-HEADLOAD)
117 $FORTH_WORD (TR-GET-LAST-FSIZE)
122 $FORTH_END_WORD (TR-GET-LAST-FSIZE)
124 $FORTH_WORD (TR-FILEBUF)
126 ;; ( num -- first_buf_num )
127 ;; first_buf_num == starting logical sector (for TR-SREAD)
129 (TR-GET-LAST-FILEBUF)
131 $FORTH_END_WORD (TR-FILEBUF)
133 $FORTH_WORD (TR-FFIND)
135 ;; ( addr len -- num | -1 )
136 0 MAX LIT 9 MIN >R (TR-FINFO) R@ CMOVE
137 R> LIT #5D06 C! LIT #FF LIT 23838 C!
138 0 0 0 LIT 10 (TR-CMD) LIT 9 LIT #5D06 C!
139 LIT 23838 C@ dup LIT 127 > 0BRANCH trffind0
143 $FORTH_END_WORD (TR-FFIND)
145 ;; print TR-DOS directory
153 DUP LIT 128 = TBRANCH tr_cat_exit
156 ;; check for end of directory
157 (TR-FINFO) C@ 0= TBRANCH tr_cat_exit
159 (TR-FINFO) LIT 8 XTYPE
161 LIT 46 XEMIT (TR-FINFO) LIT 8 + C@ XEMIT
163 SWAP 1+ DUP 3 = 0BRANCH tr_cat_spaces
164 DROP 0 CR BRANCH tr_cat_wrap_done
173 0BRANCH tr_cat_no_final_cr
177 $FORTH_END_WORD (TR-CAT)