mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 17:04:19 +00:00
Upload
Digital Research
This commit is contained in:
291
CPM OPERATING SYSTEMS/CPM 3.X/CPM 3.0/3ON2/SBIOS.ASM
Normal file
291
CPM OPERATING SYSTEMS/CPM 3.X/CPM 3.0/3ON2/SBIOS.ASM
Normal file
@@ -0,0 +1,291 @@
|
||||
true equ -1
|
||||
false equ not true
|
||||
jmpop equ 0c3h
|
||||
getch equ 1
|
||||
print equ 9
|
||||
open equ 15
|
||||
readseq equ 20
|
||||
dma equ 26
|
||||
drives equ 2
|
||||
bios equ 0ee00h
|
||||
ldrbios equ false
|
||||
extrn @civec, @covec, @aovec, @lovec, @bnkbf
|
||||
extrn @crdma
|
||||
extrn @crdsk, @fx, @resel, @vinfo, @usrcd, @ermde
|
||||
extrn @date, @hour, @min, @sec, @mxtpa
|
||||
iobyte equ 3
|
||||
tpa equ 100h
|
||||
dffcb equ 5ch
|
||||
stack80 equ 100h
|
||||
bootram equ 0
|
||||
bdos equ 5
|
||||
ccp equ tpa
|
||||
boot80 equ 0
|
||||
warm80 equ 3
|
||||
cnst80 equ 6
|
||||
cnin80 equ 9
|
||||
cnot80 equ 12
|
||||
list80 equ 15
|
||||
punc80 equ 18
|
||||
redr80 equ 21
|
||||
home80 equ 24
|
||||
slds80 equ 27
|
||||
strk80 equ 30
|
||||
ssec80 equ 33
|
||||
sdma80 equ 36
|
||||
read80 equ 39
|
||||
writ80 equ 42
|
||||
lsta80 equ 45
|
||||
sctr80 equ 48
|
||||
cseg
|
||||
jmp boot
|
||||
warmpt:
|
||||
jmp wboot
|
||||
jmp const
|
||||
jmp conin
|
||||
jmp conout
|
||||
jmp list
|
||||
jmp auxout
|
||||
jmp auxin
|
||||
jmp home
|
||||
jmp seldsk
|
||||
jmp settrk
|
||||
jmp setsec
|
||||
jmp setdma
|
||||
jmp read
|
||||
jmp write
|
||||
jmp listst
|
||||
jmp sectrn
|
||||
jmp conost
|
||||
jmp auxist
|
||||
jmp auxost
|
||||
jmp devtbl
|
||||
jmp devini
|
||||
jmp drvtbl
|
||||
jmp multio
|
||||
jmp flush
|
||||
jmp move
|
||||
jmp xmove
|
||||
jmp selmem
|
||||
jmp setbnk
|
||||
jmp userf
|
||||
jmp wboot
|
||||
jmp wboot
|
||||
boot:
|
||||
if ldrbios
|
||||
ret
|
||||
endif
|
||||
|
||||
wboot:
|
||||
lxi sp,stack80
|
||||
lxi h,warmpt
|
||||
shld bootram+1
|
||||
lhld @mxtpa
|
||||
shld bdos+1
|
||||
mvi a,jmpop
|
||||
sta bootram
|
||||
sta bdos
|
||||
mvi b,36
|
||||
lxi h,dffcb
|
||||
call clear
|
||||
lxi h,dffcb
|
||||
mvi m,1
|
||||
inx h
|
||||
lxi d,ccpstg
|
||||
lxi b,11
|
||||
call move
|
||||
lxi d,dffcb
|
||||
mvi c,open
|
||||
call bdos
|
||||
ora a
|
||||
jnz operr
|
||||
lxi d,tpa
|
||||
ldloop:
|
||||
push d
|
||||
mvi c,dma
|
||||
call bdos
|
||||
lxi d,dffcb
|
||||
mvi c,readseq
|
||||
call bdos
|
||||
ora a
|
||||
pop d
|
||||
jnz gocpm
|
||||
lxi h,128
|
||||
dad d
|
||||
xchg
|
||||
jmp ldloop
|
||||
gocpm:
|
||||
cpi 1
|
||||
jnz rderr
|
||||
jmp ccp
|
||||
operr:
|
||||
lxi d,opnmsg
|
||||
jmp errs
|
||||
rderr:
|
||||
lxi d,errmsg
|
||||
errs:
|
||||
mvi c,print
|
||||
call bdos
|
||||
mvi c,getch
|
||||
call bdos
|
||||
jmp wboot
|
||||
conost:
|
||||
auxist:
|
||||
auxost:
|
||||
mvi a,true
|
||||
devini:
|
||||
multio:
|
||||
xmove:
|
||||
selmem:
|
||||
setbnk:
|
||||
userf:
|
||||
ret
|
||||
flush:
|
||||
xra a
|
||||
ret
|
||||
devtbl:
|
||||
lxi h,-1
|
||||
ret
|
||||
drvtbl:
|
||||
lxi h,-2
|
||||
ret
|
||||
move:
|
||||
ldax d
|
||||
mov m,a
|
||||
inx h
|
||||
inx d
|
||||
dcx b
|
||||
mov a,b
|
||||
ora c
|
||||
jnz move
|
||||
ret
|
||||
const equ bios+cnst80
|
||||
conin equ bios+cnin80
|
||||
conout equ bios+cnot80
|
||||
list equ bios+list80
|
||||
auxout equ bios+punc80
|
||||
auxin equ bios+redr80
|
||||
home equ bios+home80
|
||||
settrk equ bios+strk80
|
||||
setsec equ bios+ssec80
|
||||
setdma equ bios+sdma80
|
||||
read equ bios+read80
|
||||
write equ bios+writ80
|
||||
listst equ bios+lsta80
|
||||
sectrn equ bios+sctr80
|
||||
seldsk:
|
||||
lxi h,0
|
||||
mov a,c
|
||||
cpi drives
|
||||
rnc
|
||||
mov b,e
|
||||
push b
|
||||
call bios+slds80
|
||||
pop b
|
||||
mov a,l
|
||||
ora h
|
||||
rz
|
||||
shld dph2
|
||||
mov l,c
|
||||
mvi h,0
|
||||
dad h
|
||||
dad h
|
||||
dad h
|
||||
dad h
|
||||
dad h
|
||||
dad h
|
||||
lxi d,tables
|
||||
dad d
|
||||
mov a,b
|
||||
ani 1
|
||||
rnz
|
||||
shld dph3
|
||||
mvi b,64
|
||||
call clear
|
||||
lhld dph2
|
||||
xchg
|
||||
lhld dph3
|
||||
lxi b,2
|
||||
call move
|
||||
lxi b,12
|
||||
dad b
|
||||
xchg
|
||||
lxi b,10
|
||||
dad b
|
||||
xchg
|
||||
lxi b,4
|
||||
call move
|
||||
xchg
|
||||
lxi b,32+17
|
||||
lhld dph3
|
||||
dad b
|
||||
push h
|
||||
xchg
|
||||
mvi a,-1
|
||||
stax d
|
||||
mov m,e
|
||||
inx h
|
||||
mov m,d
|
||||
inx h
|
||||
mvi m,-1
|
||||
inx h
|
||||
mvi m,-1
|
||||
lhld dph2
|
||||
lxi b,8
|
||||
dad b
|
||||
xchg
|
||||
pop h
|
||||
lxi b,10
|
||||
dad b
|
||||
lxi b,2
|
||||
call move
|
||||
xchg
|
||||
mov e,m
|
||||
inx h
|
||||
mov d,m
|
||||
lhld dph3
|
||||
lxi b,12
|
||||
dad b
|
||||
push h
|
||||
lhld dph3
|
||||
lxi b,32
|
||||
dad b
|
||||
pop b
|
||||
mov a,l
|
||||
stax b
|
||||
inx b
|
||||
mov a,h
|
||||
stax b
|
||||
lxi b,15
|
||||
call move
|
||||
if ldrbios
|
||||
lxi h,tables+64
|
||||
mvi b,15
|
||||
call clear
|
||||
lxi h,tables+64+15
|
||||
shld tables+64+10
|
||||
lxi h,tables+64
|
||||
shld tables+20
|
||||
mvi m,-1
|
||||
endif
|
||||
lhld dph3
|
||||
ret
|
||||
|
||||
clear:
|
||||
mvi m,0
|
||||
inx h
|
||||
dcr b
|
||||
jnz clear
|
||||
ret
|
||||
ccpstg:
|
||||
db 'CCP COM'
|
||||
opnmsg:
|
||||
db 0dh,0ah,'BIOS can''t open CCP.COM $'
|
||||
errmsg:
|
||||
db 0dh,0ah,'BIOS has bad sector in CCP.COM $'
|
||||
dseg
|
||||
dph2 ds 2
|
||||
dph3 ds 2
|
||||
tables ds 64*drives
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user