Files
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

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