Digital Research
This commit is contained in:
2020-11-06 18:50:37 +01:00
parent 621ed8ccaf
commit 31738079c4
8481 changed files with 1888323 additions and 0 deletions

View File

@@ -0,0 +1,63 @@
*** BAMDUA SPECIAL SERIES ***
FOR EXPERIENCED DEVELOPERS ONLY vol.DV6
Morrow MD DSDD - Smith Disk 6 of 10
________________________________________
Bill's Drive A2: Generic CP/M+ for CP/M2
w/ GEN.SUB Copyright Bill Smith
note: the files on this -- user area/library/disk --
are property of bill smith, not Morrow Designs,
Copyright Bill Smith 1985 All Rights Reserved
Files 31/188k
BDOS3 .SPR 10k JNK .COM 4k
BIOS3 .SPR 2k LDRBIOS .ASM 14k
BIOS3 .SYM 2k LDRBIOS .REL 2k
CCP .COM 4k LDRBIOS .SYM 2k
CPM2 .COM 2k LIB .COM 8k
CPM3 .SYS 10k LINK .COM 16k
CPMLDR .COM 4k R .COM 0k
CPMLDR .REL 4k READ .ME 2k
CPMLDR .SYM 2k RMAC .COM 14k
DATE .COM 4k SBIOS .ASM 4k
DUMMY .REL 2k SCB .ASM 2k
GBIOS .ASM 14k SCB .REL 2k
GBIOS .SYM 2k SCB .SYM 2k
GEN .SUB 2k SID .COM 8k
GENCPM .COM 22k XREF .COM 16k
HBIOS .ASM 6k
PROGRAM ID:
GBIOS3.ASM
GENERIC LOADER AND BIOS FOR CP/M PLUS
FOR CP/M-80 V2.2 SYSTEMS UNBANKED NO HASHING
BIOS PERFORMS BLOCKING/DEBLOCKING
ORGANIZATIONAL COMMENTARY
This BIOS is designed to be the user's first step
in making an upgrade from CP/M-80 v2.2 to CP/M Plus v3.0.
This BIOS will function properly in most CP/M-2 systems,
even those with the BIOS in PROM.
FUNCTION:
This PROGRAM implements an UNBANKED, NON-HASHED,
UNBUFFERED BIOS for CP/M Plus version 3.0.
METHOD:
CP/M Plus allows many levels of sophistocation in
the implementation of the BIOS. At the highest levels,
the BIOS allows CP/M Plus to manage a potentially large
memory pool which acts like an instant access disk drive,
a substantial performence enhancement. At the lowest level,
the performance of CP/M Plus is the same as that of CP/M-80
version 2.2. This interface program is a simple implementation
of a CP/M Plus BIOS which operates as a parasite to the user's
existing BIOS for CP/M-80 version 2.2.
PURPOSE:
This BIOS allows the CP/M-80 v2.2 user to easily
upgrade to CP/M Plus v3.0 and enjoy its logical enhancements
at the same level of performance he has enjoyed with v2.2.
This BIOS can be an end-point since system performance
will be satisfactory. For users who own the hardware
required to implement hashing and buffering, this BIOS
will serve as a welcome starting point for further enhancement.


View File

@@ -0,0 +1,56 @@
-REQUEST.HIS: Requests re: further development
of CPM3ON2.LBR by others
Ilbert Butler 04/20/88
The files in CPM3ON2 were created by Bill Smith, while employed
at Morrow Designs & writing the BIOS & modifying the CP/M 3
operating system for Morrow MD hard disk computers. His idea was
to upgrade all existing unbanked CP/M 2.2 systems to CP/M 3.0.
This idea fell by the wayside, when Morrow turned all its atten-
tion to MS-DOS & its financial troubles. Digital Research, Inc.
was offered & declined to purchase this developmental work.
The original CPM3ON2 files are essentially a disk 'dump' of Bill
Smith's work, which he placed in the public domain, subject to
his copyright. For someone just doing a disk dump, this may seem
presumptuous, BUT if there is any further development on this,
could we PLEASE have respect for copyright, an orderly and intel-
ligible naming and numbering of versions, and reference to a com-
mon set of CP/M 3 utilities? . . . as follows:
0) Include Bill Smith copyright notice in all subsequent ver-
sions, add your own, IF you have made a SIGNIFICANT addition
or extension of code, not just modification & reassembly.
1) Later versions of a GENERIC CPM3ON2, i.e., for all CP/M 2.2
computers, as a source, can be consecutively numbered by
letters of the alphabet, e.g., CPM3ON2A, CPM3ON2B, etc. It
seems unlikely there would be more than 26 generic versions.
Most will be for specific brand hardware & ROM BIOS.
2) Versions intended for (or tested only on) particular hard-
ware brand & ROM BIOS should be differently named:
3ON2<brand initials>.<ARK or LBR>
E.g., 3ON2KP for Kaypro, 3ON2MD for Morrow MD, 3ON2OS for
CP/M 2 Osbornes, etc., also numbered by version.
3) Versions which require (or have been tested and run only
under) ZCPR3 should be separately named and numbered, e.g:
Z3PON2x = Z3PLUS on CP/M 2 system w/CPM 3 BDOS
Z3DON2x = ZRDOS (if any) replacing CP/M3 BDOS and run-
ning on CP/M 2 system
4) Check for current version number on BAMDUA (Morrow) RCP/M
PBBS, 415-654-3882. Registration & upgrade of privileges is
automatic (in the absence of system abuse). Avoid different
versions with the same name & version number.
5) In order to give users the opportunity to acquire system
utilities LEGALLY, and have them referring to the same set
of system files, I suggest we point out that a LARGE number
of disk sets of CP/M 3 system software are on the surplus
market for Osborne Executive, Morrow MD & Commodore 128.
Versions should use one of these 3, identify which one is
used, and have any overlays used to modify them come with
instructions for use with MLOAD.


Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,6 @@
FE22 @CIVEC FE24 @COVEC FE28 @AOVEC FE2A @LOVEC
FE35 @BNKBF FE3C @CRDMA FE3E @CRDSK FE43 @FX
FE41 @RESEL FE3F @VINFO FE44 @USRCD FE4B @ERMDE
FE58 @DATE FE5A @HOUR FE5B @MIN FE5C @SEC
FE62 @MXTPA FE26 @AIVEC


Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,7 @@
FE22 @CIVEC FE24 @COVEC FE26 @AIVEC FE28 @AOVEC
FE2A @LOVEC FE35 @BNKBF FE3C @CRDMA FE3E @CRDSK
FE3F @VINFO FE41 @RESEL FE43 @FX FE44 @USRCD
FE4A @MLTIO FE4B @ERMDE FE51 @ERDSK FE54 @MEDIA
FE57 @BFLGS FE58 @DATE FE5A @HOUR FE5B @MIN
FE5C @SEC FE62 @MXTPA


Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,6 @@
FE22 @CIVEC FE24 @COVEC FE26 @AIVEC FE28 @AOVEC
FE2A @LOVEC FE35 @BNKBF FE3C @CRDMA FE3E @CRDSK
FE43 @FX FE41 @RESEL FE3F @VINFO FE44 @USRCD
FE4B @ERMDE FE58 @DATE FE5A @HOUR FE5B @MIN
FE5C @SEC FE62 @MXTPA


