mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-22 16:04:18 +00:00
192 lines
3.6 KiB
Plaintext
192 lines
3.6 KiB
Plaintext
|
||
;
|
||
; ECHO - Resident System Process
|
||
; Print Command tail to console
|
||
;
|
||
|
||
;
|
||
; DEFININTIONS
|
||
;
|
||
|
||
mpmint equ 224 ;mpm entry interrupt
|
||
mpm_conwrite equ 9 ;print string
|
||
mpm_qmake equ 134 ;create queue
|
||
mpm_qopen equ 135 ;open queue
|
||
mpm_qread equ 137 ;read queue
|
||
mpm_qwrite equ 139 ;write queue
|
||
mpm_setprior equ 145 ;set priority
|
||
mpm_condetach equ 147 ;detach console
|
||
mpm_setdefcon equ 148 ;set default console
|
||
|
||
pdlen equ 48 ;length of Process
|
||
; Descriptor
|
||
|
||
p_cns equ byte ptr 020h ;default cns
|
||
p_disk equ byte ptr 012h ;default disk
|
||
p_user equ byte ptr 013h ;default user
|
||
p_list equ byte ptr 024h ;default list
|
||
ps_run equ 0 ;PD run status
|
||
pf_keep equ 2 ;PD nokill flag
|
||
|
||
rsp_top equ 0 ;rsp offset
|
||
rsp_pd equ 010h ;PD offset
|
||
rsp_uda equ 040h ;UDA offset
|
||
rsp_bottom equ 140h ;end rsp header
|
||
|
||
qf_rsp equ 08h ;queue RSP flag
|
||
|
||
;
|
||
; CODE SEGMENT
|
||
;
|
||
CSEG
|
||
org 0
|
||
|
||
mpm: int mpmint
|
||
ret
|
||
|
||
main: ;create ECHO queue
|
||
mov cl,mpm_qmake ! mov dx,offset qd
|
||
call mpm
|
||
;open ECHO queue
|
||
mov cl,mpm_qopen ! mov dx,offset qpb
|
||
call mpm
|
||
;set priority to normal
|
||
mov cl,mpm_setprior ! mov dx,200
|
||
call mpm
|
||
|
||
;ES points to SYSDAT
|
||
mov es,sdatseg
|
||
|
||
loop: ;forever
|
||
;read cmdtail from queue
|
||
mov cl,mpm_qread ! mov dx,offset qpb
|
||
call mpm
|
||
|
||
;set default values from PD
|
||
mov bx,pdadr
|
||
; mov dl,es:p_disk[bx] ;p_disk=0-15
|
||
; inc dl ! mov disk,dl ;make disk=1-16
|
||
; mov dl,es:p_user[bx]
|
||
; mov user,dl
|
||
; mov dl,es:p_list[bx]
|
||
; mov list,dl
|
||
mov dl,es:p_cns[bx]
|
||
mov console,dl
|
||
|
||
;set default console
|
||
; mov dl,console
|
||
mov cl,mpm_setdefcon ! call mpm
|
||
|
||
;scan cmdtail and look for '$' or 0.
|
||
;when found, replace w/ cr,lf,'$'
|
||
|
||
lea bx,cmdtail ! mov al,'$' ! mov ah,0
|
||
mov dx,bx ! add dx,131
|
||
nextchar:
|
||
cmp bx,dx ! ja endcmd
|
||
cmp [bx],al ! je endcmd
|
||
cmp [bx],ah ! je endcmd
|
||
inc bx ! jmps nextchar
|
||
endcmd:
|
||
mov byte ptr [bx],13
|
||
mov byte ptr 1[bx],10
|
||
mov byte ptr 2[bx],'$'
|
||
|
||
;write command tail
|
||
lea dx,cmdtail ! mov cl,mpm_conwrite
|
||
call mpm
|
||
;detach console
|
||
mov dl,console
|
||
mov cl,mpm_condetach ! call mpm
|
||
;done, get next command
|
||
jmps loop
|
||
|
||
;
|
||
; DATA SEGMENT
|
||
;
|
||
|
||
DSEG
|
||
org rsp_top
|
||
|
||
sdatseg dw 0,0,0
|
||
dw 0,0,0
|
||
dw 0,0
|
||
|
||
org rsp_pd
|
||
|
||
pd dw 0,0 ; link,thread
|
||
db ps_run ; status
|
||
db 190 ; priority
|
||
dw pf_keep ; flags
|
||
db 'ECHO ' ; name
|
||
dw offset uda/10h ; uda seg
|
||
db 0,0 ; disk,user
|
||
db 0,0 ; load dsk,usr
|
||
dw 0 ; mem
|
||
dw 0,0 ; dvract,wait
|
||
db 0,0
|
||
dw 0
|
||
db 0 ; console
|
||
db 0,0,0
|
||
db 0 ; list
|
||
db 0,0,0
|
||
dw 0,0,0,0
|
||
|
||
org rsp_uda
|
||
|
||
uda dw 0,offset dma,0,0 ;0
|
||
dw 0,0,0,0
|
||
dw 0,0,0,0 ;10h
|
||
dw 0,0,0,0
|
||
dw 0,0,0,0 ;20h
|
||
dw 0,0,0,0
|
||
dw 0,0,offset stack_tos,0 ;30h
|
||
dw 0,0,0,0
|
||
dw 0,0,0,0 ;40h
|
||
dw 0,0,0,0
|
||
dw 0,0,0,0 ;50h
|
||
dw 0,0,0,0
|
||
dw 0,0,0,0 ;60h
|
||
|
||
org rsp_bottom
|
||
|
||
qbuf rb 131 ;Queue buffer
|
||
|
||
qd dw 0 ;link
|
||
db 0,0 ;net,org
|
||
dw qf_rsp ;flags
|
||
db 'ECHO ' ;name
|
||
dw 131 ;msglen
|
||
dw 1 ;nmsgs
|
||
dw 0,0 ;dq,nq
|
||
dw 0,0 ;msgcnt,msgout
|
||
dw offset qbuf ;buffer addr.
|
||
|
||
dma rb 128
|
||
|
||
stack dw 0cccch,0cccch,0cccch
|
||
dw 0cccch,0cccch,0cccch
|
||
dw 0cccch,0cccch,0cccch
|
||
dw 0cccch,0cccch,0cccch
|
||
dw 0cccch,0cccch,0cccch
|
||
stack_tos dw offset main ; start offset
|
||
dw 0 ; start seg
|
||
dw 0 ; init flags
|
||
|
||
pdadr rw 1 ; QPB Buffer
|
||
cmdtail rb 129 ; starts here
|
||
db 13,10,'$'
|
||
|
||
qpb db 0,0 ;must be zero
|
||
dw 0 ;queue ID
|
||
dw 1 ;nmsgs
|
||
dw offset pdadr ;buffer addr.
|
||
db 'ECHO ' ;name to open
|
||
|
||
console db 0
|
||
;disk db 0
|
||
;user db 0
|
||
;list db 0
|
||
|
||
end
|
||
|