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)
57 $FORTH_END_CODE_WORD (TR-CMD)
63 $FORTH_END_WORD (TR-INIT)
69 256U* 0 0 2 (TR-CMD) ;S
70 $FORTH_END_WORD (TR-SEEK)
73 $FORTH_WORD (TR-SETSECTOR)
76 256U* 0 0 2 (TR-CMD) ;S
77 $FORTH_END_WORD (TR-SETSECTOR)
84 ;; (TR-CMD): ( 0 t_s buf cnt_5 -- )
85 >R LIT #FF AND SWAP LIT #FF AND 256U* +
86 0 SWAP R> LIT #0105 (TR-CMD)
88 $FORTH_END_WORD (TR-READ)
92 ;; ( num cnt addr -- )
94 ;; (TR-CMD): ( 0 t_s buf cnt_5 -- )
96 0 LIT 16 UM/MOD 256U* +
97 0 SWAP R> R> SWAP 0 MAX LIT 255 MIN 256U* LIT 5 + (TR-CMD)
99 $FORTH_END_WORD TR-SREAD
101 $FORTH_WORD TR-SWRITE
103 ;; ( num cnt addr -- )
105 ;; (TR-CMD): ( 0 t_s buf cnt_5 -- )
106 (TRDOS-R/O) @ TBRANCH tr_swrite_skip
108 0 LIT 16 UM/MOD 256U* +
109 0 SWAP R> R> SWAP 0 MAX LIT 255 MIN 256U* LIT 6 + (TR-CMD)
113 $FORTH_END_WORD TR-SWRITE
115 $FORTH_WORD (TR-HEADLOAD)
118 (TR-FINFO) LIT 16 ERASE
119 DUP -1 > OVER LIT 128 < AND 0BRANCH trheaderload0
120 256U* 0 0 LIT 8 (TR-CMD) BRANCH trheaderload1
125 $FORTH_END_WORD (TR-HEADLOAD)
127 $FORTH_WORD (TR-GET-LAST-FILEBUF)
129 ;; ( -- first_buf_num )
130 ;; first_buf_num == starting logical sector (for TR-SREAD)
131 LIT #5CEC C@ LIT 16 * LIT #5CEB C@ +
133 $FORTH_END_WORD (TR-GET-LAST-FILEBUF)
135 ;; used after (TR-HEADLOAD)
136 $FORTH_WORD (TR-GET-LAST-FSIZE)
141 $FORTH_END_WORD (TR-GET-LAST-FSIZE)
143 $FORTH_WORD (TR-FILEBUF)
145 ;; ( num -- first_buf_num )
146 ;; first_buf_num == starting logical sector (for TR-SREAD)
148 (TR-GET-LAST-FILEBUF)
150 $FORTH_END_WORD (TR-FILEBUF)
152 $FORTH_WORD (TR-FFIND)
154 ;; ( addr len -- num | -1 )
155 0 MAX LIT 9 MIN >R (TR-FINFO) R@ CMOVE
156 R> LIT #5D06 C! LIT #FF LIT 23838 C!
157 0 0 0 LIT 10 (TR-CMD) LIT 9 LIT #5D06 C!
158 LIT 23838 C@ DUP LIT 127 > 0BRANCH trffind0
162 $FORTH_END_WORD (TR-FFIND)
164 ;; print TR-DOS directory
172 DUP LIT 128 = TBRANCH tr_cat_exit
175 ;; check for end of directory
176 (TR-FINFO) C@ 0= TBRANCH tr_cat_exit
178 (TR-FINFO) LIT 8 XTYPE
180 LIT 46 XEMIT (TR-FINFO) LIT 8 + C@ XEMIT
182 SWAP 1+ DUP 3 EMIT8? - = 0BRANCH tr_cat_spaces
183 DROP 0 ENDCR BRANCH tr_cat_wrap_done
192 0BRANCH tr_cat_no_final_cr
196 $FORTH_END_WORD TR-CAT