1 
2 // automatically generated by m4 from headers in proto subdir
3 
4 
5 #ifndef __NEXTOS_ESXDOS_H__
6 #define __NEXTOS_ESXDOS_H__
7 
8 #include <arch.h>
9 #include <stdint.h>
10 #include <stddef.h>
11 #include <time.h>
12 
13 // extended sna load
14 // call first thing after sna loads, org >= 24576
15 
16 extern unsigned char extended_sna_load(unsigned char handle);
17 extern unsigned char extended_sna_load_fastcall(unsigned char handle) __z88dk_fastcall;
18 #define extended_sna_load(a) extended_sna_load_fastcall(a)
19 
20 
21 
22 /*
23    NextOS ESX API
24 
25    The interface to NextOS's implementation of the esxdos api
26    is kept separate from esxdos.h even though many functions
27    are aliases of each other.
28 
29    This is because the NextOS api adds several functions to the
30    original esxdos api and some functions in the esxdos api are
31    not documented so NextOS's implementation may not be the same.
32 
33    If you're using a NextOS machine, use these functions for the
34    esxdos api.  If you want to ensure things run on esxdos, use
35    the esxdos api version in esxdos.h.
36 
37    NOTE:  To use the esxdos api, ROM3 must be present in the bottom
38    16k and layer 2 write-only mode in the bottom 16k must be disabled.
39 */
40 
41 // FAST STREAMING DISK IO
42 
43 // 1. esx_disk_filemap        : find out how the file is distributed on disk
44 // 2. esx_stream_start        : prepare to load from one span on disk
45 // 3. esx_disk_stream_sectors : load whole sectors from the span
46 // 4. esx_disk_stream_bytes   : load bytes from the span (only use for last access to span)
47 // 5. esx_disk_stream_end     : terminate streaming from span
48 //
49 // No other esxdos calls allowed between steps 2-5
50 
51 struct esx_filemap_entry
52 {
53    // describes one span on disk
54 
55    uint32_t address;
56    uint16_t sectors;
57 };
58 
59 struct esx_filemap
60 {
61    uint8_t mapsz;
62    struct esx_filemap_entry *map;
63 };
64 
65 // the following four variables are filled in after a call to esx_disk_stream_start()
66 
67 extern unsigned char esx_stream_io_port;       // 1
68 extern unsigned char esx_stream_protocol;      // 2
69 
70 // the following two variables are updated by esx_disk_stream_sectors()
71 // and esx_disk_stream_bytes() but only for whole numbers of sectors read
72 
73 extern uint32_t esx_stream_card_address;       // 3
74 extern uint16_t esx_stream_sectors_remaining;  // 4
75 
76 extern unsigned char esx_disk_filemap(uint8_t handle,struct esx_filemap *fmap);
77 extern unsigned char esx_disk_filemap_callee(uint8_t handle,struct esx_filemap *fmap) __z88dk_callee;
78 #define esx_disk_filemap(a,b) esx_disk_filemap_callee(a,b)
79 
80 
81 extern unsigned char esx_disk_stream_start(const struct esx_filemap_entry *entry);
82 extern unsigned char esx_disk_stream_start_fastcall(const struct esx_filemap_entry *entry) __z88dk_fastcall;
83 #define esx_disk_stream_start(a) esx_disk_stream_start_fastcall(a)
84 
85 
86 extern void *esx_disk_stream_sectors(void *dst,uint8_t sectors);
87 extern void *esx_disk_stream_sectors_callee(void *dst,uint8_t sectors) __z88dk_callee;
88 #define esx_disk_stream_sectors(a,b) esx_disk_stream_sectors_callee(a,b)
89 
90 
91 extern void *esx_disk_stream_bytes(void *dst,uint16_t len);
92 extern void *esx_disk_stream_bytes_callee(void *dst,uint16_t len) __z88dk_callee;
93 #define esx_disk_stream_bytes(a,b) esx_disk_stream_bytes_callee(a,b)
94 
95 
96 extern unsigned char esx_disk_stream_end(void);
97 
98 
99 // TAP FILE EMULATION
100 
101 extern unsigned char esx_m_tapein_open(const char *filename);
102 extern unsigned char esx_m_tapein_open_fastcall(const char *filename) __z88dk_fastcall;
103 #define esx_m_tapein_open(a) esx_m_tapein_open_fastcall(a)
104 
105 
106 extern unsigned char esx_m_tapein_close(void);
107 
108 extern unsigned char esx_m_tapein_info(uint8_t *drive,const char *filename);
109 extern unsigned char esx_m_tapein_info_callee(uint8_t *drive,const char *filename) __z88dk_callee;
110 #define esx_m_tapein_info(a,b) esx_m_tapein_info_callee(a,b)
111 
112 
113 extern unsigned char esx_m_tapein_setpos(uint16_t block);
114 extern unsigned char esx_m_tapein_setpos_fastcall(uint16_t block) __z88dk_fastcall;
115 #define esx_m_tapein_setpos(a) esx_m_tapein_setpos_fastcall(a)
116 
117 
118 extern uint16_t esx_m_tapein_getpos(void);
119 
120 extern unsigned char esx_m_tapein_toggle_pause(void);
121 
122 
123 #define ESX_TAPEIN_FLAGS_PAUSE  1   // pause after loading blocks of size 6912 bytes (eg screen$)
124 #define ESX_TAPEIN_FLAGS_RETRO  2   // tape loading simulated as if from tape recorder
125 
126 extern unsigned char esx_m_tapein_flags(uint8_t flags);
127 extern unsigned char esx_m_tapein_flags_fastcall(uint8_t flags) __z88dk_fastcall;
128 #define esx_m_tapein_flags(a) esx_m_tapein_flags_fastcall(a)
129 
130 
131 
132 // open appends to file, trunc replaces or creates
133 
134 extern unsigned char esx_m_tapeout_open(const char *appendname);
135 extern unsigned char esx_m_tapeout_open_fastcall(const char *appendname) __z88dk_fastcall;
136 #define esx_m_tapeout_open(a) esx_m_tapeout_open_fastcall(a)
137 
138 
139 extern unsigned char esx_m_tapeout_trunc(const char *filename);
140 extern unsigned char esx_m_tapeout_trunc_fastcall(const char *filename) __z88dk_fastcall;
141 #define esx_m_tapeout_trunc(a) esx_m_tapeout_trunc_fastcall(a)
142 
143 
144 extern unsigned char esx_m_tapeout_info(uint8_t *drive,const char *filename);
145 extern unsigned char esx_m_tapeout_info_callee(uint8_t *drive,const char *filename) __z88dk_callee;
146 #define esx_m_tapeout_info(a,b) esx_m_tapeout_info_callee(a,b)
147 
148 
149 extern unsigned char esx_m_tapeout_close(void);
150 
151 
152 // DOT COMMANDS
153 
154 // must call from within a dot command
155 
156 typedef void (*esx_handler_t)(uint8_t error);
157 
158 // currently registered error handler (0 = none)
159 
160 extern esx_handler_t esx_errh;
161 
162 extern unsigned char esx_m_gethandle(void);
163 
164 extern esx_handler_t esx_m_errh(esx_handler_t error);
165 extern esx_handler_t esx_m_errh_fastcall(esx_handler_t error) __z88dk_fastcall;
166 #define esx_m_errh(a) esx_m_errh_fastcall(a)
167 
168 
169 
170 // must not call from within a dot command
171 
172 // execute dot command, return value is error if not zero
173 // geterr with non-zero error code, write as zero-terminated string in 33-byte buffer msg
174 
175 extern uint16_t esx_m_execcmd(char *cmdline);
176 extern uint16_t esx_m_execcmd_fastcall(char *cmdline) __z88dk_fastcall;
177 #define esx_m_execcmd(a) esx_m_execcmd_fastcall(a)
178 
179 
180 extern void esx_m_geterr(uint16_t error,char *msg);
181 extern void esx_m_geterr_callee(uint16_t error,char *msg) __z88dk_callee;
182 #define esx_m_geterr(a,b) esx_m_geterr_callee(a,b)
183 
184 
185 
186 // DRIVER API
187 
188 struct esx_drvapi
189 {
190    union
191    {
192       uint16_t bc;
193       struct
194       {
195          uint8_t driver;
196          uint8_t function;
197       }
198       call;
199    };
200 
201    uint16_t de;
202    uint16_t hl;
203 };
204 
205 extern unsigned char esx_m_drvapi(struct esx_drvapi *);
206 extern unsigned char esx_m_drvapi_fastcall(struct esx_drvapi *) __z88dk_fastcall;
207 #define esx_m_drvapi(a) esx_m_drvapi_fastcall(a)
208 
209 
210 
211 // MISCELLANEOUS
212 
213 #define ESX_DOSVERSION_ESXDOS     -1
214 #define ESX_DOSVERSION_NEXTOS_48K  0
215 
216 #define ESX_DOSVERSION_NEXTOS_MAJOR(v)  (((v)&0xff00)>>8)
217 #define ESX_DOSVERSION_NEXTOS_MINOR(v)  ((v)&0xff)
218 
219 extern uint16_t esx_m_dosversion(void);
220 
221 
222 extern unsigned char esx_m_getdrv(void);
223 
224 extern unsigned char esx_m_setdrv(unsigned char drive);
225 extern unsigned char esx_m_setdrv_fastcall(unsigned char drive) __z88dk_fastcall;
226 #define esx_m_setdrv(a) esx_m_setdrv_fastcall(a)
227 
228 
229 
230 #define ESX_CAPS_FAST_TRUNC  __esx_caps_fast_trunc
231 
232 extern unsigned char esx_m_setcaps(unsigned char caps);
233 extern unsigned char esx_m_setcaps_fastcall(unsigned char caps) __z88dk_fastcall;
234 #define esx_m_setcaps(a) esx_m_setcaps_fastcall(a)
235 
236 
237 
238 // time.h contains functions dealing with dos time
239 
240 extern unsigned char esx_m_getdate(struct dos_tm *);
241 extern unsigned char esx_m_getdate_fastcall(struct dos_tm *) __z88dk_fastcall;
242 #define esx_m_getdate(a) esx_m_getdate_fastcall(a)
243 
244 
245 
246 extern uint32_t esx_f_getfree(void);
247 
248 
249 // OPERATIONS ON DIRECTORIES
250 
251 #define ESX_PATHNAME_MAX __ESX_PATHNAME_MAX     // max pathname length in bytes including terminating 0, ~256 bytes
252 #define ESX_FILENAME_MAX __ESX_FILENAME_MAX     // max filename length in bytes not including terminating 0, ~12 bytes
253 #define ESX_FILENAME_LFN_MAX __ESX_FILENAME_LFN_MAX   // max lfn filename length in bytes not including terminating 0, ~260 bytes
254 
255 struct esx_p3_hdr
256 {
257    uint8_t  type;    // 0 = program, 1 = numeric array, 2 = char array, 3 = code
258    uint16_t length;
259    uint8_t  data[4];
260    uint8_t  unused;
261 };
262 
263 struct esx_dirent
264 {                                           // <byte>   attributes
265    uint8_t attr;                            // <asciiz> name
266    uint8_t name[ESX_FILENAME_MAX+1+8];      // <dword>  date-time
267 };                                          // <dword>  size
268 
269 struct esx_dirent_p3
270 {
271    uint8_t attr;
272    uint8_t name[ESX_FILENAME_MAX+1+8];
273    struct  esx_p3_hdr p3;
274 };
275 
276 struct esx_dirent_lfn
277 {                                           // <byte>   attributes
278    uint8_t attr;                            // <asciiz> name
279    uint8_t name[ESX_FILENAME_LFN_MAX+1+8];  // <dword>  date-time
280 };                                          // <dword>  size
281 
282 struct esx_dirent_lfn_p3
283 {
284    uint8_t attr;
285    uint8_t name[ESX_FILENAME_LFN_MAX+1+8];
286    struct  esx_p3_hdr p3;
287 };
288 
289 // slice dirent to access members following filename
290 
291 struct esx_dirent_slice
292 {
293    struct dos_tm time;   // time.h contains functions dealing with dos time
294    uint32_t      size;
295 };
296 
297 struct esx_dirent_slice_p3
298 {
299    struct dos_tm time;
300    uint32_t      size;
301    struct esx_p3_hdr p3;
302 };
303 
304 // opendir_ex modes
305 
306 #define ESX_DIR_USE_LFN     __esx_dir_use_lfn
307 #define ESX_DIR_USE_HEADER  __esx_dir_use_header
308 
309 extern unsigned char esx_f_opendir(const char *dirname);
310 extern unsigned char esx_f_opendir_fastcall(const char *dirname) __z88dk_fastcall;
311 #define esx_f_opendir(a) esx_f_opendir_fastcall(a)
312 
313 
314 extern unsigned char esx_f_opendir_ex(const char *dirname,uint8_t diruse);
315 extern unsigned char esx_f_opendir_ex_callee(const char *dirname,uint8_t diruse) __z88dk_callee;
316 #define esx_f_opendir_ex(a,b) esx_f_opendir_ex_callee(a,b)
317 
318 
319 extern unsigned char esx_f_closedir(unsigned char handle);
320 extern unsigned char esx_f_closedir_fastcall(unsigned char handle) __z88dk_fastcall;
321 #define esx_f_closedir(a) esx_f_closedir_fastcall(a)
322 
323 
324 
325 // file attributes
326 
327 #define ESX_DIR_A_RDO   __esx_dir_a_rdo     // read only
328 #define ESX_DIR_A_HID   __esx_dir_a_hid     // hide in normal dir listings
329 #define ESX_DIR_A_SYS   __esx_dir_a_sys     // system file (must not be physically moved)
330 #define ESX_DIR_A_VOL   __esx_dir_a_vol     // filename is a volume label
331 #define ESX_DIR_A_DIR   __esx_dir_a_dir     // directory
332 #define ESX_DIR_A_ARCH  __esx_dir_a_arch    // file has been modified since last backup
333 #define ESX_DIR_A_DEV   __esx_dir_a_dev     // device
334 #define ESX_DIR_A_RES   __esx_dir_a_res     // reserved
335 
336 extern unsigned char esx_f_readdir(unsigned char handle,void *esx_dirent);
337 extern unsigned char esx_f_readdir_callee(unsigned char handle,void *esx_dirent) __z88dk_callee;
338 #define esx_f_readdir(a,b) esx_f_readdir_callee(a,b)
339 
340 
341 extern void *esx_slice_dirent(void *esx_dirent) __preserves_regs(d,e,iyl,iyh);
342 extern void *esx_slice_dirent_fastcall(void *esx_dirent) __preserves_regs(d,e,iyl,iyh) __z88dk_fastcall;
343 #define esx_slice_dirent(a) esx_slice_dirent_fastcall(a)
344 
345 
346 
347 extern uint32_t esx_f_telldir(unsigned char handle);
348 extern uint32_t esx_f_telldir_fastcall(unsigned char handle) __z88dk_fastcall;
349 #define esx_f_telldir(a) esx_f_telldir_fastcall(a)
350 
351 
352 extern unsigned char esx_f_seekdir(unsigned char handle,uint32_t pos);
353 extern unsigned char esx_f_seekdir_callee(unsigned char handle,uint32_t pos) __z88dk_callee;
354 #define esx_f_seekdir(a,b) esx_f_seekdir_callee(a,b)
355 
356 
357 extern unsigned char esx_f_rewinddir(unsigned char handle);
358 
359 
360 extern unsigned char esx_f_getcwd(char *pathname);
361 extern unsigned char esx_f_getcwd_fastcall(char *pathname) __z88dk_fastcall;
362 #define esx_f_getcwd(a) esx_f_getcwd_fastcall(a)
363 
364 
365 extern unsigned char esx_f_getcwd_drive(unsigned char drive,char *pathname);
366 extern unsigned char esx_f_getcwd_drive_callee(unsigned char drive,char *pathname) __z88dk_callee;
367 #define esx_f_getcwd_drive(a,b) esx_f_getcwd_drive_callee(a,b)
368 
369 
370 
371 extern unsigned char esx_f_get_canonical_path(char *pathname,char *canonical);
372 extern unsigned char esx_f_get_canonical_path_callee(char *pathname,char *canonical) __z88dk_callee;
373 #define esx_f_get_canonical_path(a,b) esx_f_get_canonical_path_callee(a,b)
374 
375 
376 
377 extern unsigned char esx_f_chdir(const char *pathname);
378 extern unsigned char esx_f_chdir_fastcall(const char *pathname) __z88dk_fastcall;
379 #define esx_f_chdir(a) esx_f_chdir_fastcall(a)
380 
381 
382 
383 extern unsigned char esx_f_mkdir(const char *pathname);
384 extern unsigned char esx_f_mkdir_fastcall(const char *pathname) __z88dk_fastcall;
385 #define esx_f_mkdir(a) esx_f_mkdir_fastcall(a)
386 
387 
388 extern unsigned char esx_f_rmdir(const char *pathname);
389 extern unsigned char esx_f_rmdir_fastcall(const char *pathname) __z88dk_fastcall;
390 #define esx_f_rmdir(a) esx_f_rmdir_fastcall(a)
391 
392 
393 
394 // OPERATIONS ON FILES
395 
396 struct esx_stat
397 {
398    uint8_t       drive;
399    uint8_t       device;
400    uint8_t       attr;
401    struct dos_tm time;   // time.h contains functions dealing with dos time
402    uint32_t      size;
403 };
404 
405 // file open mode
406 
407 // at least one of:
408 
409 #define ESX_MODE_READ  __esx_mode_read
410 #define ESX_MODE_WRITE  __esx_mode_write
411 
412 #define ESX_MODE_R  __esx_mode_read
413 #define ESX_MODE_W  __esx_mode_write
414 #define ESX_MODE_RW  (__esx_mode_read | __esx_mode_write)
415 
416 // one of:
417 
418 #define ESX_MODE_OPEN_EXIST  __esx_mode_open_exist
419 #define ESX_MODE_OPEN_CREAT  __esx_mode_open_creat
420 #define ESX_MODE_OPEN_CREAT_NOEXIST  __esx_mode_creat_noexist
421 #define ESX_MODE_OPEN_CREAT_TRUNC  __esx_mode_creat_trunc
422 
423 #define ESX_MODE_USE_HEADER  __esx_mode_use_header
424 
425 extern unsigned char esx_f_open(const char *filename,unsigned char mode);
426 extern unsigned char esx_f_open_callee(const char *filename,unsigned char mode) __z88dk_callee;
427 #define esx_f_open(a,b) esx_f_open_callee(a,b)
428 
429 
430 extern unsigned char esx_f_open_p3(const char *filename,unsigned char mode,struct esx_p3_hdr *h);
431 extern unsigned char esx_f_open_p3_callee(const char *filename,unsigned char mode,struct esx_p3_hdr *h) __z88dk_callee;
432 #define esx_f_open_p3(a,b,c) esx_f_open_p3_callee(a,b,c)
433 
434 
435 extern unsigned char esx_f_close(unsigned char handle);
436 extern unsigned char esx_f_close_fastcall(unsigned char handle) __z88dk_fastcall;
437 #define esx_f_close(a) esx_f_close_fastcall(a)
438 
439 
440 
441 extern unsigned char esx_f_sync(unsigned char handle);
442 extern unsigned char esx_f_sync_fastcall(unsigned char handle) __z88dk_fastcall;
443 #define esx_f_sync(a) esx_f_sync_fastcall(a)
444 
445 
446 extern unsigned char esx_f_fstat(unsigned char handle,struct esx_stat *es);
447 extern unsigned char esx_f_fstat_callee(unsigned char handle,struct esx_stat *es) __z88dk_callee;
448 #define esx_f_fstat(a,b) esx_f_fstat_callee(a,b)
449 
450 
451 extern uint32_t esx_f_fgetpos(unsigned char handle);
452 extern uint32_t esx_f_fgetpos_fastcall(unsigned char handle) __z88dk_fastcall;
453 #define esx_f_fgetpos(a) esx_f_fgetpos_fastcall(a)
454 
455 
456 
457 #define ESX_SEEK_SET  __esx_seek_set
458 #define ESX_SEEK_FWD  __esx_seek_fwd
459 #define ESX_SEEK_BWD  __esx_seek_bwd
460 
461 extern uint32_t esx_f_seek(unsigned char handle,uint32_t distance,unsigned char whence);
462 extern uint32_t esx_f_seek_callee(unsigned char handle,uint32_t distance,unsigned char whence) __z88dk_callee;
463 #define esx_f_seek(a,b,c) esx_f_seek_callee(a,b,c)
464 
465 
466 extern uint16_t esx_f_read(unsigned char handle,void *dst,size_t nbytes);
467 extern uint16_t esx_f_read_callee(unsigned char handle,void *dst,size_t nbytes) __z88dk_callee;
468 #define esx_f_read(a,b,c) esx_f_read_callee(a,b,c)
469 
470 
471 extern uint16_t esx_f_write(unsigned char handle,void *src,size_t nbytes);
472 extern uint16_t esx_f_write_callee(unsigned char handle,void *src,size_t nbytes) __z88dk_callee;
473 #define esx_f_write(a,b,c) esx_f_write_callee(a,b,c)
474 
475 
476 
477 extern unsigned char esx_f_ftrunc(unsigned char handle,uint32_t size);
478 extern unsigned char esx_f_ftrunc_callee(unsigned char handle,uint32_t size) __z88dk_callee;
479 #define esx_f_ftrunc(a,b) esx_f_ftrunc_callee(a,b)
480 
481 
482 
483 // DIRECT OPERATIONS ON FILES BY FILENAME
484 
485 // chmod attr
486 
487 #define ESX_A_WRITE  __esx_a_write
488 #define ESX_A_READ  __esx_a_read
489 #define ESX_A_RDWR  __esx_a_rdwr
490 #define ESX_A_HIDDEN  __esx_a_hidden
491 #define ESX_A_SYSTEM  __esx_a_system
492 #define ESX_A_ARCH  __esx_a_arch
493 #define ESX_A_EXEC  __esx_a_exec
494 #define ESX_A_ALL  __esx_a_all
495 
496 extern unsigned char esx_f_chmod(const char *filename,uint8_t attr_mask,uint8_t attr);
497 extern unsigned char esx_f_chmod_callee(const char *filename,uint8_t attr_mask,uint8_t attr) __z88dk_callee;
498 #define esx_f_chmod(a,b,c) esx_f_chmod_callee(a,b,c)
499 
500 
501 extern unsigned char esx_f_rename(const char *old,const char *new);
502 extern unsigned char esx_f_rename_callee(const char *old,const char *new) __z88dk_callee;
503 #define esx_f_rename(a,b) esx_f_rename_callee(a,b)
504 
505 
506 extern unsigned char esx_f_stat(const char *filename,struct esx_stat *es);
507 extern unsigned char esx_f_stat_callee(const char *filename,struct esx_stat *es) __z88dk_callee;
508 #define esx_f_stat(a,b) esx_f_stat_callee(a,b)
509 
510 
511 extern unsigned char esx_f_trunc(const char *filename,uint32_t size);
512 extern unsigned char esx_f_trunc_callee(const char *filename,uint32_t size) __z88dk_callee;
513 #define esx_f_trunc(a,b) esx_f_trunc_callee(a,b)
514 
515 
516 extern unsigned char esx_f_unlink(const char *filename);
517 extern unsigned char esx_f_unlink_fastcall(const char *filename) __z88dk_fastcall;
518 #define esx_f_unlink(a) esx_f_unlink_fastcall(a)
519 
520 
521 
522 
523 // FUNCTIONS IMPORTED FROM NEXTZXOS
524 // require nextzxos 128k mode; this comes with some obligations
525 //
526 // 1. items in memory must be in main memory 0x4000 - 0xbfe0
527 // 2. the stack must be in main memory 0x4000 - 0xbfe0
528 // 3. page 10 must be present in mmu2 so that the system vars are present
529 
530 // IDE_SET_DRIVE
531 
532 // drive letter is character 'A'..'P'
533 
534 extern unsigned char esx_dos_get_drive(void);
535 
536 extern unsigned char esx_dos_set_drive(uint8_t drive);
537 extern unsigned char esx_dos_set_drive_fastcall(uint8_t drive) __z88dk_fastcall;
538 #define esx_dos_set_drive(a) esx_dos_set_drive_fastcall(a)
539 
540 
541 
542 // IDE_MODE
543 
544 struct esx_mode
545 {
546    union
547    {
548       uint16_t mode;
549       struct
550       {
551          uint8_t submode;      // 0=lores,1=ula,2=hires,3=hicol
552          uint8_t layer;        // 0,1,2
553       }
554       mode8;
555    };
556 
557    union
558    {
559       uint8_t attr;            // layer0,ula,hires,hicol
560       uint8_t ink;             // lores,layer2
561    };
562 
563    uint8_t paper;              // lores,layer2
564 
565    uint8_t flags;
566    uint8_t width;              // width of char in pixels 3-8
567 
568    uint8_t cols;               // printable columns
569    uint8_t rows;               // printable rows
570 };
571 
572 #define ESX_MODE_FLAG_REDUCED_HEIGHT  __nextos_mode_flag_reduced_height
573 #define ESX_MODE_FLAG_DOUBLE_WIDTH  __nextos_mode_flag_double_width
574 #define ESX_MODE_FLAG_DOUBLE_HEIGHT  __nextos_mode_flag_double_height
575 
576 #define ESX_MODE_SET_LAYER_0  __nextos_mode_set_layer_0
577 #define ESX_MODE_SET_LAYER_1_LORES  __nextos_mode_set_layer_1_lores
578 #define ESX_MODE_SET_LAYER_1_ULA  __nextos_mode_set_layer_1_ula
579 #define ESX_MODE_SET_LAYER_1_HIRES  __nextos_mode_set_layer_1_hires
580 #define ESX_MODE_SET_LAYER_1_HICOL  __nextos_mode_set_layer_1_hicol
581 #define ESX_MODE_SET_LAYER_2  __nextos_mode_set_layer_2
582 
583 // esx_mode structure does not have to be in main memory
584 
585 extern unsigned char esx_ide_mode_get(struct esx_mode *mode);
586 extern unsigned char esx_ide_mode_get_fastcall(struct esx_mode *mode) __z88dk_fastcall;
587 #define esx_ide_mode_get(a) esx_ide_mode_get_fastcall(a)
588 
589 
590 extern unsigned char esx_ide_mode_set(struct esx_mode *mode);
591 extern unsigned char esx_ide_mode_set_fastcall(struct esx_mode *mode) __z88dk_fastcall;
592 #define esx_ide_mode_set(a) esx_ide_mode_set_fastcall(a)
593 
594 
595 
596 // IDE_BANK
597 // you must ensure allocated pages are returned before program exit
598 
599 #define ESX_BANKTYPE_RAM     __nextos_rc_banktype_zx
600 #define ESX_BANKTYPE_DIVMMC  __nextos_rc_banktype_mmc
601 
602 extern unsigned char esx_ide_bank_total(unsigned char banktype);
603 extern unsigned char esx_ide_bank_total_fastcall(unsigned char banktype) __z88dk_fastcall;
604 #define esx_ide_bank_total(a) esx_ide_bank_total_fastcall(a)
605 
606 
607 extern unsigned char esx_ide_bank_avail(unsigned char banktype);
608 extern unsigned char esx_ide_bank_avail_fastcall(unsigned char banktype) __z88dk_fastcall;
609 #define esx_ide_bank_avail(a) esx_ide_bank_avail_fastcall(a)
610 
611 
612 
613 extern unsigned char esx_ide_bank_alloc(unsigned char banktype);
614 extern unsigned char esx_ide_bank_alloc_fastcall(unsigned char banktype) __z88dk_fastcall;
615 #define esx_ide_bank_alloc(a) esx_ide_bank_alloc_fastcall(a)
616 
617 
618 extern unsigned char esx_ide_bank_reserve(unsigned char banktype,unsigned char page);
619 extern unsigned char esx_ide_bank_reserve_callee(unsigned char banktype,unsigned char page) __z88dk_callee;
620 #define esx_ide_bank_reserve(a,b) esx_ide_bank_reserve_callee(a,b)
621 
622 
623 
624 extern unsigned char esx_ide_bank_free(unsigned char banktype,unsigned char page);
625 extern unsigned char esx_ide_bank_free_callee(unsigned char banktype,unsigned char page) __z88dk_callee;
626 #define esx_ide_bank_free(a,b) esx_ide_bank_free_callee(a,b)
627 
628 
629 
630 // DOS_CATALOG
631 
632 struct esx_cat_entry
633 {
634    char filename[8];           // left justified space filled
635    char extension[3];          // left justified space filled
636    uint16_t size;              // disk space in kB not file size
637 };
638 
639 struct esx_cat
640 {
641    uint8_t filter;             // (init) filter applied (set bits enable)
642    char *filename;             // (init) catalog match string 0xff terminated
643 
644    uint16_t dir_handle;        // (dos_catalog) for IDE_GET_LFN
645    uint8_t completed_sz;       // (dos_catalog) number of matched entries written in indices 1+ (0 = none)
646 
647    uint8_t cat_sz;             // (init) actual size of cat[] >= 2
648    struct esx_cat_entry cat[2];
649 };
650 
651 // filter bits indicate directory details included in catalog
652 
653 #define ESX_CAT_FILTER_SYSTEM  __nextos_cat_filter_system
654 #define ESX_CAT_FILTER_LFN  __nextos_cat_filter_lfn
655 #define ESX_CAT_FILTER_DIR  __nextos_cat_filter_dir
656 
657 // esx_cat structure must be in main memory
658 
659 extern unsigned char esx_dos_catalog(struct esx_cat *cat);
660 extern unsigned char esx_dos_catalog_fastcall(struct esx_cat *cat) __z88dk_fastcall;
661 #define esx_dos_catalog(a) esx_dos_catalog_fastcall(a)
662 
663 
664 extern unsigned char esx_dos_catalog_next(struct esx_cat *cat);
665 extern unsigned char esx_dos_catalog_next_fastcall(struct esx_cat *cat) __z88dk_fastcall;
666 #define esx_dos_catalog_next(a) esx_dos_catalog_next_fastcall(a)
667 
668 
669 
670 // IDE_GET_LFN (tightly coupled to dos_catalog)
671 
672 struct esx_lfn
673 {
674    struct esx_cat *cat;        // (init) associated dos_catalog structure
675 
676    char filename[ESX_FILENAME_LFN_MAX + 1];  // (get_lfn) long filename zero terminated
677 
678    struct dos_tm time;         // (get_lfn) time.h contains functions dealing with dos time
679    uint32_t size;              // (get_lfn) file size in bytes
680 };
681 
682 // esx_lfn structure must be in main memory
683 
684 extern unsigned char esx_ide_get_lfn(struct esx_lfn *dir,struct esx_cat_entry *query);
685 extern unsigned char esx_ide_get_lfn_callee(struct esx_lfn *dir,struct esx_cat_entry *query) __z88dk_callee;
686 #define esx_ide_get_lfn(a,b) esx_ide_get_lfn_callee(a,b)
687 
688 
689 
690 // IDE_BROWSER (system file dialog)
691 // Data in memory must lie below 0xc000
692 // ESX_BROWSERCAP_SYSCFG is reserved for the system
693 
694 #define ESX_BROWSERCAP_COPY  __nextos_browsercaps_copy
695 #define ESX_BROWSERCAP_RENAME  __nextos_browsercaps_rename
696 #define ESX_BROWSERCAP_MKDIR  __nextos_browsercaps_mkdir
697 #define ESX_BROWSERCAP_ERASE  __nextos_browsercaps_erase
698 #define ESX_BROWSERCAP_REMOUNT  __nextos_browsercaps_remount
699 #define ESX_BROWSERCAP_UNMOUNT  __nextos_browsercaps_unmount
700 #define ESX_BROWSERCAP_SYSCFG  __nextos_browsercaps_syscfg
701 
702 #define ESX_BROWSERCAP_NONE  __nextos_browsercaps_none
703 #define ESX_BROWSERCAP_ALL  __nextos_browsercaps_all
704 
705 extern unsigned char esx_ide_browser(uint8_t browsercaps,void *filetypes,char *help,char *dst_sfn,char *dst_lfn);
706 extern unsigned char esx_ide_browser_callee(uint8_t browsercaps,void *filetypes,char *help,char *dst_sfn,char *dst_lfn) __z88dk_callee;
707 #define esx_ide_browser(a,b,c,d,e) esx_ide_browser_callee(a,b,c,d,e)
708 
709 
710 
711 // PLUS 3 DOS UTILITIES (MAY BE MOVED LATER)
712 
713 // change string termination
714 
715 extern char *p3dos_cstr_to_pstr(char *s) __preserves_regs(d,e,iyl,iyh);
716 extern char *p3dos_cstr_to_pstr_fastcall(char *s) __preserves_regs(d,e,h,l,iyl,iyh) __z88dk_fastcall;
717 #define p3dos_cstr_to_pstr(a) p3dos_cstr_to_pstr_fastcall(a)
718 
719 
720 extern char *p3dos_pstr_to_cstr(char *s) __preserves_regs(d,e,iyl,iyh);
721 extern char *p3dos_pstr_to_cstr_fastcall(char *s) __preserves_regs(d,e,h,l,iyl,iyh) __z88dk_fastcall;
722 #define p3dos_pstr_to_cstr(a) p3dos_pstr_to_cstr_fastcall(a)
723 
724 
725 
726 extern unsigned char *p3dos_copy_cstr_to_pstr(char *pdst,const char *csrc);
727 extern unsigned char *p3dos_copy_cstr_to_pstr_callee(char *pdst,const char *csrc) __z88dk_callee;
728 #define p3dos_copy_cstr_to_pstr(a,b) p3dos_copy_cstr_to_pstr_callee(a,b)
729 
730 
731 extern unsigned char *p3dos_copy_pstr_to_cstr(char *cdst,const char *psrc);
732 extern unsigned char *p3dos_copy_pstr_to_cstr_callee(char *cdst,const char *psrc) __z88dk_callee;
733 #define p3dos_copy_pstr_to_cstr(a,b) p3dos_copy_pstr_to_cstr_callee(a,b)
734 
735 
736 
737 // convert cat name to 8.3 dos name
738 
739 extern char *p3dos_dosname_from_catname(char *dosname,const char *catname);
740 extern char *p3dos_dosname_from_catname_callee(char *dosname,const char *catname) __z88dk_callee;
741 #define p3dos_dosname_from_catname(a,b) p3dos_dosname_from_catname_callee(a,b)
742 
743 
744 
745 // convert between esx drive numbers and p3dos drive letters
746 
747 extern unsigned char p3dos_edrv_from_pdrv(unsigned char prdv) __preserves_regs(b,c,d,e);
748 extern unsigned char p3dos_edrv_from_pdrv_fastcall(unsigned char prdv) __preserves_regs(b,c,d,e,h) __z88dk_fastcall;
749 #define p3dos_edrv_from_pdrv(a) p3dos_edrv_from_pdrv_fastcall(a)
750 
751 
752 extern unsigned char p3dos_pdrv_from_edrv(unsigned char erdv) __preserves_regs(b,c,d,e);
753 extern unsigned char p3dos_pdrv_from_edrv_fastcall(unsigned char erdv) __preserves_regs(b,c,d,e,h) __z88dk_fastcall;
754 #define p3dos_pdrv_from_edrv(a) p3dos_pdrv_from_edrv_fastcall(a)
755 
756 
757 
758 
759 // ESX ERROR CODES
760 
761 #define ESX_OK  __ESX_OK                       // 0 OK 0:1
762 #define ESX_EOK  __ESX_EOK                     // O.K. ESXDOS, 0:1
763 #define ESX_ENONSENSE  __ESX_ENONSENSE         // Nonsense in ESXDOS, 0:1
764 #define ESX_ESTEND  __ESX_ESTEND               // Statement END error, 0:1
765 #define ESX_EWRTYPE  __ESX_EWRTYPE             // Wrong file TYPE, 0:1
766 #define ESX_ENOENT  __ESX_ENOENT               // No such FILE or DIR, 0:1
767 #define ESX_EIO  __ESX_EIO                     // I/O ERROR, 0:1
768 #define ESX_EINVAL  __ESX_EINVAL               // Invalid FILENAME, 0:1
769 #define ESX_EACCES  __ESX_EACCES               // Access DENIED, 0:1
770 #define ESX_ENOSPC  __ESX_ENOSPC               // Drive FULL, 0:1
771 #define ESX_ENXIO  __ESX_ENXIO                 // Invalid I/O REQUEST, 0:1
772 #define ESX_ENODRV  __ESX_ENODRV               // No such DRIVE, 0:1
773 #define ESX_ENFILE  __ESX_ENFILE               // Too many OPEN FILES, 0:1
774 #define ESX_EBADF  __ESX_EBADF                 // Bad file DESCRIPTOR, 0:1
775 #define ESX_ENODEV  __ESX_ENODEV               // No such DEVICE, 0:1
776 #define ESX_EOVERFLOW  __ESX_EOVERFLOW         // File pointer OVERFLOW, 0:1
777 #define ESX_EISDIR  __ESX_EISDIR               // Is a DIRECTORY, 0:1
778 #define ESX_ENOTDIR  __ESX_ENOTDIR             // Not a DIRECTORY, 0:1
779 #define ESX_EEXIST  __ESX_EEXIST               // File already EXISTS, 0:1
780 #define ESX_EPATH  __ESX_EPATH                 // Invalid PATH, 0:1
781 #define ESX_ENOSYS  __ESX_ENOSYS               // No SYS, 0:1
782 #define ESX_ENAMETOOLONG  __ESX_ENAMETOOLONG   // Path too LONG, 0:1
783 #define ESX_ENOCMD  __ESX_ENOCMD               // No such COMMAND, 0:1
784 #define ESX_EINUSE  __ESX_EINUSE               // File in USE, 0:1
785 #define ESX_ERDONLY  __ESX_ERDONLY             // File is READ ONLY, 0:1
786 #define ESX_EVERIFY  __ESX_EVERIFY             // Verify FAILED, 0:1
787 #define ESX_ELOADINGKO  __ESX_ELOADINGKO       // Loading .KO FAILED, 0:1
788 #define ESX_EDIRINUSE  __ESX_EDIRINUSE         // Directory NOT EMPTY, 0:1
789 #define ESX_EMAPRAMACTIVE  __ESX_EMAPRAMACTIVE // MAPRAM is ACTIVE, 0:1
790 #define ESX_EDRIVEBUSY  __ESX_EDRIVEBUSY       // Drive is BUSY, 0:1
791 #define ESX_EFSUNKNOWN  __ESX_EFSUNKNOWN       // Unknown FILESYSTEM, 0:1
792 #define ESX_EDEVICEBUSY  __ESX_EDEVICEBUSY     // Device is BUSY, 0:1
793 
794 #define ESX_EMAXCODE  __ESX_EMAXCODE           // Largest valid error code
795 
796 // original esxdos api
797 
798 #include <arch/zx/esxdos.h>
799 
800 #endif
801