Files
Digital-Research-Source-Code/CONTRIBUTIONS/z80em86/bios/fdcldr.mac
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

192 lines
4.0 KiB
Plaintext

;**************************************************************************
;* CP/M 3 BIOS for Z80em86 Z80 CPU emulator *
;* *
;* CP/M 3 Loader BIOS *
;* *
;* Copyright (C) 1992-2009 Stewart Kay *
;**************************************************************************
;
; ChangeLog (most recent entries are at top)
; ------------------------------------------
; v1.0.0 - 16 February 2009, S.J.Kay
; - Prepare for public release.
;
; v1.00 - 17 April 1995, S.J.Kay
; - Undocumented changes.
;
; v0.00 - 1992, S.J.Kay
; - Initial creation date.
.z80
;
maclib TPORTS.LIB
;
public dph, dpb, xlt
;
extrn rdrv
;
jp boot ;initial entry on cold start
jp null ;not required
jp null ; " "
jp null ; " "
jp crtop ;send console output character
jp null ;not required
jp null ; " "
jp null ; " "
jp home ;set disks to logical home
jp seldsk ;select drive, return disk parameter info
jp settrk ;set disk track
jp setsec ;set disk sector
jp setdma ;set disk I/O memory address
jp read ;read physical block(s)
jp null ;not required
jp null ; " "
jp sectrn ;translate logical to physical sector
jp crtost ;return console output status
jp null ;not required
jp null ; " "
jp null ; " "
jp null ; " "
jp null ; " "
jp null ; " "
jp null ; " "
jp move ;block move memory to memory
jp null ;not required
jp null ; " "
jp null ; " "
jp null ; " "
jp null ; " "
jp null ; " "
jp null ; " "
;
; null code
null: ld a,1ah ;end of file character
ret
;
; boot code
boot: out (crt1in),a ;initialize CRT driver
out (gtboot),a ;what drive did boot come from
cp 2 ;floppy A: or B: drive ?
ld a,rdhard
jp nc,settyp
ld a,rdflop
settyp: ld (flphdd+1),a ;set floppy or HDD read port
ret
;
; block move
move: ex de,hl
ldir
ex de,hl
ret
;
; home disk
home: ld c,0 ;fall through to set track
;
; set track
settrk: ld a,c
ld (track),a
ret
;
; set sector
setsec: ld a,c
ld (sector),a
ret
;
; set DMA address
setdma: ld (dma),bc
ret
;
; select disk
seldsk: ld hl,dph ;DPH address
ret
;
; sector translate
sectrn: ld hl,xlt ;translate table address
add hl,bc ;add logical sector
ld l,(hl) ;get physical sector
ld h,0
ret
;
; read sector from boot disk
read: ld a,(rdrv)
ld h,a
ld d,0 ;side #0
ld a,(track)
sla h
jp c,side0 ;single sided disk if carry
sla h
jp c,dsdisk ;double sided disk if carry
cp 40
jp c,side0 ;side 0 of up-down if carry
ld b,a ;side 1 of up-down
ld a,79
sub b
jp side1
dsdisk: srl a
jp nc,side0
side1: ld d,1 ;side #1
side0: ld b,a ;track number
ld a,(sector)
ld c,a ;sector number
ld hl,(dma)
out (gtboot),a ;what drive did boot come from
ld e,a ;drive information
ld a,2 ;sector size code for floppy driver (2=512)
flphdd: out (0ffh),a ;read 1 sector
or a
ret z
ld a,1
ret
;
crtost: out (crt1st),a ;CRT output status
ret
;
crtop: out (crt1op),a ;CRT output
ret
;
track: db 0
sector: db 0
dma: dw 0
;
; Disk Parameter Header
db 0 ;UNIT
db 0 ;TYPE
dph: dw xlt ;XLT
db 0,0,0 ;-0- (BDOS scratch use)
db 0,0,0 ;-0-
db 0,0,0 ;-0-
db 0 ;Media flag
dw dpb ;DPB
dw csv ;CSV
dw alv ;ALV
dw dirbcb ;DIRBCB
dw dtabcb ;DTABCB
dw 0ffffh ;HASH (n/a)
db 0 ;HBANK (n/a)
;
; Disk Parametr Block table
dpb: ds 17 ;filled in by PUTLDR.COM utility
;
; disk skew table
xlt: ds 128 ;filled in by PUTLDR.COM utility
;
; checksum table
csv: ds 512 ;2048 directory entries maximum
;
; allocation table
alv: ds 512 ;512 * 8 blocks, space = 512 * 8 * BLS
;
; directory buffer control block
dirbcb: db 0ffh,0,0,0,0,0,0,0,0,0
dw buff0
;
; data buffer control block
dtabcb: db 0ffh,0,0,0,0,0,0,0,0,0
dw buff1
;
; directory and data buffers
buff0 equ $ ;1k directory buffer
buff1 equ buff0+1024 ;1k data buffer
;
end