# File format3.asm 0000 ;Formats four CP/M disks 0000 ;Updated June 2019 to match improved z80_cbios3 0000 ;Writes E5h to 64 sectors on tracks 1 to 255 of each disk (track 0 for system). 0000 ;Uses calls to cbios, in memory at FA00h 0000 seldsk: equ 0fb5fh ;pass disk no. in c 0000 setdma: equ 0fb89h ;pass address in bc 0000 settrk: equ 0fb78h ;pass track in reg C 0000 setsec: equ 0fb7dh ;pass sector in reg c 0000 write: equ 0fbfdh ;write one CP/M sector to disk 0000 prmsg: equ 0fb8fh ;subroutine to write message 0000 conout: equ 0fb43h ;print a character 0000 monitor_warm_start: equ 046fh 0000 org 0800h 0800 31 48 09 ld sp,format_stack 0803 21 95 08 ld hl,format_string 0806 cd 8f fb call prmsg 0809 3e 00 ld a,00h ;starting disk 080b 32 90 08 ld (disk),a 080e 4f disk_loop: ld c,a ;CP/M disk a 080f cd 5f fb call seldsk 0812 3e 01 ld a,1 ;starting track (offset = 1) 0814 32 92 08 ld (track),a 0817 3e 00 track_loop: ld a,0 ;starting sector 0819 32 91 08 ld (sector),a 081c 21 a8 08 ld hl,directory_sector ;address of data to write 081f 22 93 08 ld (address),hl 0822 3a 92 08 ld a,(track) 0825 4f ld c,a ;CP/M track 0826 cd 78 fb call settrk 0829 3a 91 08 sector_loop: ld a,(sector) 082c 4f ld c,a ;CP/M sector 082d cd 7d fb call setsec 0830 ed 4b 93 08 ld bc,(address) ;memory location 0834 cd 89 fb call setdma 0837 cd fd fb call write 083a 3a 91 08 ld a,(sector) 083d fe 3f cp 63 083f ca 49 08 jp z,next_track 0842 3c inc a 0843 32 91 08 ld (sector),a 0846 c3 29 08 jp sector_loop 0849 3a 92 08 next_track: ld a,(track) 084c fe ff cp 255 084e ca 7e 08 jp z,next_disk 0851 3c inc a 0852 32 92 08 ld (track),a 0855 3e 2e ld a,2eh ;period character 0857 4f ld c,a 0858 cd 43 fb call conout 085b 3a a7 08 ld a,(char_count) 085e 3c inc a 085f fe 50 cp 80 0861 ca 6a 08 jp z,skip_1 0864 32 a7 08 ld (char_count),a 0867 c3 17 08 jp track_loop 086a 3e 00 skip_1: ld a,0 086c 32 a7 08 ld (char_count),a 086f 3e 0d ld a,0dh 0871 4f ld c,a 0872 cd 43 fb call conout 0875 3e 0a ld a,0ah 0877 4f ld c,a 0878 cd 43 fb call conout 087b c3 17 08 jp track_loop 087e 3a 90 08 next_disk: ld a,(disk) 0881 3c inc a 0882 fe 04 cp 4 0884 ca 8d 08 jp z,done 0887 32 90 08 ld (disk),a 088a c3 0e 08 jp disk_loop 088d c3 6f 04 done: jp monitor_warm_start 0890 00 disk: db 00h 0891 00 sector: db 00h 0892 00 track: db 00h 0893 00 00 address: dw 0000h 0895 0d 0a .. 0d 0a 00 format_string: defm 0dh,0ah,'Formatting...',0dh,0ah,0 08a7 00 char_count: db 00h 08a8 directory_sector: 08a8 0xe5... ds 128,0e5h ;byte for empty directory 0928 00... ds 32 ;stack space 0948 format_stack: 0948 end # End of file format3.asm 0948