Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

452 lines
8.7 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

include equates.a86
include system.a86
dseg
extrn rlr:word
extrn login_vector:word
extrn readonly_vector:word
extrn date_days:word
extrn date_secs:byte
extrn bdos_8087_inuse:word
extrn cio_flags:word
extrn ccp_dseg:word
extrn sysvar_131:byte
extrn sysvar_132:byte
extrn sysvar_142:byte
extrn sysvar_143:byte
extrn sysvar_144:byte
extrn search_path:byte
extrn proc_count:byte
extrn time_slice:byte
extrn page_mode:byte
extrn temp_drive:byte
extrn max_x:byte
extrn max_y:byte
extrn bdos_ver:word
extrn boot_drive:byte
cseg
public misc_init
public misc_main
extrn cwd_for_drive:near
db 'COPYRIGHT(C)1983,DIGITAL RESEARCH'
db '(06-FEB-85)'
sernumber:
include serial.a86
misc_init: ; DATA XREF: dseg:0016o
retn
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
misc_functions dw offset P_RSX_default ; DATA XREF: bdos:2317o
dw offset S_BDOSVER
dw offset DRV_LOGINVEC
dw offset DRV_GET
dw offset F_DMAOFF
dw offset DRV_ROVEC
dw offset F_USERNUM
dw offset F_MULTISEC
dw offset F_ERRMODE
dw offset S_SYSVAR
dw offset F_DMASEG
dw offset F_DMAGET
dw offset T_SET
dw offset T_GET
dw offset S_SERIAL
dw offset P_CODE
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
misc_main: ; DATA XREF: dseg:0014o
jmp cs:misc_functions[si]
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
P_RSX_default: ; DATA XREF: bdos:22EFo
mov bx, 0FFFFh
mov cx, 2
retn
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
S_BDOSVER: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:22F1o
mov bx, bdos_ver
retn
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
S_SYSVAR: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:2301o
mov si, dx ; Caller SCBPB
mov dx, ds ; Our DS
push ds
push es
mov ds, es:userDS ; Caller DS
mov di, offset public_sysvars
xor bx, bx
mov bl, [si]
cmp bl, 6
jb sysvar_valid
sub bl, 80h
jb sysvar_invalid
mov di, offset private_sysvars
cmp bl, 10h
jb sysvar_valid
sysvar_invalid: ; CODE XREF: S_SYSVAR+1Aj S_SYSVAR+4Fj
; ...
mov bx, 0FFFFh
jmps s_sysvar_ret
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
sysvar_valid: ; CODE XREF: S_SYSVAR+15j S_SYSVAR+22j
shl bx, 1
shl bx, 1
mov cx, cs:[bx+di]
test ch, 80h ; Process variable?
jz not_proc_var
mov dx, es
not_proc_var: ; CODE XREF: S_SYSVAR+33j
mov di, cs:2[bx+di]
test byte ptr 1[si], 0FFh
lea si, 2[si]
jnz sysvar_set
xchg si, di
push ds
pop es
mov ds, dx
jmps sysvar_access
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
sysvar_set: ; CODE XREF: S_SYSVAR+42j
test ch, 40h ; Read-only?
jnz sysvar_invalid
cmp es:proc_background, 0
jz sysvar_is_fg
test ch, 20h ; Owned by FG process?
jnz sysvar_invalid
sysvar_is_fg: ; CODE XREF: S_SYSVAR+57j
mov es, dx
sysvar_access: ; CODE XREF: S_SYSVAR+4Aj
test ch, 10h ; Volatile?
jz sysvar_nocli
cli
sysvar_nocli: ; CODE XREF: S_SYSVAR+63j
xor ch, ch
rep movsb
sti
xor bx, bx
s_sysvar_ret: ; CODE XREF: S_SYSVAR+27j
pop es
pop ds
retn
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
public_sysvars dw 2001h ; DATA XREF: S_SYSVAR+Bo
dw offset max_x
dw 2001h
dw offset max_y
dw 2001h
dw offset page_mode
dw 6001h
dw offset xios_bh_ticks
dw 2001h
dw offset temp_drive
dw 1005h
dw offset date_days
private_sysvars dw 2001h ; DATA XREF: S_SYSVAR+1Co
dw offset xios_bh_8087
dw 0E001h
dw offset proc_pid
dw 801Ah
dw offset proc_drive
dw 2001h
dw offset sysvar_131
dw 20FFh
dw offset sysvar_132
dw 3002h
dw offset ccp_dseg
dw 20FFh
dw offset boot_drive
dw 3004h
dw offset search_path
dw 0E001h
dw offset proc_background
dw 6001h
dw offset proc_count
dw 2001h
dw offset time_slice
dw 6002h ; BUG? this is 2002h in PCP/M 2.04e
dw offset cio_flags
dw 6001h
dw offset bdos_8087_inuse
dw 9004h
dw offset proc_onblock
dw 02021h
dw offset sysvar_142
dw 02003h
dw offset sysvar_143
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
S_SERIAL: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:230Bo
push es
mov es, es:userDS
mov di, dx
mov si, offset sernumber+10
mov cx, 3
db 0F3h, 2Eh ;REP CS:
movsw
pop es
mov bx, cx
retn
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
P_CODE: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:230Do
inc dx
jz p_code_get
dec dx
mov es:proc_errcode, dx
p_code_get: ; CODE XREF: P_CODE+1j
mov bx, es:proc_errcode
retn
;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
nop_iret:
nop
iret
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
; Copy bits for floating drives from their hosts
ret_drv_vector: ; CODE XREF: DRV_LOGINVEC+4j
; DRV_ROVEC+4j
mov cx, 3
rdv_float: ; CODE XREF: ret_drv_vector+23j
push cx
add cl, 0Ch
mov al, cl
mov dx, 1
shl dx, cl
mov cl, 0FFh
push bx
call cwd_for_drive
pop bx
mov cl, al ; Get the host drive
mov ax, 1
shl ax, cl
test bx, ax ; Is the corresponding bit set for it?
jz rdv_nofloat
or bx, dx
rdv_nofloat: ; CODE XREF: ret_drv_vector+1Ej
pop cx
loop rdv_float
retn
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
DRV_LOGINVEC: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:22F3o
mov bx, login_vector
call ret_drv_vector ; Copy bits for floating drives from their hosts
ret
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
DRV_GET: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:22F5o
mov bl, es:proc_drive
retn
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
F_DMAOFF: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:22F7o
mov es:word ptr proc_dma, dx
retn
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
DRV_ROVEC: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:22F9o
mov bx, readonly_vector
jmp ret_drv_vector ; Copy bits for floating drives from their hosts
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
F_USERNUM: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:22FBo
mov al, dl
cmp al, 0FFh
jnz f_setuid
mov bl, es:proc_uid
retn
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
f_setuid: ; CODE XREF: F_USERNUM+4j
and al, 0Fh
mov es:proc_uid, al
retn
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
F_MULTISEC: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:22FDo
xor bx, bx
or dl, dl
jz f_bad_multisec
cmp dl, 81h
jnb f_bad_multisec
mov es:proc_multisec, dl
retn
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
f_bad_multisec: ; CODE XREF: F_MULTISEC+4j
; F_MULTISEC+9j
dec bx
retn
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
F_ERRMODE: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:22FFo
mov es:proc_errmode, dl
retn
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
F_DMASEG: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:2303o
mov es:word ptr proc_dma+2, dx
retn
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
F_DMAGET: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:2305o
mov ax, es:word ptr proc_dma+2
mov es:userES, ax
mov bx, es:word ptr proc_dma
retn
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
T_SET: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:2307o
mov si, dx
mov di, offset date_days
pushf
cli
push es
push ds
mov ds, es:userDS
pop es
movsw
movsw
push es
pop ds
pop es
mov date_secs, 0
push cs
call nop_iret
retn
;ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
T_GET: ; CODE XREF: bdos:2317u
; DATA XREF: bdos:2309o
mov di, dx
mov si, offset date_days
push es
mov es, es:userDS
pushf
cli
movsw
movsw
mov bl, date_secs
push cs
call nop_iret
pop es
retn
end