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:
@@ -0,0 +1,191 @@
|
||||
|
||||
;
|
||||
; ECHO - Resident System Process
|
||||
; Print Command tail to console
|
||||
;
|
||||
|
||||
;
|
||||
; DEFINITIONS
|
||||
;
|
||||
|
||||
ccpmint equ 224 ;ccpm entry interrupt
|
||||
c_writebuf equ 9 ;print string
|
||||
c_detach equ 147 ;detach console
|
||||
c_setnum equ 148 ;set default console
|
||||
q_make equ 134 ;create queue
|
||||
q_open equ 135 ;open queue
|
||||
q_read equ 137 ;read queue
|
||||
q_write equ 139 ;write queue
|
||||
p_priority equ 145 ;set priority
|
||||
|
||||
pdlen equ 48 ;length of Process
|
||||
; Descriptor
|
||||
|
||||
p_cns equ byte ptr 020h ;default cns
|
||||
p_disk equ byte ptr 012h ;default disk
|
||||
p_user equ byte ptr 013h ;default user
|
||||
p_list equ byte ptr 024h ;default list
|
||||
ps_run equ 0 ;PD run status
|
||||
pf_keep equ 2 ;PD nokill flag
|
||||
|
||||
rsp_top equ 0 ;rsp offset
|
||||
rsp_pd equ 010h ;PD offset
|
||||
rsp_uda equ 040h ;UDA offset
|
||||
rsp_bottom equ 140h ;end rsp header
|
||||
|
||||
qf_rsp equ 08h ;queue RSP flag
|
||||
|
||||
;
|
||||
; CODE SEGMENT
|
||||
;
|
||||
CSEG
|
||||
org 0
|
||||
|
||||
ccpm: int ccpmint
|
||||
ret
|
||||
|
||||
main: ;create ECHO queue
|
||||
mov cl,q_make ! mov dx,offset qd
|
||||
call ccpm
|
||||
;open ECHO queue
|
||||
mov cl,q_open ! mov dx,offset qpb
|
||||
call ccpm
|
||||
;set priority to normal
|
||||
mov cl,p_priority ! mov dx,200
|
||||
call ccpm
|
||||
|
||||
;ES points to SYSDAT
|
||||
mov es,sdatseg
|
||||
|
||||
loop: ;forever
|
||||
;read cmdtail from queue
|
||||
mov cl,q_read ! mov dx,offset qpb
|
||||
call ccpm
|
||||
|
||||
;set default values from PD
|
||||
mov bx,pdadr
|
||||
; mov dl,es:p_disk[bx] ;p_disk=0-15
|
||||
; inc dl ! mov disk,dl ;make disk=1-16
|
||||
; mov dl,es:p_user[bx]
|
||||
; mov user,dl
|
||||
; mov dl,es:p_list[bx]
|
||||
; mov list,dl
|
||||
mov dl,es:p_cns[bx]
|
||||
mov console,dl
|
||||
|
||||
;set default console
|
||||
; mov dl,console
|
||||
mov cl,c_setnum ! call ccpm
|
||||
|
||||
;scan cmdtail and look for '$' or 0.
|
||||
;when found, replace w/ cr,lf,'$'
|
||||
|
||||
lea bx,cmdtail ! mov al,'$' ! mov ah,0
|
||||
mov dx,bx ! add dx,131
|
||||
nextchar:
|
||||
cmp bx,dx ! ja endcmd
|
||||
cmp [bx],al ! je endcmd
|
||||
cmp [bx],ah ! je endcmd
|
||||
inc bx ! jmps nextchar
|
||||
endcmd:
|
||||
mov byte ptr [bx],13
|
||||
mov byte ptr 1[bx],10
|
||||
mov byte ptr 2[bx],'$'
|
||||
|
||||
;write command tail
|
||||
lea dx,cmdtail ! mov cl,c_writebuf
|
||||
call ccpm
|
||||
;detach console
|
||||
mov dl,console
|
||||
mov cl,c_detach ! call ccpm
|
||||
;done, get next command
|
||||
jmps loop
|
||||
|
||||
;
|
||||
; DATA SEGMENT
|
||||
;
|
||||
|
||||
DSEG
|
||||
org rsp_top
|
||||
|
||||
sdatseg dw 0,0,0
|
||||
dw 0,0,0
|
||||
dw 0,0
|
||||
|
||||
org rsp_pd
|
||||
|
||||
pd dw 0,0 ; link,thread
|
||||
db ps_run ; status
|
||||
db 190 ; priority
|
||||
dw pf_keep ; flags
|
||||
db 'ECHO ' ; name
|
||||
dw offset uda/10h ; uda seg
|
||||
db 0,0 ; disk,user
|
||||
db 0,0 ; load dsk,usr
|
||||
dw 0 ; mem
|
||||
dw 0,0 ; dvract,wait
|
||||
db 0,0
|
||||
dw 0
|
||||
db 0 ; console
|
||||
db 0,0,0
|
||||
db 0 ; list
|
||||
db 0,0,0
|
||||
dw 0,0,0,0
|
||||
|
||||
org rsp_uda
|
||||
|
||||
uda dw 0,offset dma,0,0 ;0
|
||||
dw 0,0,0,0
|
||||
dw 0,0,0,0 ;10h
|
||||
dw 0,0,0,0
|
||||
dw 0,0,0,0 ;20h
|
||||
dw 0,0,0,0
|
||||
dw 0,0,offset stack_tos,0 ;30h
|
||||
dw 0,0,0,0
|
||||
dw 0,0,0,0 ;40h
|
||||
dw 0,0,0,0
|
||||
dw 0,0,0,0 ;50h
|
||||
dw 0,0,0,0
|
||||
dw 0,0,0,0 ;60h
|
||||
|
||||
org rsp_bottom
|
||||
|
||||
qbuf rb 131 ;Queue buffer
|
||||
|
||||
qd dw 0 ;link
|
||||
db 0,0 ;net,org
|
||||
dw qf_rsp ;flags
|
||||
db 'ECHO ' ;name
|
||||
dw 131 ;msglen
|
||||
dw 1 ;nmsgs
|
||||
dw 0,0 ;dq,nq
|
||||
dw 0,0 ;msgcnt,msgout
|
||||
dw offset qbuf ;buffer addr.
|
||||
|
||||
dma rb 128
|
||||
|
||||
stack dw 0cccch,0cccch,0cccch
|
||||
dw 0cccch,0cccch,0cccch
|
||||
dw 0cccch,0cccch,0cccch
|
||||
dw 0cccch,0cccch,0cccch
|
||||
dw 0cccch,0cccch,0cccch
|
||||
stack_tos dw offset main ; start offset
|
||||
dw 0 ; start seg
|
||||
dw 0 ; init flags
|
||||
|
||||
pdadr rw 1 ; QPB Buffer
|
||||
cmdtail rb 129 ; starts here
|
||||
db 13,10,'$'
|
||||
|
||||
qpb db 0,0 ;must be zero
|
||||
dw 0 ;queue ID
|
||||
dw 1 ;nmsgs
|
||||
dw offset pdadr ;buffer addr.
|
||||
db 'ECHO ' ;name to open
|
||||
|
||||
console db 0
|
||||
;disk db 0
|
||||
;user db 0
|
||||
;list db 0
|
||||
|
||||
end
|
||||
@@ -0,0 +1,271 @@
|
||||
CP/M ASM86 1.1 SOURCE: ECHO.A86 PAGE 1
|
||||
|
||||
1
|
||||
2
|
||||
3 ;
|
||||
4 ; ECHO - Resident System Process
|
||||
5 ; Print Command tail to console
|
||||
6 ;
|
||||
7
|
||||
8 ;
|
||||
9 ; DEFINITIONS
|
||||
10 ;
|
||||
11
|
||||
12 00E0 ccpmint equ 224 ;ccpm entry interrupt
|
||||
13 0009 c_writebuf equ 9 ;print string
|
||||
14 0093 c_detach equ 147 ;detach console
|
||||
15 0094 c_setnum equ 148 ;set default console
|
||||
16 0086 q_make equ 134 ;create queue
|
||||
17 0087 q_open equ 135 ;open queue
|
||||
18 0089 q_read equ 137 ;read queue
|
||||
19 008B q_write equ 139 ;write queue
|
||||
20 0091 p_priority equ 145 ;set priority
|
||||
21
|
||||
22 0030 pdlen equ 48 ;length of Process
|
||||
23 ; Descriptor
|
||||
24
|
||||
25 0020 p_cns equ byte ptr 020h ;default cns
|
||||
26 0012 p_disk equ byte ptr 012h ;default disk
|
||||
27 0013 p_user equ byte ptr 013h ;default user
|
||||
28 0024 p_list equ byte ptr 024h ;default list
|
||||
29 0000 ps_run equ 0 ;PD run status
|
||||
30 0002 pf_keep equ 2 ;PD nokill flag
|
||||
31
|
||||
32 0000 rsp_top equ 0 ;rsp offset
|
||||
33 0010 rsp_pd equ 010h ;PD offset
|
||||
34 0040 rsp_uda equ 040h ;UDA offset
|
||||
35 0140 rsp_bottom equ 140h ;end rsp header
|
||||
36
|
||||
37 0008 qf_rsp equ 08h ;queue RSP flag
|
||||
38
|
||||
39 ;
|
||||
40 ; CODE SEGMENT
|
||||
41 ;
|
||||
42 CSEG
|
||||
43 org 0
|
||||
44
|
||||
45 0000 CDE0 ccpm: int ccpmint
|
||||
46 0002 C3 ret
|
||||
47
|
||||
48 main: ;create ECHO queue
|
||||
49 0003 B186BAC301 mov cl,q_make ! mov dx,offset qd
|
||||
50 0008 E8F5FF 0000 call ccpm
|
||||
51 ;open ECHO queue
|
||||
52 000B B187BA0903 mov cl,q_open ! mov dx,offset qpb
|
||||
53 0010 E8EDFF 0000 call ccpm
|
||||
CP/M ASM86 1.1 SOURCE: ECHO.A86 PAGE 2
|
||||
|
||||
54
|
||||
55 ;set priority to normal
|
||||
56 0013 B191BAC800 mov cl,p_priority ! mov dx,200
|
||||
57 0018 E8E5FF 0000 call ccpm
|
||||
58
|
||||
59 ;ES points to SYSDAT
|
||||
60 001B 8E060000 mov es,sdatseg
|
||||
61
|
||||
62 loop: ;forever
|
||||
63 ;read cmdtail from queue
|
||||
64 001F B189BA0903 mov cl,q_read ! mov dx,offset qpb
|
||||
65 0024 E8D9FF 0000 call ccpm
|
||||
66
|
||||
67 ;set default values from PD
|
||||
68 0027 8B1E8302 mov bx,pdadr
|
||||
69 ; mov dl,es:p_disk[bx] ;p_disk=0-15
|
||||
70 ; inc dl ! mov disk,dl ;make disk=1-16
|
||||
71 ; mov dl,es:p_user[bx]
|
||||
72 ; mov user,dl
|
||||
73 ; mov dl,es:p_list[bx]
|
||||
74 ; mov list,dl
|
||||
75 002B 268A5720 mov dl,es:p_cns[bx]
|
||||
76 002F 88161903 mov console,dl
|
||||
77
|
||||
78 ;set default console
|
||||
79 ; mov dl,console
|
||||
80 0033 B194E8C8FF 0000 mov cl,c_setnum ! call ccpm
|
||||
81
|
||||
82 ;scan cmdtail and look for '$' or 0.
|
||||
83 ;when found, replace w/ cr,lf,'$'
|
||||
84
|
||||
85 0038 8D1E8502B024 lea bx,cmdtail ! mov al,'$' ! mov ah,0
|
||||
86 B400
|
||||
87 0040 8BD381C28300 mov dx,bx ! add dx,131
|
||||
88 nextchar:
|
||||
89 0046 3BDA770B 0055 cmp bx,dx ! ja endcmd
|
||||
90 004A 38077407 0055 cmp [bx],al ! je endcmd
|
||||
91 004E 38277403 0055 cmp [bx],ah ! je endcmd
|
||||
92 0052 43EBF1 0046 inc bx ! jmps nextchar
|
||||
93 endcmd:
|
||||
94 0055 C6070D mov byte ptr [bx],13
|
||||
95 0058 C647010A mov byte ptr 1[bx],10
|
||||
96 005C C6470224 mov byte ptr 2[bx],'$'
|
||||
97
|
||||
98 ;write command tail
|
||||
99 0060 8D168502B109 lea dx,cmdtail ! mov cl,c_writebuf
|
||||
100 0066 E897FF 0000 call ccpm
|
||||
101 ;detach console
|
||||
102 0069 8A161903 mov dl,console
|
||||
103 006D B193E88EFF 0000 mov cl,c_detach ! call ccpm
|
||||
104 ;done, get next command
|
||||
105 0072 EBAB 001F jmps loop
|
||||
106
|
||||
CP/M ASM86 1.1 SOURCE: ECHO.A86 PAGE 3
|
||||
|
||||
107
|
||||
108 ;
|
||||
109 ; DATA SEGMENT
|
||||
110 ;
|
||||
111
|
||||
112 DSEG
|
||||
113 org rsp_top
|
||||
114
|
||||
115 0000 000000000000 sdatseg dw 0,0,0
|
||||
116 0006 000000000000 dw 0,0,0
|
||||
117 000C 00000000 dw 0,0
|
||||
118
|
||||
119 org rsp_pd
|
||||
120
|
||||
121 0010 00000000 pd dw 0,0 ; link,thread
|
||||
122 0014 00 db ps_run ; status
|
||||
123 0015 BE db 190 ; priority
|
||||
124 0016 0200 dw pf_keep ; flags
|
||||
125 0018 4543484F2020 db 'ECHO ' ; name
|
||||
126 2020
|
||||
127 0020 0400 dw offset uda/10h ; uda seg
|
||||
128 0022 0000 db 0,0 ; disk,user
|
||||
129 0024 0000 db 0,0 ; load dsk,usr
|
||||
130 0026 0000 dw 0 ; mem
|
||||
131 0028 00000000 dw 0,0 ; dvract,wait
|
||||
132 002C 0000 db 0,0
|
||||
133 002E 0000 dw 0
|
||||
134 0030 00 db 0 ; console
|
||||
135 0031 000000 db 0,0,0
|
||||
136 0034 00 db 0 ; list
|
||||
137 0035 000000 db 0,0,0
|
||||
138 0038 000000000000 dw 0,0,0,0
|
||||
139 0000
|
||||
140
|
||||
141 org rsp_uda
|
||||
142
|
||||
143 0040 0000DF010000 uda dw 0,offset dma,0,0 ;0
|
||||
144 0000
|
||||
145 0048 000000000000 dw 0,0,0,0
|
||||
146 0000
|
||||
147 0050 000000000000 dw 0,0,0,0 ;10h
|
||||
148 0000
|
||||
149 0058 000000000000 dw 0,0,0,0
|
||||
150 0000
|
||||
151 0060 000000000000 dw 0,0,0,0 ;20h
|
||||
152 0000
|
||||
153 0068 000000000000 dw 0,0,0,0
|
||||
154 0000
|
||||
155 0070 000000007D02 dw 0,0,offset stack_tos,0 ;30h
|
||||
156 0000
|
||||
157 0078 000000000000 dw 0,0,0,0
|
||||
158 0000
|
||||
159 0080 000000000000 dw 0,0,0,0 ;40h
|
||||
CP/M ASM86 1.1 SOURCE: ECHO.A86 PAGE 4
|
||||
|
||||
160
|
||||
161 0000
|
||||
162 0088 000000000000 dw 0,0,0,0
|
||||
163 0000
|
||||
164 0090 000000000000 dw 0,0,0,0 ;50h
|
||||
165 0000
|
||||
166 0098 000000000000 dw 0,0,0,0
|
||||
167 0000
|
||||
168 00A0 000000000000 dw 0,0,0,0 ;60h
|
||||
169 0000
|
||||
170
|
||||
171 org rsp_bottom
|
||||
172
|
||||
173 0140 qbuf rb 131 ;Queue buffer
|
||||
174
|
||||
175 01C3 0000 qd dw 0 ;link
|
||||
176 01C5 0000 db 0,0 ;net,org
|
||||
177 01C7 0800 dw qf_rsp ;flags
|
||||
178 01C9 4543484F2020 db 'ECHO ' ;name
|
||||
179 2020
|
||||
180 01D1 8300 dw 131 ;msglen
|
||||
181 01D3 0100 dw 1 ;nmsgs
|
||||
182 01D5 00000000 dw 0,0 ;dq,nq
|
||||
183 01D9 00000000 dw 0,0 ;msgcnt,msgout
|
||||
184 01DD 4001 dw offset qbuf ;buffer addr.
|
||||
185
|
||||
186 01DF dma rb 128
|
||||
187
|
||||
188 025F CCCCCCCCCCCC stack dw 0cccch,0cccch,0cccch
|
||||
189 0265 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch
|
||||
190 026B CCCCCCCCCCCC dw 0cccch,0cccch,0cccch
|
||||
191 0271 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch
|
||||
192 0277 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch
|
||||
193 027D 0300 stack_tos dw offset main ; start offset
|
||||
194 027F 0000 dw 0 ; start seg
|
||||
195 0281 0000 dw 0 ; init flags
|
||||
196
|
||||
197 0283 pdadr rw 1 ; QPB Buffer
|
||||
198 0285 cmdtail rb 129 ; starts here
|
||||
199 0306 0D0A24 db 13,10,'$'
|
||||
200
|
||||
201 0309 0000 qpb db 0,0 ;must be zero
|
||||
202 030B 0000 dw 0 ;queue ID
|
||||
203 030D 0100 dw 1 ;nmsgs
|
||||
204 030F 8302 dw offset pdadr ;buffer addr.
|
||||
205 0311 4543484F2020 db 'ECHO ' ;name to open
|
||||
206 2020
|
||||
207
|
||||
208 0319 00 console db 0
|
||||
209 ;disk db 0
|
||||
210 ;user db 0
|
||||
211 ;list db 0
|
||||
212
|
||||
CP/M ASM86 1.1 SOURCE: ECHO.A86 PAGE 5
|
||||
|
||||
213
|
||||
214 end
|
||||
215
|
||||
216
|
||||
217 END OF ASSEMBLY. NUMBER OF ERRORS: 0. USE FACTOR: 2%
|
||||
CP/M ASM86 1.1 SOURCE: ECHO.A86 PAGE 006
|
||||
|
||||
CCPM 0000 L 45# 50 53 57 65 80 100 103
|
||||
CCPMINT 00E0 N 12# 45
|
||||
CDETACH 0093 N 14# 103
|
||||
CMDTAIL 0285 V 85 99 198#
|
||||
CONSOLE 0319 V 76 102 208#
|
||||
CS SREG V
|
||||
CSETNUM 0094 N 15# 80
|
||||
CWRITEBUF 0009 N 13# 99
|
||||
DMA 01DF V 143 186#
|
||||
DS SREG V
|
||||
ENDCMD 0055 L 89 90 91 93#
|
||||
ES SREG V 60 75
|
||||
LOOP 001F L 62# 105
|
||||
MAIN 0003 L 48# 193
|
||||
NEXTCHAR 0046 L 88# 92
|
||||
PCNS 0020 N 25# 75
|
||||
PD 0010 V 121#
|
||||
PDADR 0283 V 68 197# 204
|
||||
PDISK 0012 N 26#
|
||||
PDLEN 0030 N 22#
|
||||
PFKEEP 0002 N 30# 124
|
||||
PLIST 0024 N 28#
|
||||
PPRIORITY 0091 N 20# 56
|
||||
PSRUN 0000 N 29# 122
|
||||
PUSER 0013 N 27#
|
||||
QBUF 0140 V 173# 184
|
||||
QD 01C3 V 49 175#
|
||||
QFRSP 0008 N 37# 177
|
||||
QMAKE 0086 N 16# 49
|
||||
QOPEN 0087 N 17# 52
|
||||
QPB 0309 V 52 64 201#
|
||||
QREAD 0089 N 18# 64
|
||||
QWRITE 008B N 19#
|
||||
RSPBOTTOM 0140 N 35# 171
|
||||
RSPPD 0010 N 33# 119
|
||||
RSPTOP 0000 N 32# 113
|
||||
RSPUDA 0040 N 34# 141
|
||||
SDATSEG 0000 V 60 115#
|
||||
SS SREG V
|
||||
STACK 025F V 188#
|
||||
STACKTOS 027D V 155 193#
|
||||
UDA 0040 V 127 143#
|
||||
Reference in New Issue
Block a user