mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 08:54:17 +00:00
Upload
Digital Research
This commit is contained in:
@@ -0,0 +1,897 @@
|
||||
|
||||
include equates.a86
|
||||
include system.a86
|
||||
|
||||
|
||||
dseg
|
||||
extrn rlr:word
|
||||
extrn drl:word
|
||||
extrn bdos_conowner:word
|
||||
extrn lp_sysflag_chg:dword
|
||||
extrn time_slice:byte
|
||||
extrn pq_disk:word
|
||||
extrn lst_owner:byte
|
||||
extrn aux_owner:byte
|
||||
extrn bdos_8087_inuse:byte
|
||||
extrn proc_count:byte
|
||||
extrn bdos_sysflags:word
|
||||
|
||||
cseg
|
||||
extrn bdos_dseg:word
|
||||
extrn bdos_callback:near
|
||||
extrn far_ret_1:near
|
||||
|
||||
public rtm_main
|
||||
public rtm_init
|
||||
public rtm_timeslice
|
||||
public rtm_sysflag
|
||||
|
||||
rtm_init: ; DATA XREF: dseg:0006o
|
||||
retn
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
rtm_main: ; DATA XREF: dseg:0004o
|
||||
call cs:rtm_functions[si]; 0208, get new process
|
||||
jb proc_ok
|
||||
mov bx, 0FFFFh
|
||||
|
||||
proc_ok: ; CODE XREF: bdos:0EDFj
|
||||
retn
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
rtm_functions dw offset P_TERMCPM ; DATA XREF: bdos:0EDAo
|
||||
dw offset P_WAITFLAG
|
||||
dw offset P_DELAY
|
||||
dw offset P_DISPATCH
|
||||
dw offset P_0204 ; Enter a process-queue controlled area
|
||||
dw offset P_0205 ; Leave a process-queue controlled area
|
||||
dw offset P_0206
|
||||
dw offset P_0207 ; Check runnable processes
|
||||
dw offset get_new_process; 0208, get new process
|
||||
dw offset P_0209 ; Wake a process (DX = process segment)
|
||||
dw offset P_020A ; Terminate foreground process
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
P_WAITFLAG: ; CODE XREF: bdos:0EDAu
|
||||
; DATA XREF: bdos:0EE7o
|
||||
cli
|
||||
call lookup_flag
|
||||
jnb pwf_badflag
|
||||
cmp ax, 0FFFEh
|
||||
jz pwf_minus2
|
||||
ja pwf_block
|
||||
mov cx, 6
|
||||
clc
|
||||
jmps pwf_badflag
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
pwf_block: ; CODE XREF: P_WAITFLAG+Bj
|
||||
mov [bx], es ; Process waiting on flag
|
||||
mov es:proc_status, 3; Make process wait
|
||||
mov es:proc_countdown, dx
|
||||
call delay_dispatch
|
||||
jmps pwf_done
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
pwf_minus2: ; CODE XREF: P_WAITFLAG+9j
|
||||
mov word ptr [bx], 0FFFFh
|
||||
|
||||
pwf_done: ; CODE XREF: P_WAITFLAG+23j
|
||||
stc
|
||||
|
||||
pwf_badflag: ; CODE XREF: P_WAITFLAG+4j
|
||||
; P_WAITFLAG+11j
|
||||
sti
|
||||
retn
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
rtm_sysflag: ; CODE XREF: xios_int09+EDu
|
||||
; DATA XREF: dseg:0038o
|
||||
cmp dl, 1
|
||||
jnz bsf_not1
|
||||
mov xios_bh_delay, 0
|
||||
mov ax, bdos_conowner
|
||||
push es
|
||||
|
||||
bsf_checktimer: ; CODE XREF: rtm_sysflag+34j
|
||||
mov es, ax
|
||||
cmp es:proc_status, 1; Waiting on timer
|
||||
jnz bsf_nexttimer
|
||||
mov xios_bh_delay, 0FFh
|
||||
call is_proc_busy
|
||||
jb bsf_wakeproc
|
||||
dec es:proc_countdown
|
||||
jnz bsf_nexttimer
|
||||
|
||||
bsf_wakeproc: ; CODE XREF: rtm_sysflag+20j
|
||||
mov dx, es
|
||||
call P_0209 ; Wake a process (DX = process segment)
|
||||
|
||||
bsf_nexttimer: ; CODE XREF: rtm_sysflag+16j
|
||||
; rtm_sysflag+27j
|
||||
mov ax, es:proc_nextseg
|
||||
test ax, ax
|
||||
jnz bsf_checktimer
|
||||
xor ax, ax
|
||||
pop es
|
||||
jmps bsf_done
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
bsf_not1: ; CODE XREF: rtm_sysflag+3j
|
||||
pushf
|
||||
cli
|
||||
call lookup_flag
|
||||
jnb bsf_badflag
|
||||
cmp ax, 0FFFEh
|
||||
jz bsf_overrun
|
||||
ja bsf_nowake
|
||||
mov word ptr [bx], 0FFFFh
|
||||
mov dx, ax
|
||||
call P_0209 ; Wake a process (DX = process segment)
|
||||
jmps bsf_woken
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
bsf_nowake: ; CODE XREF: rtm_sysflag+47j
|
||||
mov word ptr [bx], 0FFFEh
|
||||
|
||||
bsf_woken: ; CODE XREF: rtm_sysflag+52j
|
||||
xor ax, ax
|
||||
jmps bsf_popret
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
bsf_overrun: ; CODE XREF: rtm_sysflag+45j
|
||||
mov cx, 5
|
||||
|
||||
bsf_badflag: ; CODE XREF: rtm_sysflag+40j
|
||||
mov ax, 0FFFFh
|
||||
|
||||
bsf_popret: ; CODE XREF: rtm_sysflag+5Aj
|
||||
popf
|
||||
|
||||
bsf_done: ; CODE XREF: rtm_sysflag+39j
|
||||
mov bx, ax
|
||||
retf
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
lookup_flag: ; CODE XREF: P_WAITFLAG+1p
|
||||
; rtm_sysflag+3Dp
|
||||
mov cx, 4
|
||||
cmp dl, xios_bh_lastflg
|
||||
ja luf_badflag
|
||||
xor dh, dh
|
||||
mov bx, bdos_sysflags
|
||||
add bx, dx
|
||||
add bx, dx
|
||||
mov ax, [bx]
|
||||
stc
|
||||
|
||||
luf_badflag: ; CODE XREF: lookup_flag+7j
|
||||
retn
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
; 0208, get new process
|
||||
|
||||
get_new_process: ; CODE XREF: bdos:0EDAu
|
||||
; DATA XREF: bdos:0EF5o
|
||||
push ds
|
||||
mov bx, bdos_conowner
|
||||
mov cx, 4
|
||||
|
||||
gnp_loop: ; CODE XREF: get_new_process+14j
|
||||
mov ds, bx
|
||||
|
||||
cmp proc_status, 2 ; 0 => Runnable
|
||||
; 1 => waiting on timer
|
||||
; 2 => terminated
|
||||
; 3 => waiting on flag
|
||||
jz gnp_found
|
||||
add bx, 16h
|
||||
loop gnp_loop
|
||||
pop ds
|
||||
|
||||
clc
|
||||
mov cx, 0Ch
|
||||
retn
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
gnp_found: ; CODE XREF: get_new_process+Fj
|
||||
pop ds
|
||||
inc proc_count
|
||||
xor cx, cx
|
||||
stc
|
||||
retn
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
P_DELAY: ; CODE XREF: bdos:0EDAu
|
||||
; DATA XREF: bdos:0EE9o
|
||||
cmp xios_bh_ticks, 0
|
||||
jnz delay_haveclock
|
||||
mov cx, 45 ; No tick
|
||||
retn
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
delay_haveclock: ; CODE XREF: P_DELAY+5j
|
||||
mov tick_wait_proc, es
|
||||
cli
|
||||
mov xios_bh_delay, 0FFh; Ask for ticks, because
|
||||
mov es:proc_status, 1; there's now a process waiting
|
||||
mov es:proc_countdown, dx
|
||||
jmp delay_dispatch
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
; Terminate foreground process
|
||||
|
||||
P_020A: ; CODE XREF: bdos:0EDAu P_TERMCPM+4Cp
|
||||
; DATA XREF: ...
|
||||
xor bp, bp
|
||||
jmps proc_doterm
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
proc_term_bg: ; CODE XREF: P_TERMCPM+5Bp
|
||||
mov bp, 1
|
||||
|
||||
proc_doterm: ; CODE XREF: P_020A+2j
|
||||
push ds
|
||||
push es
|
||||
mov di, offset proc_passwd+6; BDOS pointer - 4
|
||||
lds si, es:4[di]
|
||||
|
||||
proc_unhook_rsx: ; CODE XREF: proc_term_bg+29j
|
||||
; proc_term_bg+58j
|
||||
mov ax, 4[si]
|
||||
or ax, 6[si]
|
||||
jz proc_unhooked
|
||||
mov byte ptr 18[si], 0FFh
|
||||
test bp, bp
|
||||
jnz proc_free_rsx
|
||||
cmp byte ptr 3[si], 0
|
||||
jnz proc_free_rsx
|
||||
push si
|
||||
pop di
|
||||
push ds
|
||||
pop es
|
||||
|
||||
lds si, 4[si]
|
||||
jmps proc_unhook_rsx
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
proc_free_rsx: ; CODE XREF: proc_term_bg+1Aj
|
||||
; proc_term_bg+20j
|
||||
mov ax, 20[si]
|
||||
lds si, 4[si]
|
||||
mov es:4[di], si
|
||||
mov es:6[di], ds
|
||||
push si
|
||||
push ds
|
||||
push di
|
||||
push es
|
||||
push bp
|
||||
mov ds, cs:bdos_dseg
|
||||
mov es, rlr
|
||||
|
||||
mov mcb_to_free, ax
|
||||
mov dx, offset mcb_to_free
|
||||
mov cx, 39h ; MC_FREE
|
||||
call bdos_callback
|
||||
pop bp
|
||||
pop es
|
||||
pop di
|
||||
pop ds
|
||||
pop si
|
||||
jmps proc_unhook_rsx
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
proc_unhooked: ; CODE XREF: proc_term_bg+12j
|
||||
pop es
|
||||
pop ds
|
||||
retn
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
kill_process: ; CODE XREF: delay_dispatch+6Aj
|
||||
; delay_dispatch+128j
|
||||
mov ax, es
|
||||
cli
|
||||
mov ss, ax
|
||||
mov sp, 100h
|
||||
sti
|
||||
mov al, es:proc_pid
|
||||
cmp aux_owner, al
|
||||
jnz dont_free_aux
|
||||
mov aux_owner, 0FFh
|
||||
|
||||
dont_free_aux: ; CODE XREF: kill_process+11j
|
||||
cmp lst_owner, al
|
||||
jnz dont_free_lst
|
||||
mov lst_owner, 0FFh
|
||||
|
||||
dont_free_lst: ; CODE XREF: kill_process+1Cj
|
||||
and es:proc_flags, 0FFFEh
|
||||
mov es:proc_errcode, 0FFFEh
|
||||
cmp es:proc_fx, 0Ah ; If broken into line input
|
||||
mov es:proc_fx, 0
|
||||
jnz dont_reset_disk
|
||||
mov cx, 0Dh ; Then reset disks
|
||||
call bdos_callback ; presumably so ^C at command prompt
|
||||
; does what the user expects.
|
||||
|
||||
dont_reset_disk: ; CODE XREF: kill_process+3Dj
|
||||
call release_queues ; Release all process queues owned by a process
|
||||
|
||||
call_termcpm: ; CODE XREF: P_0206+1Bj
|
||||
xor cx, cx
|
||||
mov dx, cx
|
||||
jmp bdos_callback
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
P_0206: ; CODE XREF: bdos:0EDAu
|
||||
; DATA XREF: bdos:0EF1o
|
||||
mov tick_wait_proc, es
|
||||
dec es:proc_indisk
|
||||
jnz P_0207 ; Check runnable processes
|
||||
test es:proc_flags, 1
|
||||
jz P_0207 ; Check runnable processes
|
||||
and es:proc_flags, 0FFFEh
|
||||
jmps call_termcpm
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
P_TERMCPM: ; CODE XREF: bdos:0EDAu
|
||||
; DATA XREF: bdos:0EE5o
|
||||
cli
|
||||
mov es:word ptr proc_onblock, offset far_ret_1
|
||||
mov es:word ptr proc_onblock+2, cs
|
||||
sti
|
||||
push dx
|
||||
call release_queues ; Release all process queues owned by a process
|
||||
mov cx, 723h
|
||||
call bdos_callback
|
||||
pop dx
|
||||
mov cx, 307h
|
||||
call bdos_callback
|
||||
cmp es:proc_background, 0
|
||||
jnz ptc_background
|
||||
call P_020A ; Kill foreground process
|
||||
mov cx, 103h ; Bring CCP to foreground
|
||||
jmp bdos_callback
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
ptc_background: ; CODE XREF: P_TERMCPM+4Aj
|
||||
call proc_term_bg ; Terminate background process
|
||||
dec proc_count
|
||||
test es:proc_flags, 2; Was using 8087?
|
||||
jz ptc_not8087
|
||||
and es:proc_flags, 0FFFDh
|
||||
mov bdos_8087_inuse, 0
|
||||
|
||||
ptc_not8087: ; CODE XREF: P_TERMCPM+69j
|
||||
mov tick_wait_proc, es
|
||||
mov es:proc_status, 2; 0 => Runnable
|
||||
; 1 => waiting on timer
|
||||
; 2 => terminated
|
||||
; 3 => waiting on flag
|
||||
jmp delay_dispatch
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
; Check runnable processes
|
||||
|
||||
P_0207: ; CODE XREF: bdos:0EDAu P_0206+9j
|
||||
; ...
|
||||
xor ax, ax
|
||||
mov tick_wait_proc, ax
|
||||
cmp drl, ax ; Anything waiting to run?
|
||||
jnz P_DISPATCH ; If so, give it a go
|
||||
stc
|
||||
retn
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
; Release all process queues owned by a process
|
||||
|
||||
release_queues: ; CODE XREF: P_TERMCPM+2Ep
|
||||
; kill_process+45p
|
||||
mov bx, offset pq_disk
|
||||
|
||||
release_loop: ; CODE XREF: release_queues+Cj
|
||||
push bx
|
||||
call P_0205 ; Leave a process-queue controlled area
|
||||
pop bx
|
||||
mov bx, [bx]
|
||||
test bx, bx
|
||||
jnz release_loop
|
||||
retn
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
; Enter a process-queue controlled area
|
||||
|
||||
P_0204: ; CODE XREF: bdos:0EDAu
|
||||
; DATA XREF: bdos:0EEDo
|
||||
mov ax, es
|
||||
mov tick_wait_proc, ax
|
||||
xchg ax, 2[bx] ; Is there already a process waiting?
|
||||
test ax, ax
|
||||
jz P_0207 ; Check runnable processes
|
||||
mov 2[bx], ax ; Yes. Add us to the chain.
|
||||
lea bx, 4[bx]
|
||||
call add_to_chain
|
||||
jmps delay_dispatch
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
; Leave a process-queue controlled area
|
||||
|
||||
P_0205: ; CODE XREF: bdos:0EDAu release_queues+4p
|
||||
; DATA XREF: ...
|
||||
mov ax, es
|
||||
cmp 2[bx], ax
|
||||
jz pq_leave_1
|
||||
clc ; Queue isn't owned by this process
|
||||
retn
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
pq_leave_1: ; CODE XREF: P_0205+5j
|
||||
mov tick_wait_proc, es
|
||||
push es
|
||||
push bx
|
||||
lea bx, 4[bx]
|
||||
call next_runnable
|
||||
pop bx
|
||||
mov 2[bx], es
|
||||
mov dx, es
|
||||
pop es
|
||||
call P_0209 ; Wake a process (DX = process segment)
|
||||
jmp P_0207 ; Check runnable processes
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
; Wake a process (DX = process segment)
|
||||
|
||||
P_0209: ; CODE XREF: bdos:0EDAu rtm_sysflag+2Bp
|
||||
; ...
|
||||
test dx, dx
|
||||
jz wake_none
|
||||
push es
|
||||
mov es, dx
|
||||
mov bx, offset drl
|
||||
pushf
|
||||
cli
|
||||
mov es:proc_status, 0; 0 => Runnable
|
||||
; 1 => waiting on timer
|
||||
; 2 => terminated
|
||||
; 3 => waiting on flag
|
||||
call add_to_chain
|
||||
popf
|
||||
pop es
|
||||
stc
|
||||
|
||||
wake_none: ; CODE XREF: P_0209+2j
|
||||
retn
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
delay_dispatch: ; CODE XREF: P_WAITFLAG+20p
|
||||
; P_DELAY+20j ...
|
||||
mov bx, offset delay_cbk
|
||||
jmps disp_general
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
P_DISPATCH: ; CODE XREF: bdos:0EDAu P_0207+9j
|
||||
; DATA XREF: ...
|
||||
mov bx, offset dispatch_cbk
|
||||
|
||||
disp_general: ; CODE XREF: delay_dispatch+3j
|
||||
mov tick_wait_proc, es
|
||||
mov cbk_function, bx
|
||||
pushf
|
||||
push cs
|
||||
mov ax, offset dispret
|
||||
push ax
|
||||
push ds
|
||||
jmps dsptch
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
dispret: ; DATA XREF: delay_dispatch+12o
|
||||
xor bx, bx
|
||||
stc
|
||||
retn
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
rtm_timeslice: ; CODE XREF: xios_int09+EDu
|
||||
; DATA XREF: dseg:0034o
|
||||
cli
|
||||
cmp tick_wait_proc, 0
|
||||
jz twp_is_0
|
||||
pop ds
|
||||
iret
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
twp_is_0: ; CODE XREF: delay_dispatch+23j
|
||||
mov tick_wait_proc, 0FFFFh
|
||||
sti
|
||||
mov cbk_function, offset dispatch_cbk
|
||||
|
||||
dsptch: ; CODE XREF: delay_dispatch+17j
|
||||
; delay_dispatch+1A1j
|
||||
sti
|
||||
mov dsptch_es, es
|
||||
mov es, rlr
|
||||
mov es:proc_ax, ax
|
||||
mov ax, dsptch_es
|
||||
mov es:proc_es, ax
|
||||
mov es:proc_ss, ss
|
||||
mov es:proc_sp, sp
|
||||
mov ax, ds
|
||||
cli
|
||||
mov ss, ax
|
||||
|
||||
mov sp, offset dsptch_stack
|
||||
sti
|
||||
call check_timeslice
|
||||
cld
|
||||
call is_proc_busy
|
||||
jnb dont_kill
|
||||
mov tick_wait_proc, 0
|
||||
jmp kill_process
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
dont_kill: ; CODE XREF: delay_dispatch+62j
|
||||
cmp cbk_function, offset dispatch_cbk
|
||||
jnz disp_switchproc
|
||||
xor ax, ax
|
||||
cmp drl, ax
|
||||
jnz disp_switchproc
|
||||
cmp es:proc_nextready, ax
|
||||
jz j_leave_disp
|
||||
cmp es:proc_background, 0
|
||||
jnz disp_switchproc
|
||||
|
||||
proc_can_run: ; CODE XREF: delay_dispatch+8Aj
|
||||
cmp time_to_switch, 0
|
||||
jz slice_expired
|
||||
dec time_to_switch
|
||||
|
||||
j_leave_disp: ; CODE XREF: delay_dispatch+82j
|
||||
jmp leave_disp
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
slice_expired: ; CODE XREF: delay_dispatch+99j
|
||||
mov al, time_slice
|
||||
mov time_to_switch, al
|
||||
|
||||
disp_switchproc: ; CODE XREF: delay_dispatch+73j
|
||||
; delay_dispatch+7Bj
|
||||
; ...
|
||||
mov es:proc_bx, bx
|
||||
mov es:proc_cx, cx
|
||||
mov es:proc_dx, dx
|
||||
mov es:proc_bp, bp
|
||||
mov es:proc_di, di
|
||||
mov es:proc_si, si
|
||||
xor ax, ax
|
||||
mov ds, ax
|
||||
|
||||
mov si, ax
|
||||
mov di, offset proc_int0
|
||||
mov dx, 4
|
||||
mov cx, dx
|
||||
rep movsw
|
||||
mov cx, dx
|
||||
add si, dx
|
||||
rep movsw
|
||||
mov si, offset INT_E0
|
||||
mov cx, dx
|
||||
rep movsw
|
||||
xor ax, ax
|
||||
callf es:dword ptr proc_onblock
|
||||
mov ds, cs:bdos_dseg
|
||||
|
||||
mov bx, offset rlr
|
||||
call next_runnable
|
||||
jmp cbk_function
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
delay_cbk: ; DATA XREF: delay_dispatcho
|
||||
jmps check_ready
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
dispatch_cbk: ; DATA XREF: delay_dispatch+5o
|
||||
; delay_dispatch+2Eo
|
||||
; ...
|
||||
call add_to_chain
|
||||
|
||||
check_ready: ; CODE XREF: delay_dispatch+F9j
|
||||
; delay_dispatch+10Ej
|
||||
; ...
|
||||
mov bx, offset drl
|
||||
cli
|
||||
call next_runnable
|
||||
sti
|
||||
jnb check_ready1
|
||||
mov bx, offset rlr
|
||||
call proc_makeready
|
||||
jmps check_ready
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
check_ready1: ; CODE XREF: delay_dispatch+106j
|
||||
call check_timeslice
|
||||
mov ax, rlr
|
||||
test ax, ax
|
||||
jz check_ready
|
||||
mov es, ax
|
||||
call is_proc_busy
|
||||
jnb proc_switchin
|
||||
cli
|
||||
mov tick_wait_proc, 0
|
||||
jmp kill_process
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
proc_switchin: ; CODE XREF: delay_dispatch+11Fj
|
||||
mov ax, 1
|
||||
callf es:dword ptr proc_onblock
|
||||
mov ds, cs:bdos_dseg
|
||||
mov ds, rlr
|
||||
mov si, offset proc_int0
|
||||
xor ax, ax
|
||||
mov es, ax
|
||||
|
||||
mov di, ax
|
||||
mov dx, 4
|
||||
mov cx, dx
|
||||
rep movsw
|
||||
mov cx, dx
|
||||
add di, dx
|
||||
rep movsw
|
||||
mov di, offset INT_E0
|
||||
mov cx, dx
|
||||
rep movsw
|
||||
push ds
|
||||
pop es
|
||||
|
||||
mov ds, cs:bdos_dseg
|
||||
mov bx, es:proc_bx
|
||||
mov cx, es:proc_cx
|
||||
mov dx, es:proc_dx
|
||||
mov bp, es:proc_bp
|
||||
mov di, es:proc_di
|
||||
mov si, es:proc_si
|
||||
|
||||
leave_disp: ; CODE XREF: delay_dispatch+9Fj
|
||||
cli
|
||||
mov ss, es:proc_ss
|
||||
|
||||
mov sp, es:proc_sp
|
||||
sti
|
||||
mov ax, es:proc_ax
|
||||
mov es, es:proc_es
|
||||
cli
|
||||
cmp drl, 0
|
||||
jz drl_is_empty
|
||||
mov cbk_function, offset dispatch_cbk
|
||||
jmp dsptch
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
drl_is_empty: ; CODE XREF: delay_dispatch+199j
|
||||
mov tick_wait_proc, 0
|
||||
pop ds
|
||||
iret
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
proc_makeready: ; CODE XREF: delay_dispatch+10Bp
|
||||
mov ax, [bx]
|
||||
mov [bx], es
|
||||
test ax, ax
|
||||
jz pmr_1
|
||||
mov es:proc_nextready, ax
|
||||
retn
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
pmr_1: ; CODE XREF: proc_makeready+6j
|
||||
mov 2[bx], es
|
||||
retn
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
add_to_chain: ; CODE XREF: P_0204+12p P_0209+12p
|
||||
; ...
|
||||
mov ax, 2[bx]
|
||||
mov 2[bx], es
|
||||
test ax, ax
|
||||
jz added_to_chain
|
||||
push ds
|
||||
mov ds, ax
|
||||
|
||||
mov proc_nextready, es
|
||||
pop ds
|
||||
|
||||
retn
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
added_to_chain: ; CODE XREF: add_to_chain+8j
|
||||
mov [bx], es
|
||||
retn
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
next_runnable: ; CODE XREF: P_0205+12p delay_dispatch+F2p
|
||||
; ...
|
||||
mov ax, [bx]
|
||||
test ax, ax
|
||||
mov es, ax
|
||||
jz nxtrun_2
|
||||
mov ax, es:proc_nextready
|
||||
mov es:proc_nextready, 0
|
||||
mov [bx], ax
|
||||
test ax, ax
|
||||
jnz nxtrun_1
|
||||
mov 2[bx], ax
|
||||
|
||||
nxtrun_1: ; CODE XREF: next_runnable+17j
|
||||
stc
|
||||
|
||||
nxtrun_2: ; CODE XREF: next_runnable+6j
|
||||
retn
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
is_proc_busy: ; CODE XREF: rtm_sysflag+1Dp
|
||||
; delay_dispatch+5Fp
|
||||
; ...
|
||||
test es:proc_flags, 1
|
||||
jz proc_notbusy
|
||||
cmp es:proc_indisk, 1
|
||||
|
||||
proc_notbusy: ; CODE XREF: is_proc_busy+7j
|
||||
retn
|
||||
|
||||
|
||||
|
||||
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
; S u b r o u t i n e
|
||||
|
||||
check_timeslice: ; CODE XREF: delay_dispatch+5Bp
|
||||
; delay_dispatch+110p
|
||||
dec timeslice
|
||||
jnz not_expired
|
||||
push bx
|
||||
push cx
|
||||
push dx
|
||||
mov es, bdos_conowner
|
||||
|
||||
cts_process: ; CODE XREF: check_timeslice+39j
|
||||
test es:proc_flags, 1
|
||||
jz cts_nextproc
|
||||
cmp es:proc_indisk, 0
|
||||
jnz cts_nextproc
|
||||
cli
|
||||
cmp es:proc_status, 3; 0 => Runnable
|
||||
; 1 => waiting on timer
|
||||
; 2 => terminated
|
||||
; 3 => waiting on flag
|
||||
jnz cts_nextproc
|
||||
mov dx, es:proc_countdown
|
||||
callf dword ptr lp_sysflag_chg
|
||||
sti
|
||||
|
||||
cts_nextproc: ; CODE XREF: check_timeslice+14j
|
||||
; check_timeslice+1Cj
|
||||
; ...
|
||||
mov ax, es:proc_nextseg
|
||||
test ax, ax
|
||||
mov es, ax
|
||||
jnz cts_process
|
||||
pop dx
|
||||
pop cx
|
||||
pop bx
|
||||
mov es, rlr
|
||||
mov timeslice, 1Eh
|
||||
|
||||
not_expired: ; CODE XREF: check_timeslice+4j
|
||||
retn
|
||||
|
||||
|
||||
dseg
|
||||
mcb_to_free dw 0
|
||||
dw 0
|
||||
db 0
|
||||
|
||||
time_to_switch db 10h ; DATA XREF: delay_dispatch+94r
|
||||
; delay_dispatch+9Bw
|
||||
; ...
|
||||
timeslice db 1Eh ; DATA XREF: check_timeslicew
|
||||
; check_timeslice+42w
|
||||
tick_wait_proc dw 0 ; DATA XREF: P_DELAY+Bw P_TERMCPM+77w
|
||||
; ...
|
||||
cbk_function dw 0 ; DATA XREF: delay_dispatch+Cw
|
||||
; delay_dispatch+2Ew
|
||||
; ...
|
||||
dsptch_es dw 0 ; DATA XREF: delay_dispatch+35w
|
||||
; delay_dispatch+41r
|
||||
dw 0CCCCh, 0CCCCh, 0CCCCh, 0CCCCh
|
||||
dw 0CCCCh, 0CCCCh, 0CCCCh, 0CCCCh
|
||||
dw 0CCCCh, 0CCCCh, 0CCCCh, 0CCCCh
|
||||
dw 0CCCCh, 0CCCCh, 0CCCCh, 0CCCCh
|
||||
|
||||
dsptch_stack db 0 ; DATA XREF: delay_dispatch+57o
|
||||
|
||||
Reference in New Issue
Block a user