mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-25 01:14:21 +00:00
171 lines
2.6 KiB
NASM
171 lines
2.6 KiB
NASM
$title ('MP/M 1.1 Tick Process')
|
||
name tick
|
||
cseg
|
||
;tick:
|
||
;do;
|
||
|
||
|
||
;/*
|
||
; Copyright (C) 1979, 1980
|
||
; Digital Research
|
||
; P.O. Box 579
|
||
; Pacific Grove, CA 93950
|
||
;
|
||
; Revised:
|
||
; 18 Jan 80 by Thomas Rolander
|
||
;*/
|
||
|
||
;$include (common.lit)
|
||
;$nolist
|
||
;$include (proces.lit)
|
||
;$nolist
|
||
;$include (xdos.lit)
|
||
;$nolist
|
||
;$include (xdos.ext)
|
||
;$nolist
|
||
;$include (bdosi.ext)
|
||
;$nolist
|
||
;$include (datapg.ext)
|
||
;$nolist
|
||
|
||
|
||
; xdos:
|
||
extrn xdos
|
||
; procedure (func,info) address external;
|
||
; declare func byte;
|
||
; declare info address;
|
||
; end xdos;
|
||
|
||
; stpclk:
|
||
extrn stpclk
|
||
; procedure external;
|
||
; end stpclk;
|
||
|
||
; declare dlr address external;
|
||
extrn dlr
|
||
|
||
; declare drl address exteranl;
|
||
extrn drl
|
||
|
||
dseg
|
||
;/*
|
||
; Tick Process Data Segment
|
||
;*/
|
||
; declare tick$pd process$descriptor public
|
||
; initial (0,rtr$status,10,tick$entrypt,
|
||
; 'Tick ',0,0ffh,0,0,0);
|
||
tickpd:
|
||
public tickpd
|
||
extrn clockpd
|
||
dw clockpd ; pl
|
||
db 0 ; status
|
||
db 10 ; priority
|
||
dw tickentrypt ; stkptr
|
||
db 'Tick ' ; 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 ; scratch
|
||
|
||
; declare tick$stk (10) address
|
||
; initial (restarts,.tick);
|
||
tickstk:
|
||
dw 0c7c7h,0c7c7h,0c7c7h
|
||
dw 0c7c7h,0c7c7h,0c7c7h
|
||
dw 0c7c7h,0c7c7h,0c7c7h
|
||
tickentrypt:
|
||
dw tick
|
||
|
||
; declare ret byte;
|
||
|
||
; declare pdadr address;
|
||
; declare pd based pdadr process$descriptor;
|
||
cseg
|
||
|
||
|
||
;/*
|
||
; tick:
|
||
;*/
|
||
|
||
; tick:
|
||
tick:
|
||
; procedure;
|
||
|
||
; do forever;
|
||
@4:
|
||
; ret = xdos (flag$wait,1);
|
||
MVI E,1
|
||
MVI C,84H
|
||
CALL XDOS
|
||
; if dlr <> 0 then
|
||
LHLD DLR
|
||
MOV A,H
|
||
ORA L
|
||
JZ @4
|
||
; do;
|
||
; pdadr = dlr;
|
||
XCHG
|
||
; if (pd.b := pd.b - 1) = 0 then
|
||
LXI H,10H
|
||
DAD D
|
||
DCR M
|
||
JNZ @2
|
||
INX H
|
||
MOV A,M
|
||
ORA A
|
||
JZ @6
|
||
DCR M
|
||
JMP @2
|
||
; do while (pdadr <> 0) and (pd.b = 0);
|
||
@6: ; DE = pdadr, HL = pd.b
|
||
MOV A,D
|
||
ORA E
|
||
JZ @2
|
||
LXI H,10H
|
||
DAD D
|
||
MOV A,M
|
||
INX H
|
||
ORA M
|
||
JNZ @2
|
||
; dlr = pd.pl;
|
||
XCHG
|
||
MOV E,M
|
||
INX H
|
||
MOV D,M
|
||
XCHG
|
||
SHLD DLR
|
||
; pd.pl = drl;
|
||
LHLD DRL
|
||
XCHG
|
||
MOV M,D
|
||
DCX H
|
||
MOV M,E
|
||
; drl = pdadr;
|
||
SHLD DRL
|
||
; pdadr = dlr;
|
||
LHLD DLR
|
||
XCHG
|
||
; end;
|
||
JMP @6
|
||
@7:
|
||
@2:
|
||
; if dlr = 0 then call stp$clk;
|
||
LHLD DLR
|
||
MOV A,H
|
||
ORA L
|
||
CZ STPCLK
|
||
; end;
|
||
; end;
|
||
JMP @4
|
||
; end tick;
|
||
;end tick;
|
||
END
|
||
|