home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
norge.freeshell.org (192.94.73.8)
/
192.94.73.8.tar
/
192.94.73.8
/
pub
/
computers
/
cpm
/
alphatronic
/
DRIPAK.ZIP
/
CPM_3-0
/
SOURCES
/
PLIBIOS.ASM
< prev
next >
Wrap
Assembly Source File
|
1982-12-31
|
5KB
|
171 lines
name 'PLIBIOS'
title 'Direct BIOS Calls From PL/I-80'
;
;***********************************************************
;* *
;* bios calls from pl/i for track, sector io *
;* *
;***********************************************************
public seldsk ;select disk drive
public settrk ;set track number
public setsec ;set sector number
public rdsec ;read sector
public wrsec ;write sector
public sectrn ;translate sector number
public bstdma ;set dma
public bflush ;flush deblocking buffers
;
;
extrn ?boot ;system reboot entry point
extrn ?bdos ;bdos entry point
;
;***********************************************************
;* *
;* equates for interface to cp/m bios *
;* *
;***********************************************************
cr equ 0dh ;carriage return
lf equ 0ah ;line feed
eof equ 1ah ;end of file
;
base equ 0
wboot equ base+1h ;warm boot entry point stored here
sdsk equ 18h ;bios select disk entry point
strk equ 1bh ;bios set track entry point
ssec equ 1eh ;bios set sector entry point
sdma equ 21h ;bios set dma entry point
read equ 24h ;bios read sector entry point
write equ 27h ;bios write sector entry point
stran equ 2dh ;bios sector translation entry point
;
; utility functions
;
;***********************************************************
;***********************************************************
;* *
;* general purpose routines used upon entry *
;* *
;***********************************************************
;
;
getp: ;get parameter
mov e,m ;low (addr)
inx h
mov d,m ;high (addr)
inx h
push h ;save for next parameter
xchg ;hl = .char
mov e,m ;to register e
inx h
mov d,m ;get high byte as well
pop h ;ready for next parameter
ret
;
;
;***********************************************************
;* *
;***********************************************************
seldsk: ;select drive number 0-15, in C
;1-> drive no.
;returns-> pointer to translate table in HL
call getp
mov c,e ;c = drive no.
lxi d,sdsk
jmp gobios
;
;***********************************************************
;* *
;***********************************************************
settrk: ;set track number 0-76, 0-65535 in BC
;1-> track no.
call getp
mov b,d
mov c,e ;bc = track no.
lxi d,strk
jmp gobios
;
;***********************************************************
;* *
;***********************************************************
setsec: ;set sector number 1 - sectors per track
;1-> sector no.
call getp
mov b,d
mov c,e ;bc = sector no.
lxi d,ssec
jmp gobios
;
;***********************************************************
;* *
;***********************************************************
rdsec: ;read current sector into sector at dma addr
;returns in A register: 0 if no errors
; 1 non-recoverable error
lxi d,read
jmp gobios
;***********************************************************
;* *
;***********************************************************
wrsec: ;writes contents of sector at dma addr to current sector
;returns in A register: 0 errors occured
; 1 non-recoverable error
lxi d,write
jmp gobios
;
;***********************************************************
;* *
;***********************************************************
sectrn: ;translate sector number
;1-> logical sector number (fixed(15))
;2-> pointer to translate table
;returns-> physical sector number
call getp ;first parameter
mov b,d
mov c,e ;bc = logical sector no.
call getp ;second parameter
push d ;save it
lxi d,stran
lhld wboot
dad d ;hl = sectran entry point
pop d ;de = .translate-table
pchl
;
;***********************************************************
;*
;*
;***********************************************************
bstdma: ;set dma
call getp
mov b,d
mov c,e
lxi d,sdma
jmp gobios
;
bflush: ;flush deblocking buffers
; lxi b,0ffffh
; lxi d,setdmf
; jmp gobios
ret
;***********************************************************
;***********************************************************
;***********************************************************
;* *
;* compute offset from warm boot and jump to bios *
;* *
;***********************************************************
;
;
gobios: ;jump to bios entry point
;de -> offset from warm boot entry point
lhld wboot
dad d
pchl
;
dw 0,0,0,0,0,0,0,0
dw 0,0,0,0,0,0,0,0
db 0
end