Binary file not shown.

View File

@@ -0,0 +1,4 @@
cseg
ds 400h
end


Binary file not shown.

View File

@@ -0,0 +1,2 @@


View File

@@ -0,0 +1,506 @@
;--------------------------------------------------------
;
; PROGRAM ID: GBIOS3.ASM
; GENERIC LOADER AND BIOS FOR CP/M PLUS
; FOR CP/M-80 V2.2 SYSTEMS
; UNBANKED
; NO HASHING
; BIOS PERFORMS BLOCKING/DEBLOCKING
;
;--------------------------------------------------------
;
; ORGANIZATIONAL COMMENTARY
;
;--------------------------------------------------------
; This BIOS is designed to be the user's first step
;in making an upgrade from CP/M-80 v2.2 to CP/M Plus v3.0.
;This BIOS will function properly in most CP/M-2 systems,
;even those with the BIOS in PROM.
;
;FUNCTION:
; This PROGRAM implements an UNBANKED, NON-HASHED,
;UNBUFFERED BIOS for CP/M Plus version 3.0.
;
;METHOD:
; CP/M Plus allows many levels of sophistocation in
;the implementation of the BIOS. At the highest levels,
;the BIOS allows CP/M Plus to manage a potentially large
;memory pool which acts like an instant access disk drive;
;a substantial performence enhancement. At the lowest level,
;the performance of CP/M Plus is the same as that of CP/M-80
;version 2.2. This interface program is a simple implementation
;of a CP/M Plus BIOS which operates as a parasite to the user's
;existing BIOS for CP/M-80 version 2.2.
;
;PURPOSE:
; This BIOS allows the CP/M-80 v2.2 user to easily
;upgrade to CP/M Plus v3.0 and enjoy its logical enhancements
;at the same level of performance he has enjoyed with v2.2.
;This BIOS can be an end-point since system performance
;will be satisfactory. For users who own the hardware
;required to implement hashing and buffering, this BIOS
;will serve as a welcome starting point for further enhancement.
;
;ORGANIZATION:
; This BIOS is organized as follows:
;
; CONSTANTS
; CONFIGURATION CONSTANTS AND CONDITIONS ***
; EXTERNAL REFERENCES
; PUBLIC DECLARATIONS (NULL)
; RAM DEFINITIONS
; CP/M 2.2 LINKAGE EQUATES
;
; CP/M PLUS JUMP TABLE
; INITIALIZATION PROCESSES
; LOCAL AND NULL PROCESSES
; SIMPLE INDEXED PROCESSES
; COMPLEX INDEXED PROCESSES
; LOCAL SUBROUTINES
; INITIALIZED STORAGE
; UNINITIALIZED STORAGE
; END
;
; *** edit these
;--------------------------------------------------------
;
; OPERATIONAL COMMENTARY
;
;--------------------------------------------------------
;
; Digital Research owes much of its success to the
;foresight of its operating system designers who have seen
;fit to make their products upward compatible with one
;another. CP/M Plus is no exception, and so it is no
;surprise that the CP/M Plus BIOS shares many constructs
;with the earlier CP/M-80 v2.2.
;
; The CP/M Plus BIOS implements 32 entry points in
;its jump table. Of these, the first 17 correspond to the
;17 entries in the CP/M-80 v2.2 jump table. 14 of these
;are treated as identical to those in 2.2. These index
;directly into the 2.2 jump table. The remaining three in the
;2.2 set are BOOT, which is null, WBOOT, which loads CCP.COM,
;and SELDSK which creates all of the necessary disk data
;structures required by CP/M Plus based on those in the 2.2 BIOS.
;The remaining 15 entries in the CP/M Plus BIOS, with the
;single exception of MOVE, are implemented in one of
;the following ways:
;
; 1.) null, simply return.
; 2.) nearly null, do something really simple.
; 3.) tell a white lie.
;
;--------------------------------------------------------
;
; constants
;
;--------------------------------------------------------
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
;--------------------------------------------------------
;
; configuration constants and conditions
;
;--------------------------------------------------------
drives equ 5 ;number of drives supported
bios equ 0f200h ;address of your bios
;ldrbios equ true
ldrbios equ false
;--------------------------------------------------------
;
; external references
;
;--------------------------------------------------------
extrn @civec, @covec, @aovec, @lovec, @bnkbf
extrn @crdma
extrn @crdsk, @fx, @resel, @vinfo, @usrcd, @ermde
extrn @date, @hour, @min, @sec, @mxtpa
;--------------------------------------------------------
;
; public declarations
;
;--------------------------------------------------------
;
;currently null
;
;--------------------------------------------------------
;
; ram definitions
;
;--------------------------------------------------------
iobyte equ 3
tpa equ 100h
dffcb equ 5ch
stack80 equ 100h
bootram equ 0
bdos equ 5
ccp equ tpa
;--------------------------------------------------------
;
; cp/m v2.2 linkage equates
;
;--------------------------------------------------------
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
;--------------------------------------------------------
;
; cp/m plus version 3.0 jump table
;
;--------------------------------------------------------
cseg
; org (bios-(200h+64*drives)) and 0ff00h
;
jmp boot ;arrive here from cold start load
warmpt:
jmp wboot ;arrive here for warm start
jmp const ;return console input status
jmp conin ;read console character
jmp conout ;write conlole character
jmp list ;write list character
jmp auxout ;write aux character
jmp auxin ;read aux character
jmp home ;move to track zero on selected drive
jmp seldsk ;select disk drive
jmp settrk ;set track number
jmp setsec ;set sector number
jmp setdma ;set DMA address
jmp read ;read selected sector
jmp write ;write selected sector
jmp listst ;return list device status
jmp sectrn ;translate logical to physical sector number
jmp conost ;return console output status
jmp auxist ;return aux device input status
jmp auxost ;return aux device output status
jmp devtbl ;return address of character i/o table
jmp devini ;init character i/o devices
jmp drvtbl ;return address of disk drive table
jmp multio ;set number of consec. sec. to read/write
jmp flush ;flush user [de]blocking buffers
jmp move ;copy memory to memory
jmp xmove ;set banks for next move
jmp selmem ;select memory bank
jmp setbnk ;set bank for next DMA
jmp userf ;reserved for me.
jmp wboot
jmp wboot ;reserved for DRI
;
;
;--------------------------------------------------------
;
; initialization processes
;
;--------------------------------------------------------
boot:
if ldrbios
ret
endif
;boot is null, falls thru to wboot
wboot:
lxi sp,stack80
;
; initialize low memory jumps
;
lxi h,warmpt
shld bootram+1
lhld @mxtpa
shld bdos+1
mvi a,jmpop
sta bootram
sta bdos
;
; load ccp.com into tpa
;
mvi b,36
lxi h,dffcb
call clear ;clear fcb area in low ram
lxi h,dffcb
mvi m,1 ;drive a:
inx h
lxi d,ccpstg ;'ccp com'
lxi b,11 ;length of a file name
call move ;move filename to fcb
lxi d,dffcb
mvi c,open
call bdos ;open ccp.com
ora a
jnz operr ;if no error (
lxi d,tpa ;load into tpa
;
; the load loop
;
ldloop:
push d ;the current dma address
mvi c,dma
call bdos ;set dma for next 128 byte read
lxi d,dffcb
mvi c,readseq
call bdos ;read file data to tpa ram
ora a ;test for complete
pop d ;restore dma address
jnz gocpm ;exit when past file end
lxi h,128 ;advance dma address 128 bytes
dad d
xchg
jmp ldloop ;loop
;
;
gocpm:
cpi 1 ;only legal exit = past end of file
jnz rderr
jmp ccp ;now turn it loose
;
;
operr:
lxi d,opnmsg ;"BIOS can't open CCP.COM"
jmp errs
rderr:
lxi d,errmsg ;"BIOS has bad sector in CCP.COM"
errs:
mvi c,print
call bdos ;print the complaint
mvi c,getch
call bdos ;wait for any key
jmp wboot ;try again and again
;--------------------------------------------------------
;
; local and null processes
;
;--------------------------------------------------------
conost:
auxist:
auxost:
mvi a,true ;the white lies
devini:
multio:
xmove:
selmem:
setbnk:
userf:
ret ;the null routines
flush:
xra a ;not implemented
ret
devtbl:
lxi h,-1 ;not implemented
ret
drvtbl:
lxi h,-2 ;no table, no hashing
ret
move:
; z80 users may code as:
; xchg
; db 0edh,0b0h ;ldir
; xchg
; ret
;
ldax d
mov m,a
inx h
inx d
dcx b
mov a,b
ora c
jnz move
ret
;--------------------------------------------------------
;
; simple indexed processes
;
;--------------------------------------------------------
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
;--------------------------------------------------------
;
; complex indexed functions
;
;--------------------------------------------------------
;this routine functions as follows:
; 1.) the requested drive is saved for use as index later
; 2.) seldsk in bios 2.2 is called to set-up disk tables
; 3.) the returned bios 2.2 dph address is saved
; 4.) the saved drive number is used to index into a block
; of length (drives * 64-bytes). The 64-byte area
; reserved for this drive is initially cleared (zeros).
; 5.) using data taken from dph 2.2 returned by seldsk 2.2,
; a new dph for 3.0 is constructed, with dpb and dirbcb.
;
; like this:
;
; dph: 25 bytes
; null 7 bytes
; dpb: 17 bytes
; dirbcb: 15 bytes
;
; the dph references dpb and dirbcb. dirbcb references
; the dirbuf from dph 2.2. xlt, csv, alv are from dph2
; dpb3 is copied directly from the dpb in your bios
;
seldsk:
lxi h,0 ;bad drive
mov a,c ;drive request
cpi drives
rnc ;exit if no space alloc for drive
mov b,e ;prev. selected bit
push b ;save drive request
call bios+slds80 ;run seldsk 2.2
pop b ;restore drive request
mov a,l
ora h ;test for illegal drive
rz ;if legal_drive (
shld dph2 ;save address of dph 2.2
mov l,c ;drive number
mvi h,0
dad h ;*2
dad h ;*4
dad h ;*8
dad h ;*16
dad h ;*32
dad h ;*64...64 bytes per entry
lxi d,tables ;base of table space
dad d ;address of base block this drive
mov a,b ;selected bit
ani 1 ;lsb = 1 if previously selected
rnz ;don't reinit if prev. sel.
shld dph3 ;save address of new dph 3.0
mvi b,64 ;bytes to clear
call clear ;initialize space
lhld dph2
xchg
lhld dph3
lxi b,2
call move ;dph3.xlt
lxi b,12 ;offset to dph3.csv
dad b
xchg
lxi b,10 ;offset to dph2.csv
dad b
xchg
lxi b,4 ;2 words
call move ;dph3.csv, alv
xchg ;saving pointer to dph3.dirbcb
lxi b,32+17 ;offset to bcb area
lhld dph3 ;base
dad b
push h ;saving pointer to dirbcb
xchg ;restore pointer to dph3.dirbcb
mvi a,-1 ;dirbcb is unused
stax d ;set dirbcb.drv to unused status
mov m,e ;
inx h
mov m,d ;dph3.dirbcb <- dirbcb
inx h
mvi m,-1 ;
inx h
mvi m,-1 ;dph3.dtabcb <- empty
lhld dph2
lxi b,8 ;offset to dirbuf entry
dad b
xchg ;[de] is source
pop h ;restore pointer to dirbcb
lxi b,10 ;offset to bufadr entry
dad b
lxi b,2 ;1 word
call move ;dirbcb.bufadr <- dirbuf2.2
xchg ;[hl] points to dph2.dpb
mov e,m ;
inx h
mov d,m ;read address of dpb2
lhld dph3
lxi b,12 ;offset to dpb within dph3
dad b
push h ;points to dpb within dph3
lhld dph3
lxi b,32 ;offset to dpb3
dad b
pop b ;restore pointer to dph3.dpb
mov a,l
stax b ;
inx b
mov a,h
stax b ;dph3.dpb <- dpb3
lxi b,15 ;bytes in dpb2
call move ;fill-in dpb3 from dpb2
if ldrbios
lxi h,tables+64 ;empty space in dph3 for drive b:
mvi b,15 ;length of bcb
call clear
lxi h,tables+64+15 ;empty space past dtabcb
shld tables+64+10 ;dtabcb.bufadr
lxi h,tables+64 ;dtabcb address
shld tables+20 ;dph3.dtabcb
mvi m,-1 ;set dtabcb.drv to unused
endif
lhld dph3 ;the big lie
ret ; )
;--------------------------------------------------------
;
; local subroutines
;
;--------------------------------------------------------
clear:
mvi m,0
inx h
dcr b
jnz clear
ret
;--------------------------------------------------------
;
; initialized storage
;
;--------------------------------------------------------
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 $'
;--------------------------------------------------------
;
; uninitialized storage
;
;--------------------------------------------------------
dseg
dph2 ds 2
dph3 ds 2
tables ds 64*drives
end
;--------------------------------------------------------
;cp/m is a registered trademark of digital research, inc.
;you already knew that, but they wanted us to remind you.
;--------------------------------------------------------


