mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-26 09:54:20 +00:00
Upload
Digital Research
This commit is contained in:
219
MPM OPERATING SYSTEMS/MPM II/MPM II SOURCE 2/nucleus/attach.asm
Normal file
219
MPM OPERATING SYSTEMS/MPM II/MPM II SOURCE 2/nucleus/attach.asm
Normal file
@@ -0,0 +1,219 @@
|
||||
title 'MP/M II V2.0 Attach Process'
|
||||
name 'attch'
|
||||
dseg
|
||||
@@attch:
|
||||
public @@attch
|
||||
cseg
|
||||
;attch:
|
||||
@attch:
|
||||
public @attch
|
||||
;do;
|
||||
|
||||
;/*
|
||||
; Copyright (C) 1979, 1980,1981
|
||||
; Digital Research
|
||||
; P.O. Box 579
|
||||
; Pacific Grove, CA 93950
|
||||
;
|
||||
; Revised:
|
||||
; 14 Sept 81 by Thomas Rolander
|
||||
;*/
|
||||
|
||||
;$include (common.lit)
|
||||
;$nolist
|
||||
;$include (proces.lit)
|
||||
;$nolist
|
||||
;$include (queue.lit)
|
||||
;$nolist
|
||||
;$include (xdos.lit)
|
||||
;$nolist
|
||||
;$include (datapg.ext)
|
||||
;$nolist
|
||||
;$include (xdos.ext)
|
||||
;$nolist
|
||||
;$include (bdos.ext)
|
||||
;$nolist
|
||||
|
||||
; declare rlr address external;
|
||||
extrn rlr
|
||||
|
||||
; nfxdos:
|
||||
; procedure (func,info) external;
|
||||
extrn nfxdos
|
||||
; declare func byte;
|
||||
; declare info address;
|
||||
; end nfxdos;
|
||||
|
||||
; xdos:
|
||||
; procedure (func,info) byte external;
|
||||
extrn xdos
|
||||
; declare func byte;
|
||||
; declare info address;
|
||||
; end xdos;
|
||||
|
||||
; printb:
|
||||
; procedure (bufferadr) external;
|
||||
extrn printb
|
||||
; declare bufferadr address;
|
||||
; end printb;
|
||||
|
||||
; declare rlrpd based rlr process$descriptor;
|
||||
|
||||
;/*
|
||||
dseg
|
||||
; Attach Process Data Segment
|
||||
;*/
|
||||
; declare attch$pd process$descriptor public
|
||||
; initial (0,rtr$status,20,.attch$entrypt,
|
||||
; 'ATTACH ',' '+80h,0,0ffh,0);
|
||||
attchpd:
|
||||
public attchpd
|
||||
dw 0 ; pl
|
||||
db 0 ; status
|
||||
db 20 ; priority
|
||||
dw attchentrypt ; stkptr
|
||||
db 'ATTACH ',' '+80h ; name
|
||||
db $-$ ; console
|
||||
db 0ffh ; memseg (system)
|
||||
dw $-$ ; b
|
||||
dw $-$ ; thread
|
||||
dw $-$ ; disk set DMA
|
||||
db $-$ ; disk select / user code
|
||||
dw $-$ ; dcnt
|
||||
db $-$ ; searchl
|
||||
dw $-$ ; searcha
|
||||
ds 2 ; drvact
|
||||
ds 20 ; registers
|
||||
ds 2 ; sratch
|
||||
|
||||
; declare attch$stk (14) address
|
||||
; initial (restarts,.attch);
|
||||
attchstk:
|
||||
dw 0c7c7h,0c7c7h,0c7c7h
|
||||
dw 0c7c7h,0c7c7h,0c7c7h
|
||||
dw 0c7c7h,0c7c7h,0c7c7h
|
||||
dw 0c7c7h,0c7c7h,0c7c7h
|
||||
dw 0c7c7h
|
||||
attchentrypt:
|
||||
dw attch
|
||||
|
||||
; declare attch$lqcb structure (
|
||||
; lqueue,
|
||||
; buf (12) byte )
|
||||
; initial (0,'ATTACH ',10,1);
|
||||
attchlqcb:
|
||||
dw $-$ ; ql
|
||||
db 'ATTACH ' ; name
|
||||
dw 10 ; msglen
|
||||
dw 1 ; nmbmsgs
|
||||
dw $-$ ; dqph
|
||||
dw $-$ ; nqph
|
||||
dw $-$ ; mh
|
||||
dw $-$ ; mt
|
||||
dw $-$ ; bh
|
||||
ds 12 ; buf (12) byte
|
||||
; declare attch$uqcb userqcbhead public
|
||||
; initial (.attch$lqcb,.field);
|
||||
attchuqcb:
|
||||
dw attchlqcb ; pointer
|
||||
dw field ; msgadr
|
||||
; declare field (11) byte;
|
||||
field:
|
||||
ds 11
|
||||
; declare console byte at (.field(1));
|
||||
console equ field+1
|
||||
cseg
|
||||
|
||||
atfail:
|
||||
db 0dh,0ah
|
||||
db 'Attach failed.'
|
||||
db '$'
|
||||
|
||||
|
||||
;/*
|
||||
; attch:
|
||||
; The purpose of the attach process is to attach
|
||||
; the console to the specified process.
|
||||
|
||||
; Entry Conditions:
|
||||
; None
|
||||
|
||||
; Exit Conditions:
|
||||
; None
|
||||
|
||||
;*/
|
||||
|
||||
; attch:
|
||||
attch:
|
||||
; procedure public;
|
||||
public attch
|
||||
; declare i byte;
|
||||
|
||||
; call nfxdos (make$queue,.attch$lqcb);
|
||||
LXI D,ATTCHLQCB
|
||||
MVI C,86H
|
||||
; do forever;
|
||||
@4:
|
||||
CALL NFXDOS
|
||||
; call nfxdos (read$queue,.attch$uqcb);
|
||||
LXI D,ATTCHUQCB
|
||||
MVI C,89H
|
||||
CALL NFXDOS
|
||||
; rlrpd.console = console;
|
||||
LXI B,0EH
|
||||
LHLD RLR
|
||||
DAD B
|
||||
LDA CONSOLE
|
||||
MOV M,A
|
||||
; i = 2;
|
||||
MVI C,8
|
||||
LXI H,FIELD+2
|
||||
; do while i <> 10;
|
||||
@6:
|
||||
; if field(i) = 0 then
|
||||
MOV A,M
|
||||
ORA A
|
||||
JNZ @1
|
||||
; do while i <> 10;
|
||||
@8:
|
||||
; field(i) = ' ';
|
||||
MVI M,20H
|
||||
; i = i + 1;
|
||||
INX H
|
||||
DCR C
|
||||
JNZ @8
|
||||
JMP @7
|
||||
; end;
|
||||
@1:
|
||||
; else i = i + 1;
|
||||
INX H
|
||||
DCR C
|
||||
JNZ @6
|
||||
; end;
|
||||
@7:
|
||||
; /* specify that console of attached process must
|
||||
; match that currently of the attach process */
|
||||
; field(10) = 0ffh;
|
||||
MVI M,0FFH
|
||||
; if xdos (assign$console,.field(1)) = 255 then
|
||||
LXI D,FIELD+1H
|
||||
MVI C,95H
|
||||
CALL XDOS
|
||||
INR L
|
||||
; do;
|
||||
; call printb (.('Attach failed.','$'));
|
||||
LXI B,atfail
|
||||
CZ PRINTB
|
||||
; end;
|
||||
; call nfxdos (detlst,0);
|
||||
mvi c,9fh
|
||||
call xdos
|
||||
; call nfxdos (detach,0);
|
||||
MVI C,93H
|
||||
; end; /* forever */
|
||||
JMP @4
|
||||
; end attch;
|
||||
|
||||
;end attch;
|
||||
END
|
||||
|
||||
Reference in New Issue
Block a user