Changes
<pre>
;; This example shows how to perform a directory of a disc
;; and extract the filenames.
;;
;; This code is public domain and can freely be used in your
;; own programs.
;;
;; Written by Kevin Thacker. 2002
;;------------------------------------------------------------------
;; firmware function to catalog a disc or cassette
.cas_catalog equ &bc9b
;; firmware function to disable text output
.txt_vdu_enable equ &bb54
;; firmware function to enable text output
.txt_vdu_disable equ &bb57
;; firmware function to output a character to the screen
.txt_output equ &bb5a
;; firmware function to find a RSX
.kl_find_command equ &bcd4
;;------------------------------------------------------------------
org &8000
nolist
;;------------------------------------------------------------------
;; find BIOS SET MESSAGE command
;; this is used to disable disc messages.
;; this is compatible with other DOSs that also provide this command
ld hl,cmd_bios_set_message
call kl_find_command
ret nc ;; if carry flag is clear, then command has not been found
;; command found
;; store address of command
ld (bios_set_message),hl
ld a,c
;; store "rom select" of command
ld (bios_set_message+2),a
;;------------------------------------------------------------------
;; do CAT
call fetch_directory
;; display files
call display_directory
ret
;;------------------------------------------------------------------
;; display files from data generated by CAS CATALOG function
.display_directory
ld hl,two_k_buffer
.dd
;; if marker is not &ff, then end of filename listing found
;; otherwise continue
ld a,(hl)
cp &ff
ret nz
inc hl
;; display name part of filename
ld b,8
.dd2
ld a,(hl)
and &7f
inc hl
call txt_output
djnz dd2
;; display seperation dot
ld a,"."
call txt_output
;; display extension part of filename
ld b,3
.dd3
ld a,(hl)
and &7f
inc hl
call txt_output
djnz dd3
;; skip file size in K
inc hl
inc hl
;; new line
ld a,10
call txt_output
ld a,13
call txt_output
jp dd
;;------------------------------------------------------------------
;; perform a CAT command
.fetch_directory
;; disable disc messages. Error messages will not be displayed.
ld a,&ff
rst 3 ;; KL FAR CALL
defw bios_set_message
;; disable text output
call txt_vdu_disable
ld de,two_k_buffer
;; initialise in case of an error
xor a
ld (de),a
;; do catalog
call cas_catalog
;; enable text output
call txt_vdu_enable
;; enable disc messages. Error messages will be displayed
ld a,0
rst 3 ;; KL FAR CALL
defw bios_set_message
ret
;;------------------------------------------------------------------
;; this is initialised when the "BIOS SET MESSAGE" RSX has been found.
.bios_set_message
defw 0 ;; address of function
defb 0 ;; "rom select" for function
.cmd_bios_set_message
defb 1+&80 ;; this is the "BIOS SET MESSAGE" RSX
;;------------------------------------------------------------------
;; used by CAS CATALOG function to store list of files in directory
.two_k_buffer equ $
</pre>
;; This example shows how to perform a directory of a disc
;; and extract the filenames.
;;
;; This code is public domain and can freely be used in your
;; own programs.
;;
;; Written by Kevin Thacker. 2002
;;------------------------------------------------------------------
;; firmware function to catalog a disc or cassette
.cas_catalog equ &bc9b
;; firmware function to disable text output
.txt_vdu_enable equ &bb54
;; firmware function to enable text output
.txt_vdu_disable equ &bb57
;; firmware function to output a character to the screen
.txt_output equ &bb5a
;; firmware function to find a RSX
.kl_find_command equ &bcd4
;;------------------------------------------------------------------
org &8000
nolist
;;------------------------------------------------------------------
;; find BIOS SET MESSAGE command
;; this is used to disable disc messages.
;; this is compatible with other DOSs that also provide this command
ld hl,cmd_bios_set_message
call kl_find_command
ret nc ;; if carry flag is clear, then command has not been found
;; command found
;; store address of command
ld (bios_set_message),hl
ld a,c
;; store "rom select" of command
ld (bios_set_message+2),a
;;------------------------------------------------------------------
;; do CAT
call fetch_directory
;; display files
call display_directory
ret
;;------------------------------------------------------------------
;; display files from data generated by CAS CATALOG function
.display_directory
ld hl,two_k_buffer
.dd
;; if marker is not &ff, then end of filename listing found
;; otherwise continue
ld a,(hl)
cp &ff
ret nz
inc hl
;; display name part of filename
ld b,8
.dd2
ld a,(hl)
and &7f
inc hl
call txt_output
djnz dd2
;; display seperation dot
ld a,"."
call txt_output
;; display extension part of filename
ld b,3
.dd3
ld a,(hl)
and &7f
inc hl
call txt_output
djnz dd3
;; skip file size in K
inc hl
inc hl
;; new line
ld a,10
call txt_output
ld a,13
call txt_output
jp dd
;;------------------------------------------------------------------
;; perform a CAT command
.fetch_directory
;; disable disc messages. Error messages will not be displayed.
ld a,&ff
rst 3 ;; KL FAR CALL
defw bios_set_message
;; disable text output
call txt_vdu_disable
ld de,two_k_buffer
;; initialise in case of an error
xor a
ld (de),a
;; do catalog
call cas_catalog
;; enable text output
call txt_vdu_enable
;; enable disc messages. Error messages will be displayed
ld a,0
rst 3 ;; KL FAR CALL
defw bios_set_message
ret
;;------------------------------------------------------------------
;; this is initialised when the "BIOS SET MESSAGE" RSX has been found.
.bios_set_message
defw 0 ;; address of function
defb 0 ;; "rom select" for function
.cmd_bios_set_message
defb 1+&80 ;; this is the "BIOS SET MESSAGE" RSX
;;------------------------------------------------------------------
;; used by CAS CATALOG function to store list of files in directory
.two_k_buffer equ $
</pre>