Programming:An example to write a file byte-by-byte

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
;; This example shows how to write a file byte-by-byte.
;;
;; This code can be used to write a headerless file,
;; or to write a file with your own header.

.cas_out_open equ &bc8c
.cas_out_close equ &bc8f
.cas_out_char equ &bc95

ld hl,&4000				;; start address of data to write (example)
ld bc,&4000				;; length of data to write (example)
push hl
push bc

;; open output file
ld b,end_filename-filename
ld hl,filename
ld de,two_k_buffer
call cas_out_open

;; at this point the file will be opened for output.
;; A header is *not* created or written to the output
;; file

pop bc
pop hl

;; HL = start address of data to write
;; BC = length of data to write

.next_byte
ld a,(hl)		;; read byte from memory
inc hl		;; increment point

;; write byte to output file
push bc
push hl
call cas_out_char
pop hl
pop bc

;; decrement count (BC = number of bytes remaining to write to
;; output file)
dec bc

;; BC = 0 -> finished writing
;; BC <> 0 -> not finished. write more bytes
ld a,b
or c
jr nz,next_byte

;; close the output file
call cas_out_close
ret

;;----------------------------------------------------------------
;; this is the filename of the output file

.filename
defb "datafile.bin"
.end_filename

;;----------------------------------------------------------------
;; this buffer is filled with data which will be written to the output
;; file

.two_k_buffer defs 2048