X-Git-Url: http://cloudbase.mooo.com/gitweb/avrcpm.git/blobdiff_plain/45a10977ea97d2f25291c6bb9d24e4c5990b9f7f..eb85ce65e986688fec93afe15415dd189f5ba2b2:/avrcpm/avr/dsk_fsys.asm diff --git a/avrcpm/avr/dsk_fsys.asm b/avrcpm/avr/dsk_fsys.asm index aa91ce4..6645bf9 100644 --- a/avrcpm/avr/dsk_fsys.asm +++ b/avrcpm/avr/dsk_fsys.asm @@ -35,7 +35,7 @@ ;***************************************************** ;* CP/M to host disk constants * ;***************************************************** - .equ MAXDISKS = 6 ;Max number of Disks (partitions) + .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 @@ -53,6 +53,12 @@ .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.