]> cloudbase.mooo.com Git - avrcpm.git/blobdiff - avrcpm/avr/dsk_fsys.asm
* Merged fat16-test back into trunk.
[avrcpm.git] / avrcpm / avr / dsk_fsys.asm
index aa91ce40dfdc3526f888059709a9061b638cfb4b..6645bf989eb5f7d71762a457cfc5fae38b139fa6 100644 (file)
@@ -35,7 +35,7 @@
 ;*****************************************************
 ;*         CP/M to host disk constants               *
 ;*****************************************************
-       .equ    MAXDISKS  = 6                   ;Max number of Disks (partitions)\r
+       .equ    MAXDISKS  = 6                   ;Max number of Disks (partitions)
        .equ    PARTENTRY_SIZE = 9              ;Size of a Partitiontableentry
        .equ    blksize = 1024                  ;CP/M allocation size
        .equ    hostsize = 512                  ;host disk sector size
        .equ    WRDIR = 1               ;write to directory
        .equ    WRUAL = 2               ;write to unallocated
        .equ    WRTMSK= 3               ;write type mask
+
+       .equ    READ_FUNC  = 7
+       .equ    WRITE_FUNC = 6
+       .equ    BOOT_FUNC  = 5
+       .equ    HOME_FUNC  = 4
+
 ;----------------------------------------------- Start of Data Segment
 
        .dseg
@@ -95,16 +101,11 @@ hostlba:           .byte   3               ;host sector number (relative to partition start)
 ; ====================================================================
 dsk_getpartentry:
        
+       ldi     zl,PARTENTRY_SIZE
+       mul     xl,zl
        ldiw    z,hostparttbl
-       mov             temp,xl
-
-dsk_getpartentryloop:
-       cp              temp,_0
-       breq    dsk_getpartentryloopend
-       adiw    z,PARTENTRY_SIZE
-       dec             temp
-       rjmp            dsk_getpartentryloop
-dsk_getpartentryloopend:
+       add     zl,_tmp0
+       add     zh,_tmp1
        ret
 
 ; ====================================================================
@@ -129,7 +130,7 @@ dskDiskCheck:
        tst             temp
        brne    dsk_dchpart1
 
-; Need to init
+; No disks yet, need to init
 
        rcall   mgr_init_partitions
        cbr             temp,0x80
@@ -266,7 +267,7 @@ dsk_home:
 ; ====================================================================
 ; Parameters
 ; --------------------------------------------------------------------
-; Registers  : none
+; Registers  : in: temp                        
 ; Variables  : [r] seekdsk             Number of Disk to Read
 ;                         [r] seeksec          Sector to read
 ;              [r] seektrk             Track  to read
@@ -276,7 +277,13 @@ dsk_home:
 dsk_read:
        sts             erflag,_0
        sbi             flags,readop            ; Set read operation flag
+       ;RAM disk?
        lds     xl,seekdsk
+#if RAMDISKCNT
+       cpi     xl,RAMDISKNR
+       brlt    PC+2
+        rjmp   rdsk_read
+#endif
        rcall   dsk_getpartentry        ; Get Paritiontableentry
        ld      temp,z                          ; Get Partitiontype
 
@@ -284,10 +291,6 @@ dsk_read:
        cpi             temp,dskType_None
        brne    PC+2
        rjmp    dsk_read_err
-; Is it a RamDisk ?
-       cpi             temp,dskType_RAM
-       brne    PC+2
-       rjmp    rdsk_read
 ; It must be a FAT16-Imagefile or CP/M Partition.
        sts             unacnt,_0
        sbi             flags,rsflag            ;must read data
@@ -303,7 +306,7 @@ dsk_read_err:
 ; ====================================================================
 ; Parameters
 ; --------------------------------------------------------------------
-; Registers  : none
+; Registers  : in: temp                Write type      
 ; Variables  : [r] seekdsk             Number of Disk to Read
 ;                         [r] seeksec          Sector to read
 ;              [r] seektrk             Track  to read
@@ -314,19 +317,21 @@ dsk_write:
        ;write the selected sector
        sts             erflag,_0
        cbi             flags,readop            ; not a read operation
+       ;RAM disk?
        lds     xl,seekdsk
+#if RAMDISKCNT
+       cpi     xl,RAMDISKNR
+       brlt    PC+2
+        rjmp   rdsk_write
+#endif
        rcall   dsk_getpartentry        ; Get Paritiontableentry
-       ld      temp,z                          ; Get Partitiontype
+       ld      temp2,z                         ; Get Partitiontype
 
 ; Isn't it a Disk ?
-       cpi             temp,dskType_None
+       cpi     temp2,dskType_None
        brne    PC+2
        rjmp    dsk_write_err
 
-; Is it a RamDisk ?
-       cpi             temp,dskType_RAM
-       brne    PC+2
-       rjmp    rdsk_write
 
 ; It must be a FAT16-Imagefile or CP/M Partition.