View File

@@ -0,0 +1,20 @@
F215 AUXIN 00D6 AUXIST 00D6 AUXOST F212 AUXOUT 0005 BDOS
F200 BIOS 0060 BOOT 0000 BOOT80 0000 BOOTRAM 0100 CCP
018B CCPSTG 0183 CLEAR 0009 CNIN80 000C CNOT80 0006 CNST80
F209 CONIN 00D6 CONOST F20C CONOUT F206 CONST 00D8 DEVINI
00DB DEVTBL 005C DFFCB 001A DMA 0000 DPH2 0002 DPH3
0010 DRIVES 00DF DRVTBL 01B1 ERRMSG 00C9 ERRS 0000 FALSE
00D9 FLUSH 0001 GETCH 00B8 GOCPM F218 HOME 0018 HOME80
0003 IOBYTE 00C3 JMPOP 009D LDLOOP 0000 LDRBIOS F20F LIST
000F LIST80 F22D LISTST 002D LSTA80 00E3 MOVE 00D8 MULTIO
000F OPEN 00C0 OPERR 0196 OPNMSG 0009 PRINT 0012 PUNC80
00C6 RDERR F227 READ 0027 READ80 0014 READSEQ 0015 REDR80
0030 SCTR80 0024 SDMA80 F230 SECTRN 00EE SELDSK 00D8 SELMEM
00D8 SETBNK F224 SETDMA F221 SETSEC F21E SETTRK 001B SLDS80
0021 SSEC80 0100 STACK80 001E STRK80 0004 TABLES 0100 TPA
FFFF TRUE 00D8 USERF 0003 WARM80 0003 WARMPT 0060 WBOOT
002A WRIT80 F22A WRITE 00D8 XMOVE 0000 @AOVEC 0000 @BNKBF
0000 @CIVEC 0000 @COVEC 0000 @CRDMA 0000 @CRDSK 0000 @DATE
0000 @ERMDE 0000 @FX 0000 @HOUR 0000 @LOVEC 0000 @MIN
0000 @MXTPA 0000 @RESEL 0000 @SEC 0000 @USRCD 0000 @VINFO


