mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-25 09:24:19 +00:00
1 line
3.5 KiB
NASM
1 line
3.5 KiB
NASM
$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
|
||
|