]> cloudbase.mooo.com Git - avrcpm.git/commitdiff
* Merged fat16-test back into trunk.
authorLeo <erbl259-lmu@yahoo.de>
Wed, 6 Oct 2010 22:22:37 +0000 (22:22 +0000)
committerLeo <erbl259-lmu@yahoo.de>
Wed, 6 Oct 2010 22:22:37 +0000 (22:22 +0000)
git-svn-id: svn://cu.loc/avr-cpm/trunk@130 57430480-672e-4586-8877-bcf8adbbf3b7

avrcpm/avr/8080int-jmp.asm
avrcpm/avr/dsk_cpm.asm
avrcpm/avr/dsk_fsys.asm
avrcpm/avr/dsk_mgr.asm
avrcpm/avr/virt_ports.asm

index 26811b5b494edeea72a4ea7757572890c10755d9..1d7d1f3f220d739916c6b67fcb4c15d163082c78 100644 (file)
@@ -680,7 +680,7 @@ do_op_outa: ; out (opl),a
 .endif
        mov temp,z_a
        mov temp2,opl
-       rcall portWrite
+       lcall portWrite
        ret
 
 ;----------------------------------------------------------------
index e0b819c016eb5d4d54b9b38a7aa73e078f132779..6835c9395bbd0fb10190cfad24d39ccaca3b3b44 100644 (file)
@@ -26,7 +26,7 @@
 \r
 #if CPMDSK_SUPPORT\r
 \r
-;-------------------------------------- Defines for CPM Structures
+;------------------------------------------ Defines for CPM Structures
 #define PART_TYPE   4
 #define PART_START  8
 #define PART_SIZE  12\r
 
        .dseg\r
 \r
-; Partition table offsets:
-tmp_tbl:
-       .byte   PARTENTRY_SIZE*MAXDISKS
-\r
-; ---------------------------------------------- Start of Code Segment
+;----------------------------------------------- Start of Code Segment
        .cseg\r
 
 ; ====================================================================\r
@@ -71,9 +67,7 @@ cpm_hostparam:
 .endif
 \r
        rcall dsk_getpartentry          ; get partition entry
-               
 \r
-cpm_hostlend:\r
        lds             temp,hostlba            ; get sector to access
        lds             temp2,hostlba+1
        lds             temp3,hostlba+2
@@ -169,11 +163,17 @@ cpm_writehost:
        tst             temp
        breq    cpm_rdwr_ok
        
-       rcall   mgr_init_partitions
-       cbr             temp,0x80
+       rjmp    cpm_rdwr_err            ; skip disk change detection code
+       
+; After a second thought, the following  code doesn't make sense, because
+; disk change (change of one or more disk images) can not reliably detected.
+; At least with the existing code.
+
+       rcall   mgr_init_partitions     ;reinit card
+       cbr     temp,0x80               ;this should have been a test of bit 7.
        breq    cpm_rdwr_err
 
-       rcall   cpm_hostparam
+       rcall   cpm_hostparam           ;if same card, try again.
        breq    cpm_rdwr_err
        rcall   mmcWriteSect
        tst             temp
@@ -205,11 +205,13 @@ cpm_readhost:
        tst             temp
        breq    cpm_rdwr_ok
 
-       rcall   mgr_init_partitions
+       rjmp    cpm_rdwr_err    ; skip disk change detection code
+
+       rcall   mgr_init_partitions     ;reinit card
        cbr             temp,0x80
        breq    cpm_rdwr_err
 
-       rcall   cpm_hostparam
+       rcall   cpm_hostparam           ;if same card, try again.
        breq    cpm_rdwr_err
        rcall   mmcReadSect
        tst             temp
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.
 
index 38901cd6fa7d7118da2c0cf4c0029ca8ce43a84e..4b108a301a07a8472f457a20def900d2f4b7a0d9 100644 (file)
 ;\r
 \r
 \r
-; ------------------------- Defines for the disk management Structures\r
+;-------------------------- Defines for the disk management Structures\r
 \r
 ;----------------------------------------------- Start of Data Segment\r
 \r
        .dseg\r
 \r
 \r
+; Partition table offsets:\r
+tmp_tbl:\r
+       .byte   PARTENTRY_SIZE*MAXDISKS\r
 \r
 ; ------------------------------- Start of Code Segment\r
        .cseg\r
 ; ====================================================================\r
 ; Parameters\r
 ; --------------------------------------------------------------------\r
-; Registers  : none\r
-; Variables  : [w] temp                Status of Operation\r
-;                                                      (0x80 - Operation Failure )\r
-;                                                      (others - Operation Suceded)\r
+; \r
+; Registers  : [w] temp            Number of disk images (raw and fat16) found.\r
+;                          + 0x80 if sd card changes. (not used, doesn't work)\r
+; SREG :          Z        according to temp\r
 ; --------------------------------------------------------------------\r
 ; Description:\r
 ; This Function scans an SD-Cards Boot-Sector for valid Partitions.\r
@@ -164,8 +167,16 @@ mgr_nextp2:
 \r
 mgr_pend:\r
 \r
+#if 0          /* ToDo: ramdisks are not in sd-card partitions */\r
 ; Initialize RAM-Disks\r
        rcall   rdsk_add_partition\r
+#endif\r
+\r
+/*\r
+   Don't use change info. It doesn't word reliably with partitions, \r
+   and it doesn't work at all with fat images:\r
+*/\r
+#define CHANGEINFO 0\r
 \r
 ;Store new partitions and check if the SD card has been changed.\r
 \r
@@ -185,22 +196,27 @@ mgr_pcpl:
 \r
        mov             temp,temp3\r
        sts             ndisks,temp\r
+#if CHANGEINFO\r
        brtc    mgr_pcpe\r
 \r
+;      SD card changed.\r
+#endif\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
+#if CHANGEINFO\r
        sbr             temp,0x80\r
+#endif\r
 \r
 mgr_pcpe:\r
 \r
+       tst     temp\r
        ret\r
 \r
 \r
index 92c26d194627dfc1b74951a16330bf6aca3e47af..7861165af4bb9f0466151ced1d890dcf6463d692 100644 (file)
 ;22    - Trigger - write  to read, to write a sector using the above info;
 ;                      , write to allocated/dirctory/unallocated
 
-       .equ    READ_FUNC  = 7
-       .equ    WRITE_FUNC = 6
-       .equ    BOOT_FUNC  = 5
-       .equ    HOME_FUNC  = 4
-\r
 ;----------------------------------------------- Start of Data Segment
 
        .dseg\r