View File

@@ -0,0 +1,6 @@
rmac ldrbios
link cpmldr,scb,ldrbios
rmac gbios
link bios3[os]=gbios,scb
gencpm


Binary file not shown.

View File

@@ -0,0 +1,195 @@
;--------------------------------------------------------
;
; PROGRAM ID: GBIOS3.ASM
; GENERIC LOADER AND BIOS FOR CP/M PLUS
; FOR CP/M-80 V2.2 SYSTEMS
; UNBANKED
; NO HASHING
; BIOS PERFORMS BLOCKING/DEBLOCKING
;
;--------------------------------------------------------
;
; ORGANIZATIONAL COMMENTARY
;
;--------------------------------------------------------
; This BIOS is designed to be the user's first step
;in making an upgrade from CP/M-80 v2.2 to CP/M Plus v3.0.
;This BIOS will function properly in most CP/M-2 systems,
;even those with the BIOS in PROM.
;
;FUNCTION:
; This PROGRAM implements an UNBANKED, NON-HASHED,
;UNBUFFERED BIOS for CP/M Plus version 3.0.
;
;METHOD:
; CP/M Plus allows many levels of sophistocation in
;the implementation of the BIOS. At the highest levels,
;the BIOS allows CP/M Plus to manage a potentially large
;memory pool which acts like an instant access disk drive;
;a substantial performence enhancement. At the lowest level,
;the performance of CP/M Plus is the same as that of CP/M-80
;version 2.2. This interface program is a simple implementation
;of a CP/M Plus BIOS which operates as a parasite to the user's
;existing BIOS for CP/M-80 version 2.2.
;
;PURPOSE:
; This BIOS allows the CP/M-80 v2.2 user to easily
;upgrade to CP/M Plus v3.0 and enjoy its logical enhancements
;at the same level of performance he has enjoyed with v2.2.
;This BIOS can be an end-point since system performance
;will be satisfactory. For users who own the hardware
;required to implement hashing and buffering, this BIOS
;will serve as a welcome starting point for further enhancement.
;
;ORGANIZATION:
; This BIOS is organized as follows:
;
; CONSTANTS
; CONFIGURATION CONSTANTS AND CONDITIONS ***
; EXTERNAL REFERENCES
; PUBLIC DECLARATIONS (NULL)
; RAM DEFINITIONS
; CP/M 2.2 LINKAGE EQUATES
;
; CP/M PLUS JUMP TABLE
; INITIALIZATION PROCESSES
; LOCAL AND NULL PROCESSES
; SIMPLE INDEXED PROCESSES
; COMPLEX INDEXED PROCESSES
; LOCAL SUBROUTINES
; INITIALIZED STORAGE
; UNINITIALIZED STORAGE
; END
;
; *** edit these
;--------------------------------------------------------
;
; OPERATIONAL COMMENTARY
;
;--------------------------------------------------------
;
; Digital Research owes much of its success to the
;foresight of its operating system designers who have seen
;fit to make their products upward compatible with one
;another. CP/M Plus is no exception, and so it is no
;surprise that the CP/M Plus BIOS shares many constructs
;with the earlier CP/M-80 v2.2.
;
; The CP/M Plus BIOS implements 32 entry points in
;its jump table. Of these, the first 17 correspond to the
;17 entries in the CP/M-80 v2.2 jump table. 14 of these
;are treated as identical to those in 2.2. These index
;directly into the 2.2 jump table. The remaining three in the
;2.2 set are BOOT, which is null, WBOOT, which loads CCP.COM,
;and SELDSK which creates all of the necessary disk data
;structures required by CP/M Plus based on those in the 2.2 BIOS.
;The remaining 15 entries in the CP/M Plus BIOS, with the
;single exception of MOVE, are implemented in one of
;the following ways:
;
; 1.) null, simply return.
; 2.) nearly null, do something really simple.
; 3.) tell a white lie.
;
;--------------------------------------------------------
;
; constants
;
;--------------------------------------------------------
;--------------------------------------------------------
;
; configuration constants and conditions
;
;--------------------------------------------------------
;ldrbios equ true
;--------------------------------------------------------
;
; external references
;
;--------------------------------------------------------
;--------------------------------------------------------
;
; public declarations
;
;--------------------------------------------------------
;
;currently null
;
;--------------------------------------------------------
;
; ram definitions
;
;--------------------------------------------------------
;--------------------------------------------------------
;
; cp/m v2.2 linkage equates
;
;--------------------------------------------------------
;--------------------------------------------------------
;
; cp/m plus version 3.0 jump table
;
;--------------------------------------------------------
; org (bios-(200h+64*drives)) and 0ff00h
;
;
;
;--------------------------------------------------------
;
; initialization processes
;
;--------------------------------------------------------
;
; initialize low memory jumps
;
;
; load ccp.com into tpa
;
;
; the load loop
;
;
;
;
;
;--------------------------------------------------------
;
; local and null processes
;
;--------------------------------------------------------
; z80 users may code as:
; xchg
; db 0edh,0b0h ;ldir
; xchg
; ret
;
;--------------------------------------------------------
;
; simple indexed processes
;
;--------------------------------------------------------
;--------------------------------------------------------
;
; complex indexed functions
;
;--------------------------------------------------------
;--------------------------------------------------------
;
; local subroutines
;
;--------------------------------------------------------
;--------------------------------------------------------
;
; initialized storage
;
;--------------------------------------------------------
;--------------------------------------------------------
;
; uninitialized storage
;
;--------------------------------------------------------
;--------------------------------------------------------
;cp/m is a registered trademark of digital research, inc.
;you already knew that, but they wanted us to remind you.
;--------------------------------------------------------


