;*****************************************************
;* 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
; ====================================================================
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
; ====================================================================
tst temp
brne dsk_dchpart1
-; Need to init
+; No disks yet, need to init
rcall mgr_init_partitions
cbr temp,0x80
; ====================================================================
; Parameters
; --------------------------------------------------------------------
-; Registers : none
+; Registers : in: temp
; Variables : [r] seekdsk Number of Disk to Read
; [r] seeksec Sector to read
; [r] seektrk Track to read
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
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
; ====================================================================
; 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
;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.