Fortunately I had it saved off, so before I (and everyone else) loses it, I thought I'd put it up here. I'll do a little ASM lib with all this later.
I'll also extend this if/when I discover more commands, as there appears to be very little info about the esxDOS API
; ; NOTE: File paths use the slash character (‘/’) as directory separator (UNIX style) ; M_GETSETDRV equ $89 F_OPEN equ $9a F_CLOSE equ $9b F_READ equ $9d F_WRITE equ $9e F_SEEK equ $9f F_GET_DIR equ $a8 F_SET_DIR equ $a9 FA_READ equ $01 FA_APPEND equ $06 FA_OVERWRITE equ $0C ; Function: Detect if unit is ready ; Out: A = default drive (required for all file access) ; Carry flag will be set if error. GetSetDrive: xor a ; A=0, get the default drive rst $08 db M_GETSETDRV ld (DefaultDrive),a ret DefaultDrive db 0 ; Function: Open file ; In: IX = filename ; B = open mode ; A = Drive ; Out: A = file handle ; On error: Carry set ; A = 5 File not found ; A = 7 Name error - not 8.3? ; A = 11 Drive not found ; fOpen: ld a, (DefaultDrive) ; get drive we're on ld b, FA_READ ; b = open mode ld ix,FileName ; ix = Pointer to file name (ASCIIZ) rst $08 db F_OPEN ; open read mode ret ; Returns a file handler in 'A' register. ; Function: Read bytes from a file ; In: A = file handle ; ix = address to load into ; bc = number of bytes to read ; Out: Carry flag is set if read fails. fRead: ld ix, 16384 ; ix = address where to store what is read ld bc, 6912 ; bc = bytes to read ld a, filehandle ; a = the file handler rst $08 db F_READ ; read file ret ; Function: Write bytes to a file ; In: A = file handle ; ix = address to save from ; bc = number of bytes to write ; Out: Carry flag is set if write fails. fWrite: ld ix, 16384 ; ix = memory address to save from ld bc, 6912 ; bc = bytes to write ld a, handle ; a = file handler rst $08 db F_WRITE ; write file ret ; Function: Write bytes to a file ; In: A = file handle ; Out: Carry flag active if error when closing fClose: ld a, handle ; a = file handler rst $08 db F_CLOSE ret ; Function: Seek into file ; In: A = file handle ; L = mode: 0 - from start of file ; 1 - forward from current position ; 2 - back from current position ; BCDE = bytes to seek ; Out: BCDE = Current file pointer. (*does not return this yet) ; fSeek: ld a,handle ; file handle or a ; is it zero? ret z ; if so return ld l,0 ld bc,0 ld de,0 rst $08 db F_SEEK ret ; Function: SetDirectory ; In: A = Drive ; HL = pointer to zero terminated path string ("path",0) ; Out: carry set if error ; SetDir: ld a,(DefaultDrive) ; drive to change directory on ld hl,Path ; point to "path",0 to set rst $08 db F_SET_DIR ret ; Function: Get Directory ; In: A = Drive ; HL = pointer to where to STORE zero terminated path string ; Out: carry set if error ; GetDir: ld a,(DefaultDrive) ; drive to get current directory from ld hl,Path ; location to store path string in rst $08 db F_GET_DIR ret
3 comments:
A word of warning for those wandering here
The current ESXDOS API doesn't use IX this way any more
Ok its weirder than that
If ESXDOS is paged in use HL, if its not use IX
Or in practical terms - use IX from basic land use HL from dot commands
Great blog I enjjoyed reading
Post a Comment