Binary file not shown.

View File

@@ -0,0 +1,506 @@
;--------------------------------------------------------
;
; PROGRAM ID: GBIOS3.ASM
; GENERIC LOADER AND BIOS FOR CP/M PLUS
; FOR CP/M-80 V2.2 SYSTEMS
; UNBANKED
; NO HASHING
; BIOS PERFORMS BLOCKING/DEBLOCKING
;
;--------------------------------------------------------
;
; ORGANIZATIONAL COMMENTARY
;
;--------------------------------------------------------
; This BIOS is designed to be the user's first step
;in making an upgrade from CP/M-80 v2.2 to CP/M Plus v3.0.
;This BIOS will function properly in most CP/M-2 systems,
;even those with the BIOS in PROM.
;
;FUNCTION:
; This PROGRAM implements an UNBANKED, NON-HASHED,
;UNBUFFERED BIOS for CP/M Plus version 3.0.
;
;METHOD:
; CP/M Plus allows many levels of sophistocation in
;the implementation of the BIOS. At the highest levels,
;the BIOS allows CP/M Plus to manage a potentially large
;memory pool which acts like an instant access disk drive;
;a substantial performence enhancement. At the lowest level,
;the performance of CP/M Plus is the same as that of CP/M-80
;version 2.2. This interface program is a simple implementation
;of a CP/M Plus BIOS which operates as a parasite to the user's
;existing BIOS for CP/M-80 version 2.2.
;
;PURPOSE:
; This BIOS allows the CP/M-80 v2.2 user to easily
;upgrade to CP/M Plus v3.0 and enjoy its logical enhancements
;at the same level of performance he has enjoyed with v2.2.
;This BIOS can be an end-point since system performance
;will be satisfactory. For users who own the hardware
;required to implement hashing and buffering, this BIOS
;will serve as a welcome starting point for further enhancement.
;
;ORGANIZATION:
; This BIOS is organized as follows:
;
; CONSTANTS
; CONFIGURATION CONSTANTS AND CONDITIONS ***
; EXTERNAL REFERENCES
; PUBLIC DECLARATIONS (NULL)
; RAM DEFINITIONS
; CP/M 2.2 LINKAGE EQUATES
;
; CP/M PLUS JUMP TABLE
; INITIALIZATION PROCESSES
; LOCAL AND NULL PROCESSES
; SIMPLE INDEXED PROCESSES
; COMPLEX INDEXED PROCESSES
; LOCAL SUBROUTINES
; INITIALIZED STORAGE
; UNINITIALIZED STORAGE
; END
;
; *** edit these
;--------------------------------------------------------
;
; OPERATIONAL COMMENTARY
;
;--------------------------------------------------------
;
; Digital Research owes much of its success to the
;foresight of its operating system designers who have seen
;fit to make their products upward compatible with one
;another. CP/M Plus is no exception, and so it is no
;surprise that the CP/M Plus BIOS shares many constructs
;with the earlier CP/M-80 v2.2.
;
; The CP/M Plus BIOS implements 32 entry points in
;its jump table. Of these, the first 17 correspond to the
;17 entries in the CP/M-80 v2.2 jump table. 14 of these
;are treated as identical to those in 2.2. These index
;directly into the 2.2 jump table. The remaining three in the
;2.2 set are BOOT, which is null, WBOOT, which loads CCP.COM,
;and SELDSK which creates all of the necessary disk data
;structures required by CP/M Plus based on those in the 2.2 BIOS.
;The remaining 15 entries in the CP/M Plus BIOS, with the
;single exception of MOVE, are implemented in one of
;the following ways:
;
; 1.) null, simply return.
; 2.) nearly null, do something really simple.
; 3.) tell a white lie.
;
;--------------------------------------------------------
;
; constants
;
;--------------------------------------------------------
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
;--------------------------------------------------------
;
; configuration constants and conditions
;
;--------------------------------------------------------
drives equ 2 ;number of drives supported
bios equ 0e900h ;address of your bios
ldrbios equ true
;ldrbios equ false
;--------------------------------------------------------
;
; external references
;
;--------------------------------------------------------
extrn @civec, @covec, @aovec, @lovec, @bnkbf
extrn @crdma
extrn @crdsk, @fx, @resel, @vinfo, @usrcd, @ermde
extrn @date, @hour, @min, @sec, @mxtpa
;--------------------------------------------------------
;
; public declarations
;
;--------------------------------------------------------
;
;currently null
;
;--------------------------------------------------------
;
; ram definitions
;
;--------------------------------------------------------
iobyte equ 3
tpa equ 100h
dffcb equ 5ch
stack80 equ 100h
bootram equ 0
bdos equ 5
ccp equ tpa
;--------------------------------------------------------
;
; cp/m v2.2 linkage equates
;
;--------------------------------------------------------
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
;--------------------------------------------------------
;
; cp/m plus version 3.0 jump table
;
;--------------------------------------------------------
cseg
; org (bios-(200h+64*drives)) and 0ff00h
;
jmp boot ;arrive here from cold start load
warmpt:
jmp wboot ;arrive here for warm start
jmp const ;return console input status
jmp conin ;read console character
jmp conout ;write conlole character
jmp list ;write list character
jmp auxout ;write aux character
jmp auxin ;read aux character
jmp home ;move to track zero on selected drive
jmp seldsk ;select disk drive
jmp settrk ;set track number
jmp setsec ;set sector number
jmp setdma ;set DMA address
jmp read ;read selected sector
jmp write ;write selected sector
jmp listst ;return list device status
jmp sectrn ;translate logical to physical sector number
jmp conost ;return console output status
jmp auxist ;return aux device input status
jmp auxost ;return aux device output status
jmp devtbl ;return address of character i/o table
jmp devini ;init character i/o devices
jmp drvtbl ;return address of disk drive table
jmp multio ;set number of consec. sec. to read/write
jmp flush ;flush user [de]blocking buffers
jmp move ;copy memory to memory
jmp xmove ;set banks for next move
jmp selmem ;select memory bank
jmp setbnk ;set bank for next DMA
jmp userf ;reserved for me.
jmp wboot
jmp wboot ;reserved for DRI
;
;
;--------------------------------------------------------
;
; initialization processes
;
;--------------------------------------------------------
boot:
if ldrbios
ret
endif
;boot is null, falls thru to wboot
wboot:
lxi sp,stack80
;
; initialize low memory jumps
;
lxi h,warmpt
shld bootram+1
lhld @mxtpa
shld bdos+1
mvi a,jmpop
sta bootram
sta bdos
;
; load ccp.com into tpa
;
mvi b,36
lxi h,dffcb
call clear ;clear fcb area in low ram
lxi h,dffcb
mvi m,1 ;drive a:
inx h
lxi d,ccpstg ;'ccp com'
lxi b,11 ;length of a file name
call move ;move filename to fcb
lxi d,dffcb
mvi c,open
call bdos ;open ccp.com
ora a
jnz operr ;if no error (
lxi d,tpa ;load into tpa
;
; the load loop
;
ldloop:
push d ;the current dma address
mvi c,dma
call bdos ;set dma for next 128 byte read
lxi d,dffcb
mvi c,readseq
call bdos ;read file data to tpa ram
ora a ;test for complete
pop d ;restore dma address
jnz gocpm ;exit when past file end
lxi h,128 ;advance dma address 128 bytes
dad d
xchg
jmp ldloop ;loop
;
;
gocpm:
cpi 1 ;only legal exit = past end of file
jnz rderr
jmp ccp ;now turn it loose
;
;
operr:
lxi d,opnmsg ;"BIOS can't open CCP.COM"
jmp errs
rderr:
lxi d,errmsg ;"BIOS has bad sector in CCP.COM"
errs:
mvi c,print
call bdos ;print the complaint
mvi c,getch
call bdos ;wait for any key
jmp wboot ;try again and again
;--------------------------------------------------------
;
; local and null processes
;
;--------------------------------------------------------
conost:
auxist:
auxost:
mvi a,true ;the white lies
devini:
multio:
xmove:
selmem:
setbnk:
userf:
ret ;the null routines
flush:
xra a ;not implemented
ret
devtbl:
lxi h,-1 ;not implemented
ret
drvtbl:
lxi h,-2 ;no table, no hashing
ret
move:
; z80 users may code as:
; xchg
; db 0edh,0b0h ;ldir
; xchg
; ret
;
ldax d
mov m,a
inx h
inx d
dcx b
mov a,b
ora c
jnz move
ret
;--------------------------------------------------------
;
; simple indexed processes
;
;--------------------------------------------------------
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
;--------------------------------------------------------
;
; complex indexed functions
;
;--------------------------------------------------------
;this routine functions as follows:
; 1.) the requested drive is saved for use as index later
; 2.) seldsk in bios 2.2 is called to set-up disk tables
; 3.) the returned bios 2.2 dph address is saved
; 4.) the saved drive number is used to index into a block
; of length (drives * 64-bytes). The 64-byte area
; reserved for this drive is initially cleared (zeros).
; 5.) using data taken from dph 2.2 returned by seldsk 2.2,
; a new dph for 3.0 is constructed, with dpb and dirbcb.
;
; like this:
;
; dph: 25 bytes
; null 7 bytes
; dpb: 17 bytes
; dirbcb: 15 bytes
;
; the dph references dpb and dirbcb. dirbcb references
; the dirbuf from dph 2.2. xlt, csv, alv are from dph2
; dpb3 is copied directly from the dpb in your bios
;
seldsk:
lxi h,0 ;bad drive
mov a,c ;drive request
cpi drives
rnc ;exit if no space alloc for drive
mov b,e ;prev. selected bit
push b ;save drive request
call bios+slds80 ;run seldsk 2.2
pop b ;restore drive request
mov a,l
ora h ;test for illegal drive
rz ;if legal_drive (
shld dph2 ;save address of dph 2.2
mov l,c ;drive number
mvi h,0
dad h ;*2
dad h ;*4
dad h ;*8
dad h ;*16
dad h ;*32
dad h ;*64...64 bytes per entry
lxi d,tables ;base of table space
dad d ;address of base block this drive
mov a,b ;selected bit
ani 1 ;lsb = 1 if previously selected
rnz ;don't reinit if prev. sel.
shld dph3 ;save address of new dph 3.0
mvi b,64 ;bytes to clear
call clear ;initialize space
lhld dph2
xchg
lhld dph3
lxi b,2
call move ;dph3.xlt
lxi b,12 ;offset to dph3.csv
dad b
xchg
lxi b,10 ;offset to dph2.csv
dad b
xchg
lxi b,4 ;2 words
call move ;dph3.csv, alv
xchg ;saving pointer to dph3.dirbcb
lxi b,32+17 ;offset to bcb area
lhld dph3 ;base
dad b
push h ;saving pointer to dirbcb
xchg ;restore pointer to dph3.dirbcb
mvi a,-1 ;dirbcb is unused
stax d ;set dirbcb.drv to unused status
mov m,e ;
inx h
mov m,d ;dph3.dirbcb <- dirbcb
inx h
mvi m,-1 ;
inx h
mvi m,-1 ;dph3.dtabcb <- empty
lhld dph2
lxi b,8 ;offset to dirbuf entry
dad b
xchg ;[de] is source
pop h ;restore pointer to dirbcb
lxi b,10 ;offset to bufadr entry
dad b
lxi b,2 ;1 word
call move ;dirbcb.bufadr <- dirbuf2.2
xchg ;[hl] points to dph2.dpb
mov e,m ;
inx h
mov d,m ;read address of dpb2
lhld dph3
lxi b,12 ;offset to dpb within dph3
dad b
push h ;points to dpb within dph3
lhld dph3
lxi b,32 ;offset to dpb3
dad b
pop b ;restore pointer to dph3.dpb
mov a,l
stax b ;
inx b
mov a,h
stax b ;dph3.dpb <- dpb3
lxi b,15 ;bytes in dpb2
call move ;fill-in dpb3 from dpb2
if ldrbios
lxi h,tables+64 ;empty space in dph3 for drive b:
mvi b,15 ;length of bcb
call clear
lxi h,tables+64+15 ;empty space past dtabcb
shld tables+64+10 ;dtabcb.bufadr
lxi h,tables+64 ;dtabcb address
shld tables+20 ;dph3.dtabcb
mvi m,-1 ;set dtabcb.drv to unused
endif
lhld dph3 ;the big lie
ret ; )
;--------------------------------------------------------
;
; local subroutines
;
;--------------------------------------------------------
clear:
mvi m,0
inx h
dcr b
jnz clear
ret
;--------------------------------------------------------
;
; initialized storage
;
;--------------------------------------------------------
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 $'
;--------------------------------------------------------
;
; uninitialized storage
;
;--------------------------------------------------------
dseg
dph2 ds 2
dph3 ds 2
tables ds 64*drives
end
;--------------------------------------------------------
;cp/m is a registered trademark of digital research, inc.
;you already knew that, but they wanted us to remind you.
;--------------------------------------------------------


