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