Programming:Loading a file

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
;; This example shows the firmware functions used to load
;; a file with a AMSDOS header (a non-ASCII file)
;;
;; in this example, the file is called SCREEN.SCR
;; and is loaded to the default screen location &c000-&ffff

;; firmware function to open a file for reading
.cas_in_open equ &bc77
;; firmware function to read an entire file (must have a AMSDOS header)
;; the file must have been opened for reading
.cas_in_direct equ &bc83
;; firmware function to close a file opened for reading
.cas_in_close equ &bc7a

org &4000

call load_file
ret


.load_file
;; B = length of the filename in characters
ld b,end_filename-filename

;; HL = address of the start of the filename
ld hl,filename

;; DE = address of a 2k buffer
;; 
;; in disc mode: this buffer is not used when CAS IN DIRECT
;; firmware function is used, so it is safe to put it anywhere
;; you want.
ld de,0

;; firmware function to open a file for reading
call cas_in_open

;; cas_in_open returns:
;; if file was opened successfully:
;; - carry is true 
;; - HL contains address of the file's AMSDOS header
;; - DE contains the load address of the file (from the header)
;; - BC contains the length of the file (from the file header)
;; - A contains the file type (2 for binary files)

;; firmware function to load the entire file
;; this will work with files that have a AMSDOS header (ASCII
;; files do not have a header)

;; HL = load address

ld hl,&c000
;; read file
call cas_in_direct

;; firmware function to close a file opened for reading
call cas_in_close

ret


;; the filename to load
;; disc filenames are a maximum of 12 characters long
;; 8 characters for name, and 3 characters for extension
.filename
defb "SCREEN.SCR"
.end_filename