]> cloudbase.mooo.com Git - avrcpm.git/blobdiff - avrcpm/cpm/bios.asm
* avr/z80.asm:
[avrcpm.git] / avrcpm / cpm / bios.asm
index 632191631dee3bdce619789500c95426927a86b4..a242c55b47b55bbb990be36c244006974107d2e4 100644 (file)
@@ -28,6 +28,11 @@ retry:       equ     3               ;max retries on disk i/o before error
 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
        
@@ -68,6 +73,8 @@ boot:
 
 wboot: ;re-load CP/M
        ld      sp,buff
+       ld      a,1<<BOOT_FUNC
+       out     (22),a
        ld      c,0
        call    seldsk
        call    home
@@ -80,6 +87,7 @@ load1:
        push    de
        push    hl
        ld      c,d
+       ld      b,0
        call    setsec
        pop     bc
        push    bc
@@ -106,6 +114,7 @@ load1:
        push    bc
        push    de
        push    hl
+       ld      b,0
        call    settrk  
        pop     hl
        pop     de
@@ -158,66 +167,64 @@ reader:
        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:
@@ -234,31 +241,27 @@ 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
@@ -268,5 +271,5 @@ chk:
 
 all:
        ds 31
-
 end
+