mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-25 09:24:19 +00:00
541 lines
12 KiB
Plaintext
541 lines
12 KiB
Plaintext
;*****************************************************
|
|
;*
|
|
;* System Data Area
|
|
;*
|
|
;*****************************************************
|
|
|
|
CSEG
|
|
org 0ch
|
|
;dev_ver
|
|
db 6 ;development system data version
|
|
;SYSDAT.CON has 16 byte code segment
|
|
|
|
DSEG
|
|
org 0
|
|
|
|
;
|
|
;This data is initialized by GENCCPM
|
|
;
|
|
|
|
;Module Table - contains the FAR CALL addresses
|
|
; of each module for their initialization
|
|
; and entry routines.
|
|
;
|
|
; +---+---+---+---+---+---+---+---+
|
|
; | entry | initialize |
|
|
; +---+---+---+---+---+---+---+---+
|
|
;
|
|
; entry init
|
|
; ----- ----
|
|
|
|
module_table equ dword ptr (offset $)
|
|
supmod equ (offset $)
|
|
dw 3,0, 0,0 ;SUP
|
|
|
|
rtmmod equ (offset $)
|
|
dw 3,0, 0,0 ;RTM
|
|
|
|
memmod equ (offset $)
|
|
|
|
dw 3,0, 0,0 ;MEM
|
|
|
|
ciomod equ (offset $)
|
|
dw 3,0, 0,0 ;CIO
|
|
|
|
bdosmod equ (offset $)
|
|
dw 3,0, 0,0 ;BDOS
|
|
|
|
xiosmod equ (offset $)
|
|
dw 0C03H,0, 0C00H,0 ;XIOS
|
|
|
|
netmod equ (offset $)
|
|
dw 3,0, 0,0 ;NET
|
|
|
|
dispatcher equ (offset $)
|
|
dw 0,0 ;far dispatcher (does IRET)
|
|
|
|
rtm_pdisp equ (offset $)
|
|
dw 0,0 ;far dispatcher (does RETF)
|
|
|
|
; location in memory of MP/M-86 or CCP/M-86
|
|
|
|
osseg dw 1008h ;1st parag. of MP/M-86 or CCP/M
|
|
rspseg dw 0 ;segment of first RSP
|
|
endseg dw 0 ;1st parag. outside of MP/M or CCP/M
|
|
|
|
module_map db 03fh ;bit map of modules that exist
|
|
; in this system. low order bit
|
|
; corresponds to 1st module in
|
|
; module table. If bit is on,then
|
|
; module exists.
|
|
|
|
; some answers to GENCCPM questions
|
|
|
|
ncns db 4 ;# system console devices
|
|
nlst db 1 ;# system list devices
|
|
nccb db 5 ;# character control blocks
|
|
nflags db 20h ;# flags
|
|
srchdisk db 1 ;system disk
|
|
mmp dw 04000h ;Max Memory per process
|
|
nslaves db 0 ;Number of network requestors
|
|
dayfile db 0 ;if 0ffh,display command info
|
|
tempdisk db 1 ;Temporary disk
|
|
tickspersec db 60 ;Number of ticks per second
|
|
|
|
; data lists created by GENCCPM
|
|
|
|
free_root dw 0 ;locked unused list
|
|
ccb dw 0 ;addr. Console Ctrl Blk Table
|
|
flags dw 0 ;addr. Flag Table
|
|
mdul dw 020h ;Mem descr. Unused List
|
|
mfl dw 0 ;Memory Free List
|
|
pul dw 014h ;Proc. descr. Unused List
|
|
qul dw 020h ;QCB Unused List
|
|
;MAU for queue buffer info
|
|
qmau dw 0 ;link
|
|
dw 0 ;start segment
|
|
dw 400h ;length
|
|
dw 0 ;plist
|
|
|
|
;
|
|
;This data is initialized at Assembly time
|
|
;
|
|
|
|
rlr dw initpd ;Ready List Root
|
|
dlr dw 0 ;Delay List Root
|
|
drl dw 0 ;Dispatcher Ready List
|
|
plr dw 0 ;Poll List Root
|
|
scl dw 0 ;Shared Code List
|
|
thrdrt dw initpd ;Process Thread Root
|
|
qlr dw mxloadqd;Queue List Root
|
|
mal dw 0 ;Memory Alloc List
|
|
|
|
; Version Information
|
|
|
|
version dw unknown ;addr. version str in SUP code segment
|
|
;set by GENCCPM if CCP/M
|
|
if mpm
|
|
bvernum dw 01130h ;MPM-86 w/BDOS v3.0
|
|
osvernum dw 01121h ;MPM-86 V2.1
|
|
endif
|
|
|
|
if ccpm
|
|
bvernum dw 01431h ;CCP/M w/BDOS 3.1
|
|
osvernum dw 01420h ;CCP/M V2.0
|
|
endif
|
|
|
|
; Time of Day Structure
|
|
|
|
tod rw 0
|
|
tod_day dw 067EH ;day since 1/1/78 (09 Jul 82)
|
|
tod_hr db 12h ;hour of day
|
|
tod_min db 00h ;minute of hour
|
|
tod_sec db 00h ;second of minute
|
|
|
|
; info from XIOS
|
|
|
|
ncondev db 0 ;# console devs in XIOS
|
|
nlstdev db 0 ;# character devs in XIOS
|
|
nciodev db 0 ;# character i/o devices
|
|
; supported by XIOS.
|
|
lcb dw 0 ; list control block address
|
|
openvec dw 0 ; open file vector
|
|
lock_max db 20h ; Max Locked Records/process
|
|
open_max db 20h ; Max Open Files/process
|
|
owner8087 dw 0 ; no one owns it initially
|
|
rw 1 ; RESERVED
|
|
cmod db 0ffh ; BDOS Compatibility
|
|
ndp8087 db false ; true 8087 exits
|
|
; (Numeric Data Processor)
|
|
err_intercept dw 0,0 ; BDOS does a callf here
|
|
; to print error msgs,
|
|
; if second word is <> 0
|
|
slr dw offset mem_spb ; Sync List Root
|
|
dw 0,0,0,0 ; RESERVED
|
|
|
|
|
|
; SYSENT Table - MP/M-86, CCP/M-86 system function information
|
|
; The supervisor calls the appropriate module
|
|
; through this table.
|
|
;
|
|
; Low Byte High Byte
|
|
; +----+----+--------+
|
|
; |function |flgs|mod|
|
|
; +----+----+--------+
|
|
;
|
|
; flgs - 001h - network intercept
|
|
; if on, the network module is called
|
|
; first, on return, either the function
|
|
; is called or it is considered complete
|
|
; depending on the return.
|
|
; mod - module number (0-15)
|
|
; function- function to call within module
|
|
|
|
; note: sup function 0 returns not the
|
|
; implemented error code to the caller,
|
|
; and sup function 1 returns the illegal
|
|
; function error code.
|
|
|
|
; standard CPM-2 functions
|
|
|
|
; func, module
|
|
|
|
org ((offset $) + 1) and 0fffeh
|
|
|
|
sysent db 0, rtm ; 0-system reset
|
|
db 0, cio ; 1-conin
|
|
db 1, cio ; 2-conout
|
|
db 0, sup ; 3-raw conin/aux in
|
|
db 0, sup ; 4-raw conout/aux out
|
|
db 4, cio ; 5-list out
|
|
db 5, cio ; 6-raw conio
|
|
db 0, sup ; 7-getiobyte
|
|
db 0, sup ; 8-setiobyte
|
|
db 6, cio ; 9-conwrite
|
|
db 7, cio ; 10-conread
|
|
db 8, cio ; 11-constat
|
|
db 2, sup ; 12-get version
|
|
db 0, bdos ; 13-diskreset
|
|
db 1, bdos ; 14-diskselect
|
|
db 2, bdos ; 15-file open
|
|
db 3, bdos ; 16-file close
|
|
db 4, bdos ; 17-search first
|
|
db 5, bdos ; 18-search next
|
|
db 6, bdos ; 19-file delete
|
|
db 7, bdos ; 20-file read seq
|
|
db 8, bdos ; 21-file write seq
|
|
db 9, bdos ; 22-file make
|
|
db 10, bdos ; 23-file rename
|
|
db 11, bdos ; 24-login vector
|
|
db 12, bdos ; 25-get def disk
|
|
db 13, bdos ; 26-set dma
|
|
db 14, bdos ; 27-get alloc vector
|
|
db 15, bdos ; 28-write protect
|
|
db 16, bdos ; 29-get r/0 vector
|
|
db 17, bdos ; 30-set file attr.
|
|
db 18, bdos ; 31-get disk parm block
|
|
db 19, bdos ; 32-user code
|
|
db 20, bdos ; 33-file read random
|
|
db 21, bdos ; 34-file write random
|
|
db 22, bdos ; 35-file size
|
|
db 23, bdos ; 36-set random record
|
|
db 24, bdos ; 37-reset drive
|
|
db 25, bdos ; 38-access drive
|
|
db 26, bdos ; 39-free drive
|
|
db 27, bdos ; 40-file write random w/zero fill
|
|
|
|
;CPM-3 extensions
|
|
|
|
db 0, sup ; 41-Test and Write (NOT IMPLEMENTED)
|
|
; Would be BDOS func # 28
|
|
db 28, bdos ; 42-Lock Record
|
|
db 29, bdos ; 43-Unlock Record
|
|
db 30, bdos ; 44-Set Multi-sector
|
|
db 31, bdos ; 45-Set Bdos Error Mode
|
|
db 32, bdos ; 46-Get Disk Free Space
|
|
db 12, sup ; 47-Chain to Program
|
|
; In CP/M-86 BDOS func # 34
|
|
db 33, bdos ; 48-Flush Buffers
|
|
db 1, sup ; 49-
|
|
|
|
;CPM-86 extensions
|
|
|
|
db 3, sup ; 50-call xios
|
|
db 34, bdos ; 51-set dma base
|
|
db 35, bdos ; 52-get dma
|
|
db 0, mem ; 53-get max mem
|
|
db 1, mem ; 54-get abs max mem
|
|
db 2, mem ; 55-alloc mem
|
|
db 3, mem ; 56-alloc abs mem
|
|
db 4, mem ; 57-free mem
|
|
db 5, mem ; 58-free all mem
|
|
db 4, sup ; 59-load
|
|
db 1, sup ; 60-
|
|
db 1, sup ; 61-
|
|
db 1, sup ; 62-
|
|
db 1, sup ; 63-
|
|
|
|
;CP/NET functions
|
|
|
|
db 64, net ; 64-network login
|
|
db 65, net ; 65-network logoff
|
|
db 66, net ; 66-network send msg
|
|
db 67, net ; 67-network rcv msg
|
|
db 68, net ; 68-network status
|
|
db 69, net ; 69-get network config addr
|
|
|
|
;CP/M-3 extensions
|
|
|
|
db 36, bdos ; 98-Reset Alloc Vector
|
|
db 37, bdos ; 99-Truncate File
|
|
db 38, bdos ;100-Set Dir Label
|
|
db 39, bdos ;101-Return Dir Label
|
|
db 40, bdos ;102-Read File XFCB
|
|
db 41, bdos ;103-Write File XFCB
|
|
db 42, bdos ;104-Set Date and Time
|
|
db 43, bdos ;105-Get Date and Time
|
|
db 44, bdos ;106-Set Default Password
|
|
db 13, sup ;107-Return Serial Number
|
|
db 0, sup ;108-(not implemented)
|
|
db 25, cio ;109-Get/Set Console Mode
|
|
db 26, cio ;110-Get/Set Output Delimiter
|
|
db 27, cio ;111-Print Block
|
|
db 28, cio ;112-List Block
|
|
|
|
; MP/M functions
|
|
|
|
db 6, mem ;128-mem req
|
|
db 6, mem ;129-(same function as 128)
|
|
db 7, mem ;130-mem free
|
|
db 1, rtm ;131-poll device
|
|
db 2, rtm ;132-flag wait
|
|
db 3, rtm ;133-flag set
|
|
db 4, rtm ;134-queue make
|
|
db 5, rtm ;135-queue open
|
|
db 6, rtm ;136-queue delete
|
|
db 7, rtm ;137-queue read
|
|
db 8, rtm ;138-cond. queue read
|
|
db 9, rtm ;139-queue write
|
|
db 10, rtm ;140-cond. queue write
|
|
db 11, rtm ;141-delay
|
|
db 12, rtm ;142-dispatch
|
|
db 13, rtm ;143-terminate
|
|
db 14, rtm ;144-create process
|
|
db 15, rtm ;145-set priority
|
|
db 9, cio ;146-console attach
|
|
db 10, cio ;147-console detach
|
|
db 11, cio ;148-set def console
|
|
db 12, cio ;149-console assign
|
|
db 5, sup ;150-CLI
|
|
db 6, sup ;151-call RPL
|
|
db 7, sup ;152-parse filename
|
|
db 13, cio ;153-get def console
|
|
db 8, sup ;154-sysdat addr
|
|
db 9, sup ;155-time of day
|
|
db 16, rtm ;156-get PD addr
|
|
db 17, rtm ;157-abort process
|
|
|
|
; MPM II extensions
|
|
|
|
db 15, cio ;158-attach list
|
|
db 16, cio ;159-detach list
|
|
db 17, cio ;160-set list dev
|
|
db 18, cio ;161-Cond. Attach list
|
|
db 19, cio ;162-Cond. Attach Console
|
|
db 11, sup ;163-MP/M Version Number
|
|
db 20, cio ;164-get list dev
|
|
|
|
|
|
; Initialized Queues
|
|
|
|
org ((offset $) + 1) and 0fffeh
|
|
|
|
mxloadqd dw mxdiskqd
|
|
db 0,0
|
|
dw qf_keep+qf_mx
|
|
db 'MXLoad '
|
|
dw 0,1,0,0,1,0,0
|
|
mxloadqpb db 0,0
|
|
dw mxloadqd,1,0
|
|
; db 'MXLoad '
|
|
|
|
; Data Used by Load Program
|
|
|
|
org ((offset $) + 1) and 0fffeh
|
|
|
|
lod_uda dw 0
|
|
lod_lstk dw 0
|
|
lod_basep dw 0
|
|
lod_nldt dw 0
|
|
lod_pd dw 0
|
|
lod_fcb rs 36
|
|
lod_indma dw 0
|
|
lod_nrels db 0
|
|
lod_chain db 0
|
|
lod_user db 0
|
|
lod_disk db 0
|
|
lod_fifty db 0
|
|
lod_8080 db 0
|
|
lod_lbyte db 0
|
|
lod_fixrec dw 0
|
|
lod_fixrec1 dw 0
|
|
lod_dma rb dskrecl
|
|
ldtab rb ldtabsiz
|
|
|
|
cli_dma_ofst rw 1
|
|
cli_dma_seg rw 1
|
|
cli_pflag rw 1
|
|
cli_chain rb 1
|
|
cli_term rb 1
|
|
cli_dma rb dskrecl ;dma buffer
|
|
|
|
;copy of user's clicb
|
|
cli_net rb 1 ;net
|
|
cli_ppd rw 1 ;parent PD
|
|
cli_cmdtail rb 129 ;command sent
|
|
rb 1
|
|
|
|
cli_fcb rb fcblen+1 ;internal FCB
|
|
|
|
cli_cuspqpb db 0,0 ;QPB of command
|
|
dw 0,0
|
|
dw offset cli_ppd
|
|
db '$$$$$$$$'
|
|
|
|
cli_acb db 0,0 ;cns,match
|
|
dw 0 ;pd
|
|
db '$$$$$$$$' ;name
|
|
|
|
cli_pcb dw offset cli_cmdtail ;parse
|
|
dw offset cli_fcb ;ctl bk
|
|
|
|
cli_pd dw 0 ;pd of load prog
|
|
cli_err dw 0 ;error return
|
|
cli_bpage dw 0 ;base page
|
|
cli_lddsk db 1 ;load disk
|
|
|
|
;parent information
|
|
|
|
cli_cns db 0 ;pd.p_cns save
|
|
cli_user db 0 ;pd.p_dsk save
|
|
cli_dsk db 0 ;pd.p_user save
|
|
cli_err_mode db 0 ;u_error_mode save
|
|
cli_dfil db 0 ;dayfile flag
|
|
|
|
;
|
|
;System Initialization Variables
|
|
;
|
|
|
|
initpd dw 0 ;link
|
|
dw 0 ;thread
|
|
db ps_run ;stat
|
|
db 1 ;prior
|
|
dw pf_sys+pf_kernal;flag
|
|
db 'Init ' ;name
|
|
dw unknown ;uda segment
|
|
db 0 ;disk
|
|
db 0 ;user
|
|
db 0,0 ;ldsk,luser
|
|
dw 0 ;mem
|
|
dw 0 ;dvract
|
|
dw 0 ;wait
|
|
db 0,0 ;org,net
|
|
dw 0 ;parent
|
|
db 0 ;cns
|
|
db 0 ;abort
|
|
db 0,0 ;cin,cout
|
|
db 0 ;lst
|
|
db 0,0,0 ;sf3,4,5
|
|
rb 4 ;reserved
|
|
dw 0,0 ;pret,scratch
|
|
|
|
|
|
;User Data Area of Init process
|
|
;paragraph aligned
|
|
|
|
org ((offset $)+0fh) AND 0fff0h
|
|
inituda rb ulen
|
|
init_tos rw 0
|
|
org offset inituda + ud_insys
|
|
db 1 ;keep the SUP from doing stack
|
|
|
|
org offset init_tos ;switches
|
|
|
|
|
|
; RTM data
|
|
; is word aligned from init uda
|
|
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
dw 0cccch,0cccch,0cccch
|
|
|
|
dsptchtos rw 0
|
|
|
|
indisp db false ;?currently in dispatch?
|
|
intflag db 0 ;if 0, interrupts not enabled -
|
|
;not implemented
|
|
es_sav dw 0 ;(staying word aligned)
|
|
bx_sav dw 0
|
|
ax_sav dw 0
|
|
|
|
; MEM Data
|
|
|
|
beststart dw 0
|
|
bestlen dw 0
|
|
bestsi dw 0
|
|
bestmau dw 0
|
|
currmau dw 0
|
|
currsi dw 0
|
|
currmpb dw 0,0,0,0,0
|
|
|
|
|
|
; SYNC Parameter Blocks
|
|
|
|
; The MEM ENTRY: point uses the following for
|
|
; mutual exclusion and recursion.
|
|
|
|
mem_cnt db 0 ;how many times a process has recursivly
|
|
;called the memory manager
|
|
|
|
mem_spb dw q_spb ;link Mem Sync Parameter Block
|
|
dw 0 ;owner
|
|
dw 0 ;wait
|
|
dw 0 ;next
|
|
|
|
; The queue sub-system in the RTM uses the following
|
|
; structure for mutual exclusion
|
|
|
|
q_spb dw cli_spb ;link Queue Sync Parameter Block
|
|
dw 0 ;owner
|
|
dw 0 ;wait
|
|
|
|
dw 0 ;next
|
|
|
|
|
|
; The CLI uses the CLI_SPB for mutual exclusion
|
|
|
|
cli_spb dw thrd_spb;link CLI Sync Parameter Block
|
|
dw 0 ;owner
|
|
dw 0 ;wait
|
|
dw 0 ;next
|
|
|
|
; When the thread is accessed, the THRD_SPB must be owned
|
|
; first.
|
|
|
|
thrd_spb dw msg_spb ;link Thread Sync Parameter Block
|
|
dw 0 ;owner
|
|
dw 0 ;wait
|
|
dw 0 ;next
|
|
|
|
; Currently the order in which the SYNCs must be obtained if
|
|
; more than one is needed is:
|
|
|
|
; CLI
|
|
; QUEUE ;called by CLI for RSPs
|
|
; MEM ;called by make queue
|
|
; THREAD ;used from the MEM module
|
|
|
|
; The SYNCs must be released in reverse order
|
|
; MSG_SPB is used by the BDOS to protect the BDOS error message
|
|
; buffer. MSG_SPB is in DATA.BDO
|