]> cloudbase.mooo.com Git - avrcpm.git/blobdiff - avrcpm/avr/dsk_mgr.asm
* New macros 'lcall' and 'ljmp'
[avrcpm.git] / avrcpm / avr / dsk_mgr.asm
index ac9b0d414c87725fc3e47a54cee3230c3f12222a..16977f57cf1f3c95ac0b6742ac1086aacb78284b 100644 (file)
@@ -1,40 +1,40 @@
 ;    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
+       rcall   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
+#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
@@ -210,108 +214,108 @@ mgr_pcpe:
 ; --------------------------------------------------------------------\r
 ; Description:\r
 ; ====================================================================\r
-
-mgr_prnt_parttbl:
-       ldiw    z,hostparttbl
-pprl:
-       ldd             temp ,z+1               ;Get partition start
-       ldd             temp2,z+2
-       ldd             temp3,z+3
-       ldd             temp4,z+4
-       printnewline
-       cp              temp,_0                 ;If zero ...
-       cpc             temp2,_0
-       cpc             temp3,_0
-       cpc             temp4,_0
-       breq    mgr_prnop               ;... no partition table at 0
 \r
+mgr_prnt_parttbl:\r
+       ldiw    z,hostparttbl\r
+pprl:\r
 ; Partitiontype examining\r
+\r
        ldd     xl,z+0\r
+; Empty slot?\r
+       cpi             xl,dskType_None\r
+       breq    mgr_goto_next_part\r
+\r
+       printnewline\r
+\r
 ; CP/M ?\r
        cpi             xl,dskType_CPM\r
        brne    mgr_prtb_nocpm\r
-       rcall   mgr_prnt_table_cpm
+       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_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_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_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
+       ldd             temp ,z+1               ;Get partition start\r
+       ldd             temp2,z+2\r
+       ldd             temp3,z+3\r
+       ldd             temp4,z+4\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
+       lsr             temp4\r
+       ror             temp3\r
+       ror             temp2\r
+       ror             temp\r
+       lcall   print_ultoa\r
        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
+       ldi             temp,high(hostparttbltop)\r
+       cpi             zl,  low (hostparttbltop)\r
+       cpc             zh,temp\r
+       brlo    pprl\r
+\r
+mgr_pppre:\r
+       ret\r
        \r
 \r
-mgr_prnt_fatsize:
-       rcall   print_ultoa
-       printstring ", size: "
+mgr_prnt_fatsize:\r
+       lcall   print_ultoa\r
+       printstring ", size: "\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: "
+       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
+       lcall   print_ultoa\r
+       printstring "BYTE."\r
+       \r
+       rjmp            mgr_goto_next_part\r
+\r
+mgr_prnt_table_cpm:\r
+       printstring "CP/M partition at: "\r
        ret\r
 \r
-mgr_prnt_table_fat:
-       printstring "FAT16 File-Image at: "
+mgr_prnt_table_fat:\r
+       printstring "FAT16 File-Image at: "\r
        ret\r
 \r
-mgr_prnt_table_ram:
-       printstring "Ramdisk at: "
+mgr_prnt_table_ram:\r
+       printstring "Ramdisk at: "\r
        ret\r
 \r
-mgr_prnt_table_err:
-       printstring "Unknown Entry at: "
+mgr_prnt_table_err:\r
+       printstring "Unknown Entry at: "\r
        ret\r
-
-mgr_prnt_image:
-       printstring "Assuming CP/M image at: "
+\r
+mgr_prnt_image:\r
+       printstring "Assuming CP/M image at: "\r
        ret\r
-
+\r
 \r