Binary file not shown.

View File

@@ -0,0 +1,20 @@
E915 AUXIN 00D7 AUXIST 00D7 AUXOST E912 AUXOUT 0005 BDOS
E900 BIOS 0060 BOOT 0000 BOOT80 0000 BOOTRAM 0100 CCP
01A2 CCPSTG 019A CLEAR 0009 CNIN80 000C CNOT80 0006 CNST80
E909 CONIN 00D7 CONOST E90C CONOUT E906 CONST 00D9 DEVINI
00DC DEVTBL 005C DFFCB 001A DMA 0000 DPH2 0002 DPH3
0002 DRIVES 00E0 DRVTBL 01C8 ERRMSG 00CA ERRS 0000 FALSE
00DA FLUSH 0001 GETCH 00B9 GOCPM E918 HOME 0018 HOME80
0003 IOBYTE 00C3 JMPOP 009E LDLOOP FFFF LDRBIOS E90F LIST
000F LIST80 E92D LISTST 002D LSTA80 00E4 MOVE 00D9 MULTIO
000F OPEN 00C1 OPERR 01AD OPNMSG 0009 PRINT 0012 PUNC80
00C7 RDERR E927 READ 0027 READ80 0014 READSEQ 0015 REDR80
0030 SCTR80 0024 SDMA80 E930 SECTRN 00EF SELDSK 00D9 SELMEM
00D9 SETBNK E924 SETDMA E921 SETSEC E91E SETTRK 001B SLDS80
0021 SSEC80 0100 STACK80 001E STRK80 0004 TABLES 0100 TPA
FFFF TRUE 00D9 USERF 0003 WARM80 0003 WARMPT 0061 WBOOT
002A WRIT80 E92A WRITE 00D9 XMOVE 0000 @AOVEC 0000 @BNKBF
0000 @CIVEC 0000 @COVEC 0000 @CRDMA 0000 @CRDSK 0000 @DATE
0000 @ERMDE 0000 @FX 0000 @HOUR 0000 @LOVEC 0000 @MIN
0000 @MXTPA 0000 @RESEL 0000 @SEC 0000 @USRCD 0000 @VINFO


Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1 @@
Bring up CP/M 3 on your CP/M 2 BIOS: This is a file of source code for CP/M 3 BIOS's that will help you bring up CP/M 3 with your existing CP/M 2.2 BIOS. There are no DOC files, but the ASM files are heavily commented. This should be a good resource to aid in bringing up CP/M 3 for the first time.

