;;; ;;; MCFS2 Flash Card formatter ;;; By: Daniel Tufvesson 2017 ;;; ;;; ;;; Monitor routines ;;; mon_return: equ $C000 ; return to monitor mon_outchar: equ $C003 ; outpur char in a on console mon_pdata: equ $C009 ; print text string at x ended by $04 mon_out4hs: equ $C015 ; print 4 hex chars at x mon_pcrlf: equ $C021 ; print crlf page_register: equ $0002 ; I/O page select register ;;; ;;; Program begin here ;;; org $0100 jmp format txt_hdr: fcc "Header = " fcb $04 txt_alloc: fcc " Alloc = " fcb $04 txt_root: fcc " Root = " fcb $04 txt_error: fcc "Error " fcb $04 ;;; ;;; Program variables ;;; media_addr_3: rmb 1 media_addr_2: rmb 1 media_addr_1: rmb 1 media_addr_0: rmb 1 ;;; ;;; MCFS2 format routine ;;; format: jsr mon_pcrlf ldaa #$f0 staa page_register jsr fc_init beq *+5 jmp general_error ;;; Start of partition clr media_addr_3 clr media_addr_2 clr media_addr_1 clr media_addr_0 ;;; MCFS partition header sector ldx #txt_hdr jsr mon_pdata ldx #media_addr_1 jsr mon_out4hs jsr mon_pcrlf jsr clr_secbuf ldx #sector_buffer ldaa #'M ; "MCFS" staa vol_hdr+0 ldaa #'C staa vol_hdr+1 ldaa #'F staa vol_hdr+2 ldaa #'S staa vol_hdr+3 ldaa #$02 ; MCFS version $02 staa vol_ver ldx #$0000 ; Partition begin (this sector) stx vol_beg ldx #$ffff ; Partition end (last sector) stx vol_end ldx #$5555 ; Volume ID stx vol_id ldx #$0001 ; Sector allocation table begin stx vol_alloc_beg ldx #$0080 ; Sector allocation table end stx vol_alloc_end ldx #$0081 ; Root directory begin stx vol_root_beg ldx #$0088 ; Root directory end stx vol_root_end ldx #sector_buffer jsr fc_write_sector ; Write sector beq *+5 jmp general_error ;;; Allocation sectors ldx #txt_alloc jsr mon_pdata inc media_addr_0 ldx #media_addr_1 jsr mon_out4hs ;;; Allocation sector 1 (with 50 allocated sectors) jsr clr_secbuf clrb ldx #sector_buffer alloc_loop1: cmpb #138 bhi alloc_loop1_end inc ,x inx incb bra alloc_loop1 alloc_loop1_end: ldx #sector_buffer jsr fc_write_sector ;;; Remaining 127 allocation sectors jsr clr_secbuf inc media_addr_0 clrb alloc_loop2: cmpb #125 bhi alloc_loop2_end ldx #sector_buffer jsr fc_write_sector beq *+5 jmp general_error inc media_addr_0 incb bra alloc_loop2 alloc_loop2_end: ldaa #'- jsr mon_outchar ldaa #$20 jsr mon_outchar ldx #media_addr_1 jsr mon_out4hs jsr mon_pcrlf ;;; Root directory ldx #txt_root jsr mon_pdata inc media_addr_0 ldx #media_addr_1 jsr mon_out4hs jsr clr_secbuf ; Write root directory sector 1 ldx #sector_buffer jsr fc_write_sector inc media_addr_0 ; Write root directory sector 2 ldx #sector_buffer jsr fc_write_sector inc media_addr_0 ; Write root directory sector 3 ldx #sector_buffer jsr fc_write_sector inc media_addr_0 ; Write root directory sector 4 ldx #sector_buffer jsr fc_write_sector inc media_addr_0 ; Write root directory sector 5 ldx #sector_buffer jsr fc_write_sector inc media_addr_0 ; Write root directory sector 6 ldx #sector_buffer jsr fc_write_sector inc media_addr_0 ; Write root directory sector 7 ldx #sector_buffer jsr fc_write_sector inc media_addr_0 ; Write root directory sector 8 ldx #sector_buffer jsr fc_write_sector beq *+5 jmp general_error ldaa #'- jsr mon_outchar ldaa #$20 jsr mon_outchar ldx #media_addr_1 jsr mon_out4hs jsr mon_pcrlf jmp mon_return general_error: ldx #txt_error jsr mon_pdata jsr mon_pcrlf jmp mon_return ;;; ;;; Clear RAM sector buffer ;;; clr_secbuf: ldx #sector_buffer clr_secbuf_loop: cpx #sector_buffer+512 bhi clr_secbuf_end clr ,x inx bra clr_secbuf_loop clr_secbuf_end: rts ;;; ;;; Sector buffer ;;; org $1000 sector_buffer: rmb 512 ;;; ;;; Volume header ;;; 512 bytes ;;; org sector_buffer vol_hdr: rmb 4 ; file system ID = "MCFS" vol_ver: rmb 1 ; file system version = $02 vol_beg: rmb 2 ; first sector of partition vol_end: rmb 2 ; last sector of partition vol_id: rmb 2 ; volume ID vol_name: rmb 32 ; volume label (zero terminated) vol_alloc_beg: rmb 2 ; first sector of allocation table vol_alloc_end: rmb 2 ; last sector of allocation table (up to 16 sectors) vol_root_beg: rmb 2 ; first sector of root dir vol_root_end: rmb 2 ; last sector of root dir ;;; ;;; rest of sector is set to zero ;;; ;;; ;;; Place flash Card driver here ;;; org $2000 ;;; include mcfs2_storage.asm here