Files
Digital-Research-Source-Code/MPM OPERATING SYSTEMS/MPM I/MPM I SOURCE/06/abort.asm
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

1 line
3.5 KiB
NASM
Raw 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.

$title ('MP/M 1.1 Abort Resident System Process')
name abort
cseg
;abort:
;do;
;$include (copyrt.lit)
;/*
; Copyright (C) 1979, 1980
; Digital Research
; P.O. Box 579
; Pacific Grove, CA 93950
;
; Revised:
; 26 Jan 80 by Thomas Rolander
;*/
;$include (common.lit)
;$nolist
;$include (proces.lit)
;$nolist
;$include (queue.lit)
;$nolist
;$include (mon2.lit)
;$nolist
;$include (datapg.ext)
;$nolist
;$include (mon2.ext)
;$nolist
;$include (bdos.ext)
;$nolist
; mon1:
; procedure (func,info) external;
extrn mon1
; declare func byte;
; declare info address;
; end mon1;
; mon2:
; procedure (func,info) byte external;
extrn mon2
; declare func byte;
; declare info address;
; end mon2;
; declare rlrpd based rlr process$descriptor;
;/*
; Abort Process Data Segment
;*/
; declare os address public;
os: dw $-$
public os
; declare abort$pd process$descriptor public
; initial (0,rtr$status,20,.abort$entrypt,
; 'ABORT ',0,0ffh,0);
abortpd:
public abortpd
dw 0 ; pl
db 0 ; status
db 20 ; priority
dw abortentrypt ; stkptr
db 'ABORT ' ; 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
dw $-$ ; drvact
ds 20 ; registers
ds 2 ; scratch
; declare abort$stk (10) address
; initial (restarts,.abort);
abortstk:
dw 0c7c7h,0c7c7h,0c7c7h
dw 0c7c7h,0c7c7h,0c7c7h
dw 0c7c7h,0c7c7h,0c7c7h
abortentrypt:
dw abort
; declare abort$lqcb structure (
; lqueue,
; buf (14) byte )
; initial (0,'ABORT ',12,1);
abortlqcb:
dw $-$ ; ql
db 'ABORT ' ; name
dw 12 ; msglen
dw 1 ; nmbmsgs
dw $-$ ; dqph
dw $-$ ; nqph
dw $-$ ; mh
dw $-$ ; mt
dw $-$ ; bh
ds 2 ; link
ds 12 ; buf (12) byte
; declare abort$uqcb userqcbhead public
; initial (.abort$lqcb,.dskslct);
abortuqcb:
dw abortlqcb ; pointer
dw dskslct ; msgadr
dskslct: ds 1
console: ds 1
pname: ds 8
ds 2 ;filler for 12 byte message
pfnmpb: dw pname
dw abtfcb
apcb:
dw 0
param: ds 1 ;address var, overwrites next byte
abtfcb:
ds 16 ;abort file control block
abtcns equ abtfcb+9
abortfail:
db 'No Abort'
db '$'
;/*
; abort:
; The purpose of the abort process is to abort
; the specified process.
; Entry Conditions:
; None
; Exit Conditions:
; None
;*/
; abort:
abort:
; procedure public;
public abort
; declare i byte;
; call mon1 (make$queue,.abort$lqcb);
LXI D,ABORTLQCB
MVI C,86H
; do forever;
@4:
CALL MON1
; call mon1 (read$queue,.abort$uqcb);
LXI D,ABORTUQCB
MVI C,89H
CALL MON1
; rlrpd.console = console;
mvi c,9ch
call mon1
LXI B,0EH
DAD B
LDA CONSOLE
MOV M,A
lxi d,pfnmpb
mvi c,152
call mon2 ;parse the program name
mov a,h
ora l
lda console
jz @7 ;jump if no console in cmnd tail
inx h
mov a,h
ora l
jz abterr ;bad program name
mov a,m ;may specify console #
sui '0'
cpi 10
jc @7
sui 'A'-'0'+10
; end;
@7:
sta abtcns
; /* parameters to MON2 abort process are terminate
; system or non-sytem process & release memory segment */
; apcb.param = 00ffh;
lxi h,00ffh
shld param
; if mon2 (abort$process,.apcb) = 255 then
LXI D,apcb
MVI C,9dH
CALL MON2
INR L
; do;
; call mon1 (9,.('Abort failed.','$'));
abterr:
mvi c,9
LXI d,abortfail
CZ mon1
; end;
; call mon1 (detach,0);
MVI C,93H
; end; /* forever */
JMP @4
; end abort;
;end abort;
END