Binary file not shown.

View 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


View File

@@ -0,0 +1,28 @@
title 'System Control Block Definition for CP/M3 BIOS'
public @civec, @covec, @aivec, @aovec, @lovec, @bnkbf
public @crdma
public @crdsk, @fx, @resel, @vinfo, @usrcd, @ermde
public @date, @hour, @min, @sec, @mxtpa
scb$base equ 0fe00h ;base of the scb
@civec equ scb$base+22h
@covec equ scb$base+24h
@aivec equ scb$base+26h
@aovec equ scb$base+28h
@lovec equ scb$base+2ah
@bnkbf equ scb$base+35h
@crdma equ scb$base+3ch
@crdsk equ scb$base+3eh
@vinfo equ scb$base+3fh
@resel equ scb$base+41h
@fx equ scb$base+43h
@usrcd equ scb$base+44h
@ermde equ scb$base+4bh
@date equ scb$base+58h
@hour equ scb$base+5ah
@min equ scb$base+5bh
@sec equ scb$base+5ch
?erjmp equ scb$base+5fh
@mxtpa equ scb$base+62h
end


Binary file not shown.

View File

@@ -0,0 +1,5 @@
FE00 SCBBASE FE5F ?ERJMP FE26 @AIVEC FE28 @AOVEC FE35 @BNKBF
FE22 @CIVEC FE24 @COVEC FE3C @CRDMA FE3E @CRDSK FE58 @DATE
FE4B @ERMDE FE43 @FX FE5A @HOUR FE2A @LOVEC FE5B @MIN
FE62 @MXTPA FE41 @RESEL FE5C @SEC FE44 @USRCD FE3F @VINFO


Binary file not shown.

Binary file not shown.