Difference between revisions of "Programming:An example to read a file byte-by-byte"
From CPCWiki - THE Amstrad CPC encyclopedia!
m |
m |
||
Line 35: | Line 35: | ||
;; read a char from the file, character is returned in A register | ;; read a char from the file, character is returned in A register | ||
.next_byte | .next_byte | ||
− | call cas_in_char | + | call cas_in_char |
− | jr | + | jr c,not_eof ;;due to Firmware description "...if the end of file was reached, then Carry and Zero are false." |
− | jr | + | |
+ | jr z,not_eof | ||
;; could be end of file | ;; could be end of file |
Latest revision as of 08:53, 21 June 2018
;; This example shows how to read a file byte by byte. ;; ;; A file without a header must be read this way, it can't be ;; read using CAS IN DIRECT (unless the in-memory header is patched) ;; ;; This example doesn't have any error checking. .cas_in_open equ &bc77 .cas_in_close equ &bc7a .cas_in_char equ &bc80 ld hl,&4000 ;; address to load file data to (example) push hl ;; open file for reading ld b,end_filename-filename ld hl,filename ld de,two_k_buffer call cas_in_open ;; If a file is opened without a header: ;; - the filetype will be ASCII (&16) ;; - the length and load address will be undefined. ;; ;; If a file is opened with a header, the ;; - the filetype will be taken from the header ;; - the length and load address will be taken from the header ;; ;; A file without a header can't be read with CAS IN DIRECT ;; and must be read using CAS IN CHAR. pop hl ;; read a char from the file, character is returned in A register .next_byte call cas_in_char jr c,not_eof ;;due to Firmware description "...if the end of file was reached, then Carry and Zero are false." jr z,not_eof ;; could be end of file ;; test for hard end of file byte cp &f jr nz,not_eof jr eof .not_eof ;; write byte to memory ld (hl),a inc hl jr next_byte .eof call cas_in_close ret ;;------------------------------------------------------------------- ;; name of the file to read .filename defb "datafile.bin" .end_filename ;;------------------------------------------------------------------- ;; this buffer is filled with data from the file .two_k_buffer defs 2048