; Various Management functions for the Interaction with the File-\r
-; systems
-;
-; Copyright (C) 2010 Frank Zoll
-;
-; This file is part of avrcpm.
-;
-; avrcpm is free software: you can redistribute it and/or modify it
-; under the terms of the GNU General Public License as published by
-; the Free Software Foundation, either version 3 of the License, or
-; (at your option) any later version.
-;
-; avrcpm is distributed in the hope that it will be useful,
-; but WITHOUT ANY WARRANTY; without even the implied warranty of
-; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-; GNU General Public License for more details.
-;
-; You should have received a copy of the GNU General Public License
-; along with avrcpm. If not, see <http://www.gnu.org/licenses/>.
-;
-; $Id$
+; systems\r
;\r
+; Copyright (C) 2010 Frank Zoll\r
+;\r
+; This file is part of avrcpm.\r
+;\r
+; avrcpm is free software: you can redistribute it and/or modify it\r
+; under the terms of the GNU General Public License as published by\r
+; the Free Software Foundation, either version 3 of the License, or\r
+; (at your option) any later version.\r
+;\r
+; avrcpm is distributed in the hope that it will be useful,\r
+; but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+; GNU General Public License for more details.\r
+;\r
+; You should have received a copy of the GNU General Public License\r
+; along with avrcpm. If not, see <http://www.gnu.org/licenses/>.\r
+;\r
+; $Id$\r
+;\r
+\r
\r
+; ------------------------- Defines for the disk management Structures\r
\r
-; ------------------------- Defines for the disk management Structures
+;----------------------------------------------- Start of Data Segment\r
\r
-;----------------------------------------------- Start of Data Segment
-
.dseg\r
\r
\r
\r
-; ------------------------------- Start of Code Segment
+; ------------------------------- Start of Code Segment\r
.cseg\r
\r
; ====================================================================\r
-; Function: Scans a Disk for CP/M Partions
+; Function: Scans a Disk for CP/M Partions\r
; ====================================================================\r
; Parameters\r
; --------------------------------------------------------------------\r
; on the Disk will be used for a detailed analyses. If there\r
; are any Files like "cpm_x.img" are found, these Files will be\r
; used as Disks by the CP/M- System. ( x must be in the Range A to D )\r
-; ====================================================================
+; ==================================================================== \r
mgr_init_partitions:\r
\r
sts ndisks,_0 ; Set Number of Disks to 0\r
\r
; Initialize temp partition table\r
- ldiw y,tmp_tbl
- ldi temp2,PARTENTRY_SIZE*MAXDISKS
-mgr_picl:
- st y+,_0
- dec temp2
+ ldiw y,tmp_tbl\r
+ ldi temp2,PARTENTRY_SIZE*MAXDISKS\r
+mgr_picl:\r
+ st y+,_0\r
+ dec temp2\r
brne mgr_picl\r
\r
-; Start mmc Card interaction
- call mmcInit
- andi temp,MMCST_NOINIT & MMCST_NODISK
- brne mgr_pierr
-
-;Load first sector from MMC (boot sector)
- ldiw y,0 ; Sector 0
- movw x,y
- call mmcReadSect
- tst temp
- breq mgr_check_bootsektor
-
-mgr_pierr:
- clr temp
+; Start mmc Card interaction\r
+ lcall mmcInit\r
+ andi temp,MMCST_NOINIT & MMCST_NODISK\r
+ brne mgr_pierr\r
+ \r
+;Load first sector from MMC (boot sector)\r
+ ldiw y,0 ; Sector 0\r
+ movw x,y\r
+ lcall mmcReadSect\r
+ tst temp\r
+ breq mgr_check_bootsektor\r
+\r
+mgr_pierr:\r
+ clr temp\r
ret\r
\r
mgr_check_bootsektor:\r
;Pointer to first temp table entry\r
- ldiw y,tmp_tbl
-;Test, if it has a valid MBR
-
- ldiw z,hostbuf+510-1 ;Point to last byte of partition table
-
- ldi temp3,0 ;temp3 holds number of found disks (paritions)
- ldd temp,z+1 ;MBR signature (0xAA55) at and of sector?
- ldd temp2,z+2
- ldi temp4,0xAA
- cpi temp,0x55
- cpc temp2,temp4
- breq mgr_search
-
-;No MBR, no partition table ...
- inc temp3 ;pretend we have one.
+ ldiw y,tmp_tbl\r
+;Test, if it has a valid MBR\r
+\r
+ ldiw z,hostbuf+510-1 ;Point to last byte of partition table\r
+\r
+ ldi temp3,0 ;temp3 holds number of found disks (paritions)\r
+ ldd temp,z+1 ;MBR signature (0xAA55) at and of sector?\r
+ ldd temp2,z+2\r
+ ldi temp4,0xAA\r
+ cpi temp,0x55 \r
+ cpc temp2,temp4\r
+ breq mgr_search\r
+\r
+;No MBR, no partition table ...\r
+ inc temp3 ;pretend we have one.\r
ldi temp,high((1<<16) * 128/512)\r
ldi temp2,dskType_CPM\r
- std y+0,temp2
- std y+1,_0 ;start at beginning of card
- std y+2,_0
- std y+3,_0
- std y+4,_0
- std y+5,_0 ;max CP/M 2.2 disk size
- std y+6,temp ;
- std y+7,_0
- std y+8,_0
+ std y+0,temp2\r
+ std y+1,_0 ;start at beginning of card\r
+ std y+2,_0\r
+ std y+3,_0\r
+ std y+4,_0\r
+ std y+5,_0 ;max CP/M 2.2 disk size\r
+ std y+6,temp ;\r
+ std y+7,_0\r
+ std y+8,_0\r
rjmp mgr_pend\r
\r
; Search for valid Partitions and ImageFiles \r
mgr_search:\r
- sbiw z,63 ;Now at first byte of partition table
- ldi temp4,high(hostbuf+510)
+ sbiw z,63 ;Now at first byte of partition table\r
+ ldi temp4,high(hostbuf+510)\r
\r
-mgr_ploop:
+mgr_ploop:\r
\r
; Get Partitiontype\r
- ldd temp,z+PART_TYPE
+ ldd temp,z+PART_TYPE\r
\r
; Test for CP/M Partition\r
- cpi temp,PARTID_CPM
- brne mgr_nextp
-
- rcall cpm_add_partition
+ cpi temp,PARTID_CPM\r
+ brne mgr_nextp\r
+ \r
+ rcall cpm_add_partition\r
\r
- inc temp3
- cpi temp3,MAXDISKS
+ inc temp3\r
+ cpi temp3,MAXDISKS\r
breq mgr_pend\r
- rjmp mgr_nextp\r
-
-mgr_nextp:
- adiw zl,16
- cpi zl,low(hostbuf+510)
- cpc zh,temp4
+ \r
+mgr_nextp:\r
+ adiw zl,16\r
+ cpi zl,low(hostbuf+510)\r
+ cpc zh,temp4\r
brlo mgr_ploop\r
\r
+#if FAT16_SUPPORT\r
+\r
; Test for FAT16 Partition\r
- ldiw z,hostbuf+510-1-63 ;Point to first byte of partition table
- ldi temp4,high(hostbuf+510)
+ ldiw z,hostbuf+510-1-63 ;Point to first byte of partition table\r
+ ldi temp4,high(hostbuf+510)\r
\r
-mgr_ploop2:
+mgr_ploop2:\r
\r
; Get Partitiontype\r
- ldd temp,z+PART_TYPE
+ ldd temp,z+PART_TYPE\r
\r
; Test for FAT Partition\r
- cpi temp,PARTID_FAT16
- brne mgr_nextp2
-
- rcall fat_add_partition
-
+ cpi temp,PARTID_FAT16\r
+ brne mgr_nextp2\r
+ \r
+ rcall fat_add_partition\r
+\r
rjmp mgr_pend\r
-
-mgr_nextp2:
- adiw zl,16
- cpi zl,low(hostbuf+510)
- cpc zh,temp4
+ \r
+mgr_nextp2:\r
+ adiw zl,16\r
+ cpi zl,low(hostbuf+510)\r
+ cpc zh,temp4\r
brlo mgr_ploop2\r
+#endif\r
\r
mgr_pend:\r
\r
; Initialize RAM-Disks\r
rcall rdsk_add_partition\r
\r
-;Store new partitions and check if the SD card has been changed.
-
- ldiw y,tmp_tbl
- ldiw z,hostparttbl
- ldi temp4,PARTENTRY_SIZE*MAXDISKS
+;Store new partitions and check if the SD card has been changed.\r
+\r
+ ldiw y,tmp_tbl\r
+ ldiw z,hostparttbl\r
+ ldi temp4,PARTENTRY_SIZE*MAXDISKS\r
clt\r
-
-mgr_pcpl:
- ld temp,y+
- ld temp2,z
- st z+,temp
- cpse temp,temp2
- set
- dec temp4
- brne mgr_pcpl
-
- mov temp,temp3
- sts ndisks,temp
- brtc mgr_pcpe
-
- tst temp
- breq mgr_pcpe
-
-; SD card not changed.
- rcall fat_scan_partition\r
\r
+mgr_pcpl:\r
+ ld temp,y+\r
+ ld temp2,z\r
+ st z+,temp\r
+ cpse temp,temp2\r
+ set\r
+ dec temp4\r
+ brne mgr_pcpl\r
+\r
+ mov temp,temp3\r
+ sts ndisks,temp\r
+ brtc mgr_pcpe\r
+\r
+ tst temp\r
+ breq mgr_pcpe\r
+\r
+; SD card not changed.\r
+\r
+#if FAT16_SUPPORT\r
+ rcall fat_scan_partition\r
+ rcall fat_reset_cache
+#endif\r
lds temp,ndisks\r
- sbr temp,0x80
-
+ sbr temp,0x80\r
+\r
mgr_pcpe:\r
-
+\r
ret\r
\r
\r
; ====================================================================\r
-; Function: Print partition table info
+; Function: Print partition table info\r
; ====================================================================\r
; Parameters\r
; --------------------------------------------------------------------\r
; --------------------------------------------------------------------\r
; Description:\r
; ====================================================================\r
-
-mgr_prnt_parttbl:
- ldiw z,hostparttbl
+\r
+mgr_prnt_parttbl:\r
+ ldiw z,hostparttbl\r
+ lds yl,ndisks\r
+ ldi xh,'A'\r
+\r
pprl:
ldd temp ,z+1 ;Get partition start
ldd temp2,z+2
ldd temp3,z+3
ldd temp4,z+4
- printnewline
+\r
+ printnewline\r
+\r
cp temp,_0 ;If zero ...
cpc temp2,_0
cpc temp3,_0
; CP/M ?\r
cpi xl,dskType_CPM\r
brne mgr_prtb_nocpm\r
- rcall mgr_prnt_table_cpm
+ rcall mgr_prnt_diskname\r
+ rcall mgr_prnt_table_cpm\r
rjmp mgr_prnt_size\r
\r
; FAT16 ?\r
-mgr_prtb_nocpm:
+mgr_prtb_nocpm:\r
cpi xl,dskType_FAT\r
brne mgr_prtb_nofat\r
- rcall mgr_prnt_table_fat
- rjmp mgr_prnt_size
+ rcall mgr_prnt_diskname\r
+ rcall mgr_prnt_table_fat\r
+ rjmp mgr_prnt_size\r
; RAMDISK ?\r
mgr_prtb_nofat:\r
cpi xl,dskType_RAM\r
brne mgr_prnt_err\r
- rcall mgr_prnt_table_ram
+ rcall mgr_prnt_diskname\r
+ rcall mgr_prnt_table_ram\r
rjmp mgr_prnt_size\r
; Entry Error\r
mgr_prnt_err: \r
- rcall mgr_prnt_table_err
+ rcall mgr_prnt_table_err\r
rjmp mgr_prnt_size\r
\r
-mgr_prnop:
- rcall mgr_prnt_image
+mgr_prnop:\r
+ rcall mgr_prnt_diskname\r
+ rcall mgr_prnt_image\r
\r
mgr_prnt_size:\r
- rcall print_ultoa
- printstring ", size: "
-\r
- ldd temp ,z+5 ;Get partition size
- ldd temp2,z+6 ;Get partition size
- ldd temp3,z+7 ;Get partition size
- ldd temp4,z+8 ;Get partition size
-
- lsr temp4
- ror temp3
- ror temp2
- ror temp
- rcall print_ultoa
+ call print_ultoa
+ printstring ", size: "\r
+\r
+ ldd temp ,z+5 ;Get partition size\r
+ ldd temp2,z+6 ;Get partition size\r
+ ldd temp3,z+7 ;Get partition size\r
+ ldd temp4,z+8 ;Get partition size\r
+\r
+ lsr temp4\r
+ ror temp3\r
+ ror temp2\r
+ ror temp\r
+ call print_ultoa
printstring "KB."\r
-
-mgr_goto_next_part:
- adiw z,PARTENTRY_SIZE
- ldi temp,high(hostparttbltop)
- cpi zl, low (hostparttbltop)
- cpc zh,temp
- brlo pprl
-\r
-mgr_pppre:
- ret
+\r
+mgr_goto_next_part: \r
+ adiw z,PARTENTRY_SIZE\r
+ inc xh
+ dec yl\r
+ tst yl\r
+ brne pprl
+\r
+mgr_pppre:\r
+ ret\r
+ \r
+\r
+mgr_prnt_fatsize:\r
+ lcall print_ultoa\r
+ printstring ", size: "\r
\r
+ ldd temp ,z+5 ;Get partition size\r
+ ldd temp2,z+6 ;Get partition size\r
+ ldd temp3,z+7 ;Get partition size\r
+ ldd temp4,z+8 ;Get partition size\r
\r
-mgr_prnt_fatsize:
- rcall print_ultoa
- printstring ", size: "
+ lcall print_ultoa\r
+ printstring "BYTE."\r
\r
- ldd temp ,z+5 ;Get partition size
- ldd temp2,z+6 ;Get partition size
- ldd temp3,z+7 ;Get partition size
- ldd temp4,z+8 ;Get partition size
-
- rcall print_ultoa
- printstring "BYTE."
-
- jmp mgr_goto_next_part\r
-
-mgr_prnt_table_cpm:
- printstring "CP/M partition at: "
+ rjmp mgr_goto_next_part\r
+\r
+mgr_prnt_diskname:\r
+ push temp\r
+ mov temp,xh
+ call uartputc\r
+ ldi temp,':'
+ call uartputc\r
+ pop temp\r
ret\r
\r
-mgr_prnt_table_fat:
- printstring "FAT16 File-Image at: "
+mgr_prnt_table_cpm:\r
+ printstring "CP/M partition at: "\r
ret\r
\r
-mgr_prnt_table_ram:
- printstring "Ramdisk at: "
+mgr_prnt_table_fat:\r
+ printstring "FAT16 File-Image at: "\r
ret\r
\r
-mgr_prnt_table_err:
- printstring "Unknown Entry at: "
+mgr_prnt_table_ram:\r
+ printstring "Ramdisk at: "\r
ret\r
-
-mgr_prnt_image:
- printstring "Assuming CP/M image at: "
+\r
+mgr_prnt_table_err:\r
+ printstring "Unknown Entry at: "\r
ret\r
-
+\r
+mgr_prnt_image:\r
+ printstring "Assuming CP/M image at: "\r
+ ret\r
+\r
\r