ld bc,1024 ;maximum (for +3DOS) is actually
;64x13+13 = 845
ld (hl),0
ldir ;make sure at least first entry is
;zeroed
ld b,64 ;the number of entries in the
;buffer
ld c,1 ;include system files in the cata
;log
ld de,catbuff ;the location to be filled with the
;disk catalog
ld hl,stardstar ;the file name ("*.*")
call dos_catalog ;call the DOS entry
push af ;save flags and possible error num
;ber returned by DOS
pop hl
ld (dosret),hl ;put it where it can be seen from
; NextBASIC
ld c,b ;move number of files in catalog to
;low byte of BC
ld b,0 ;this will be returned in NextBASIC
;by the USR function
;
;If the above worked, then BC holds
;number of files in catalog, the
;"catbuff"
;will be filled with the alpha-
;numerically sorted catalog and the
;carry flag but
;in "dosret" will be set. This will
;be peeked from NextBASIC to check
;if all went well.
;
;Having made the call to DOS, it is
;now necessary to undo the ROM and
;RAM switch and put BASIC's stack
;back to where it was on entry.
;The following will achieve this.
di ;about to ROM/RAM switch so be
;careful
push bc ;save number of files
ld bc,port1 ;I/O address of horizontal ROM/RAM
;switch
ld a,(bankm) ;get current switch state
set 4,a ;move left to right (ROM 2 to ROM
;3)
and F8h ;also want RAM page 0
ld (bankm),a ;update the system variable (very
;important)
out (c),a ;make the switch
pop bc ;get back the saved number of files
;in catalog
ld sp,(staksto) ;put NextBASIC's stack back
ret ;return to NextBASIC, value in BC
;is returned to USR
stardstar:
defb "*.*",FFh ;the file name, must be terminated
;with FFh
dosret:
defw 0 ;a variable to be peeked from BASIC
;to see if it worked
As some of you may not have an assembler available, the following is a NextBASIC program that pokes the above code into memory, calls it, and then uses the value returned by the USR function and the contents of dosret to print a very simple catalog of the disk:
ZX Spectrum Next User Manual, 3rd Edition (ISBN 978-1-5272-5496-1), written and illustrated by Phoebus R. Dokos. Copyright © 2020-2024 Phoebus Dokos / SpecNext Ltd. Licensed under CC BY-NC-SA 4.0. This is a transcription and can contain errors; check any doubt against the printed page.