mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-24 17:04:19 +00:00
103 lines
2.5 KiB
Plaintext
103 lines
2.5 KiB
Plaintext
|
||
;*****************************************************
|
||
;*
|
||
;* RTM Interface Routines
|
||
;*
|
||
;*****************************************************
|
||
|
||
cseg
|
||
org 0
|
||
|
||
jmp init ;RTM initialization
|
||
jmp entry ;RTM entry point
|
||
|
||
sysdat dw 0 ;SYSDAT segment
|
||
supervisor equ offset $
|
||
rw 2 ;SUP entry point
|
||
|
||
db 'COPYRIGHT (C) 1981,'
|
||
db ' DIGITAL RESEARCH '
|
||
serial db '654321'
|
||
|
||
;==== ===========================
|
||
init: ; RTM module Initialization
|
||
;==== ===========================
|
||
mov sysdat,ds ;save sysdat
|
||
mov bx,offset supmod ;init supif
|
||
mov si,offset supervisor
|
||
mov ax,[bx]
|
||
mov cs:[si],ax
|
||
mov ax,2[bx]
|
||
mov cs:2[si],ax
|
||
mov bx,(offset dispatcher) ;init interrupt pdisp
|
||
mov word ptr [bx],offset fdisp
|
||
mov word ptr 2[bx],cs
|
||
mov bx,(offset rtm_pdisp) ;init intermodule pdisp
|
||
mov word ptr [bx],offset farpdisp
|
||
mov word ptr 2[bx],cs
|
||
;create tick and idle process
|
||
mov bx,offset tickpd ;Tick
|
||
mov ax,p_uda[bx]
|
||
add ax,sysdat
|
||
push es ! mov es,ax
|
||
mov si,supervisor
|
||
mov ax,cs:2[si]
|
||
mov u_initcs,ax ! pop es
|
||
mov bx,offset idlepd ;IDLE
|
||
mov ax,p_uda[bx]
|
||
add ax,sysdat
|
||
push es ! mov es,ax
|
||
mov si,supervisor
|
||
mov ax,cs:2[si]
|
||
mov u_initcs,ax ! pop es
|
||
mov dx,bx ! call proc_creat
|
||
;init is now a process and can run
|
||
;concurrently with idle process
|
||
retf
|
||
|
||
;*****************************************************
|
||
;*
|
||
;* RTM Function Table
|
||
;*
|
||
;*****************************************************
|
||
|
||
function dw sysreset_entry ;0
|
||
dw poll_entry ;1
|
||
dw flag_wait_entry ;2
|
||
dw flag_set_entry ;3
|
||
dw makeq_entry ;4
|
||
dw openq_entry ;5
|
||
dw deleteq_entry ;6
|
||
dw readq_entry ;7
|
||
dw creadq_entry ;8-conditional readq
|
||
dw writeq_entry ;9
|
||
dw cwriteq_entry ;10-conditional writeq
|
||
dw delay_entry ;11
|
||
dw dispatch_entry ;12
|
||
dw terminate_entry ;13
|
||
dw creat_proc_entry;14
|
||
dw set_prior_entry ;15
|
||
dw pd_entry ;16-get PD address
|
||
dw abort_spec_entry;17-abort process
|
||
dw sleep_entry ;18
|
||
dw wakeup_entry ;19
|
||
dw findpdname_entry;20
|
||
|
||
;===== =================
|
||
entry: ; RTM Entry Point
|
||
;===== =================
|
||
mov ch,0 ! shl cx,1 ! mov si,cx
|
||
call cs:function[si]
|
||
rtm_ret:retf
|
||
|
||
;===== ===============
|
||
mpmif: ; MPM Interface
|
||
;===== ===============
|
||
callf cs:dword ptr .supervisor ! ret
|
||
|
||
;====== ================
|
||
xiosif: ; XIOS Interface
|
||
;====== ================
|
||
mov si,mod_entry
|
||
callf dword ptr xiosmod[si] ! ret
|
||
|