; a program to make a file from the contents of memory ; ; to be used with cptomem ; cpm equ 0 prtmsg equ 9 open equ 15 close equ 16 write equ 21 create equ 22 setdma equ 26 sys equ 0005h fcb equ 005ch buffer equ 0800h ; org 100h ; ; set up stack and open file ; start lxi sp,stack lxi d,fcb mvi c,open call sys cpi 4 jnc make lxi d,exists ; file already exists mvi c,prtmsg call sys jmp cpm ; ; create the new file ; make lxi d,fcb mvi c,create call sys cpi 4 jc writef lxi d,cannot ; disk is full mvi c,prtmsg call sys jmp cpm ; ; get initial buffer address in h and record count in b ; writef lxi h,buffer mvi b,0 push b ; save record count and push h ; and buffer address on stack ; loop pop d ; get address in buffer push d mvi c,setdma ; and set DMA call sys lxi d,fcb mvi c,write ; write record call sys cpi 0 jz incrmt ; increment if write is OK ; ; disk is full ; lxi d,eom mvi c,prtmsg call sys lxi d,fcb mvi c,close call sys jmp cpm ; ; increment address in buffer and record number ; incrmt pop h lxi b,128 dad b pop b mov a,b cpi 255 jnz step lda buffer-4 dcr a sta buffer-4 mvi b,0 jmp next step inr b next push b ; stack record count push h ; and address lda buffer-4 ; check if last record cpi 0 ; is read jnz loop lda buffer-3 cmp b jnz loop ; ; last record has been read ; lxi d,endp mvi c,prtmsg call sys lxi d,fcb mvi c,close call sys jmp cpm ; cannot db 'cannot create file$' exists db 'file already exists$' eom db 'disk out of free space$' endp db 'copy completed$' ds 64 stack nop ; end start