cr: equ 13
lf: equ 10
+READ_FUNC: equ 7
+WRITE_FUNC: equ 6
+BOOT_FUNC: equ 5
+HOME_FUNC: equ 4
+
org bios
nsects: equ ($-ccp)/128 ;warm start sector count
wboot: ;re-load CP/M
ld sp,buff
+ ld a,1<<BOOT_FUNC
+ out (22),a
ld c,0
call seldsk
call home
push de
push hl
ld c,d
+ ld b,0
call setsec
pop bc
push bc
push bc
push de
push hl
+ ld b,0
call settrk
pop hl
pop de
ld a,$1F
ret
-home:
- push af
- ld a,0
- out (16),a
- pop af
- ret
-
seldsk:
- push af
+ ld hl,0 ;error return code
ld a,c
- cp 0
+ out (15),a
+ cp 0 ;only one disk supportet
jp nz,seldsk_na
- ld hl,dph
- pop af
- ret
+ ld hl,dph ;return disk parameter header address
seldsk_na:
- ld hl,0
- pop af
ret
+home:
+ ld a,1<<HOME_FUNC
+ out (22),a
+
+ ld bc,0 ; same as seek to track 0
settrk:
- push af
ld a,c
out (16),a
- pop af
+ ld a,b
+ out (17),a
ret
setsec:
- push af
ld a,c
out (18),a
- pop af
ret
setdma:
- push af
ld a,c
out (20),a
ld a,b
out (21),a
- pop af
ret
read:
- ld a,1
+ ld a,1<<READ_FUNC
out (22),a
ld a,0
ret
write:
- ld a,2
- out (22),a
- ld a,0
+ ld a,1<<WRITE_FUNC
+ or c ;merge write type in c
+ out (22),a
+ ld a,0
ret
sectran:
;translate sector bc using table at de, res into hl
- ;not implemented :)
ld h,b
ld l,c
+ ld a,d
+ or e
+ ret z
+ ex de,hl
+ add hl,bc
+ ld l,(hl)
+ ld h,0
ret
prmsg:
;Disk Parameter Header
dph:
- dw trans ;XLT: Address of translation table
- dw 0 ;000: Scratchpad
- dw 0 ;000: Scratchpad
- dw 0 ;000: Scratchpad
- dw dirbuf ;DIRBUF: Address of a dirbuff scratchpad
- dw dpb ;DPB: Address of a disk parameter block
- dw chk ;CSV: Address of scratchpad area for changed disks
- dw all ;ALV: Address of an allocation info sratchpad
+ dw 0 ;XLT: No sector translation table
+ dw 0 ;000: Scratchpad
+ dw 0 ;000: Scratchpad
+ dw 0 ;000: Scratchpad
+ dw dirbuf ;DIRBUF: Address of a dirbuff scratchpad
+ dw dpb ;DPB: Address of a disk parameter block
+ dw chk ;CSV: Address of scratchpad area for changed disks
+ dw all ;ALV: Address of an allocation info sratchpad
dpb:
- dw 26 ;SPT: sectors per track
- db 3 ;BSH: data allocation block shift factor
- db 7 ;BLM: Data Allocation Mask
- db 0 ;Extent mask
- dw 242 ;DSM: Disk storage capacity
- dw 63 ;DRM, no of directory entries
- db 192 ;AL0
- db 0 ;AL1
- dw 16 ;CKS, size of dir check vector
- dw 2 ;OFF, no of reserved tracks
-
-trans:
- db 0,1,2,3,4,5,6,7,8,9
- db 10,11,12,13,14,15,16,17,18,19
- db 19,20,21,22,23,24,25,26
+ dw 26 ;SPT: sectors per track
+ db 3 ;BSH: data allocation block shift factor
+ db 7 ;BLM: Data Allocation Mask
+ db 0 ;Extent mask
+ dw 242 ;DSM: Disk storage capacity
+ dw 63 ;DRM, no of directory entries
+ db 192 ;AL0
+ db 0 ;AL1
+ dw 16 ;CKS, size of dir check vector
+ dw 2 ;OFF, no of reserved tracks
+
dirbuf:
ds 128
all:
ds 31
-
end
+