mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-26 09:54:20 +00:00
299 lines
14 KiB
Plaintext
299 lines
14 KiB
Plaintext
CP/M ASM86 1.1 SOURCE: CLOCK.A86 Clock process PAGE 1
|
||
|
||
1
|
||
2 title 'Clock process'
|
||
3
|
||
4 ;*****************************************************
|
||
5 ;*
|
||
6 ;* CLOCK RSP
|
||
7 ;*
|
||
8 ;* The clock process will update the CCP/M-86 Time of
|
||
9 ;* Day structure each time it returns from waiting for
|
||
10 ;* the 'Second' System Flag (Flag 2). When the minute
|
||
11 ;* is updated, the 'minute' flag is set (Flag 3).
|
||
12 ;*
|
||
13 ;*****************************************************
|
||
14
|
||
15 ; ccpm functions
|
||
16
|
||
17 00E0 ccpmint equ 224 ; ccpm entry interrupt
|
||
18 0084 dev_flagwait equ 132 ; flagwait
|
||
19 0085 dev_flagset equ 133 ; flagset
|
||
20
|
||
21 0068 rlr equ 68H ; Ready List Root
|
||
22
|
||
23 0028 xiosentry equ 28H ; offset of double word pointer in
|
||
24 ; the system data segment of XIOS entry
|
||
25 0008 io_statline equ 8 ; update XIOS status line
|
||
26
|
||
27 007E tod_offset equ 07Eh
|
||
28 0002 sec_flag equ 2
|
||
29 0003 min_flag equ 3
|
||
30
|
||
31 ; TOD format
|
||
32
|
||
33 0000 tod_day equ word ptr 0
|
||
34 0002 tod_hour equ byte ptr 2
|
||
35 0003 tod_min equ byte ptr 3
|
||
36 0004 tod_sec equ byte ptr 4
|
||
37
|
||
38 ; PD fields
|
||
39
|
||
40 0010 p_uda equ 10h ; offset of UDA segment in PD
|
||
41 0030 pdlen equ 48 ; length of process descriptor
|
||
42
|
||
43 0000 ps_run equ 0 ; PD run status
|
||
44 0002 pf_keep equ 2 ; PD nokill flag
|
||
45
|
||
46 ; RSP format
|
||
47
|
||
48 0000 rsp_top equ 0 ; rsp offset
|
||
49 0010 rsp_pd equ 010h ; PD offset
|
||
50 0040 rsp_uda equ 040h ; UDA offset
|
||
51 0140 rsp_bottom equ 140h ; end rsp header
|
||
52
|
||
53 ;*****************************************************
|
||
CP/M ASM86 1.1 SOURCE: CLOCK.A86 Clock process PAGE 2
|
||
|
||
54
|
||
55 ;*
|
||
56 ;* CLOCK CODE SEGMENT
|
||
57 ;*
|
||
58 ;*****************************************************
|
||
59
|
||
60 cseg
|
||
61 org 0
|
||
62
|
||
63
|
||
64 0000 CDE0C3 ccpm: int ccpmint ! ret
|
||
65
|
||
66 clock: ; Clock process starts here
|
||
67
|
||
68 0003 8E1E0000 mov ds,sysdat
|
||
69 0007 8B3668008E44 mov si,.rlr ! mov es,p_uda[si] ; ES is never saved.
|
||
70 10
|
||
71 ; Note if other ccpm system calls
|
||
72 ; are added to this program, ES
|
||
73 ; may be changed.
|
||
74 000E BB7E00 mov bx,tod_offset
|
||
75
|
||
76 ; Loop forever
|
||
77 clockloop:
|
||
78 ; BX -> TOD structure in SYSDAT
|
||
79 ; Wait for Seconds Flag
|
||
80 0011 B98400BA0200 mov cx,dev_flagwait ! mov dx,sec_flag
|
||
81 0017 53 push bx
|
||
82 0018 E8E5FF 0000 call ccpm
|
||
83
|
||
84 ; Call XIOS status line update.
|
||
85 ; ES=UDA, DS=system data segment
|
||
86 001B B80800 mov ax,io_statline
|
||
87 001E 33C98BD1 xor cx,cx ! mov dx,cx
|
||
88 0022 FF1E2800 callf dword ptr .xiosentry
|
||
89
|
||
90 0026 5B pop bx
|
||
91
|
||
92 ; increment seconds
|
||
93 0027 F8 clc
|
||
94 0028 8A4704 mov al,tod_sec[bx]
|
||
95 002B FEC027884704 inc al ! daa ! mov tod_sec[bx],al
|
||
96
|
||
97 ; check for minute mark
|
||
98
|
||
99 0031 3C607303 0038 cmp al,60h ! jae update_min
|
||
100 0035 E9D9FF 0011 jmp clock_loop
|
||
101
|
||
102 update_min:
|
||
103 ; set minute flag
|
||
104
|
||
105 0038 C6470400 mov tod_sec[bx],0
|
||
106 ; mov cx,dev_flagset ! mov dx,min_flag
|
||
CP/M ASM86 1.1 SOURCE: CLOCK.A86 Clock process PAGE 3
|
||
|
||
107
|
||
108 ; push bx ! call ccpm ! pop bx
|
||
109
|
||
110 ; increment minute field of TOD
|
||
111
|
||
112 003C F88A4703 clc ! mov al,tod_min[bx]
|
||
113 0040 FEC027884703 inc al ! daa ! mov tod_min[bx],al
|
||
114
|
||
115 ; check if hour
|
||
116
|
||
117 0046 3C607303 004D cmp al,60h ! jae update_hour
|
||
118 004A E9C4FF 0011 jmp clock_loop
|
||
119
|
||
120 update_hour:
|
||
121 ;update hour field
|
||
122
|
||
123 004D C6470300 mov tod_min[bx],0
|
||
124 0051 F88A4702 clc ! mov al,tod_hour[bx]
|
||
125 0055 FEC027884702 inc al ! daa ! mov tod_hour[bx],al
|
||
126
|
||
127 ; check for day
|
||
128
|
||
129 005B 3C247303 0062 cmp al,24h ! jae update_day
|
||
130 005F E9AFFF 0011 jmp clock_loop
|
||
131
|
||
132 update_day:
|
||
133 ; update Day field
|
||
134
|
||
135 0062 C6470200 mov tod_hour[bx],0
|
||
136 0066 FF07 inc tod_day[bx]
|
||
137 0068 E9A6FF 0011 jmp clock_loop ; loop forever
|
||
138
|
||
139 ;*****************************************************
|
||
140 ;*
|
||
141 ;* Data Segment
|
||
142 ;*
|
||
143 ;*****************************************************
|
||
144
|
||
145 dseg
|
||
146 org 0
|
||
147
|
||
148 0000 000000000000 sysdat dw 0,0,0
|
||
149 0006 000000000000 dw 0,0,0
|
||
150 000C 00000000 dw 0,0
|
||
151
|
||
152 org rsp_pd
|
||
153
|
||
154 0010 00000000 dw 0,0 ; link,thread
|
||
155 0014 00 db ps_run ; status
|
||
156 0015 BE db 190 ; priority
|
||
157 0016 0200 dw pf_keep ; flags
|
||
158 0018 434C4F434B20 db 'CLOCK ' ; name
|
||
159 2020
|
||
CP/M ASM86 1.1 SOURCE: CLOCK.A86 Clock process PAGE 4
|
||
|
||
160
|
||
161 0020 0400 dw offset uda/10h ; uda seg
|
||
162 0022 00000000 db 0,0,0,0 ; dsk,usr,ldsk,luser
|
||
163 0026 0000 dw 0 ; mem partitions
|
||
164 0028 00000000 dw 0,0 ; dvract,wait
|
||
165 002C 0000 db 0,0 ; org,net
|
||
166 002E 0000 dw 0 ; parent
|
||
167 0030 00000000 db 0,0,0,0 ; cns,abort,cin,cout
|
||
168 0034 00000000 db 0,0,0,0 ; lst,sf3,sf4,sf5
|
||
169 0038 000000000000 dw 0,0,0,0 ; reserved,pret,scratch
|
||
170 0000
|
||
171
|
||
172 org rsp_uda
|
||
173
|
||
174 0040 000000000000 uda dw 0,0,0,0 ;0-7 note: no default DMA
|
||
175 0000
|
||
176 0048 000000000000 dw 0,0,0,0 ;8-fh
|
||
177 0000
|
||
178 0050 000000000000 dw 0,0,0,0 ;10-17
|
||
179 0000
|
||
180 0058 000000000000 dw 0,0,0,0 ;18-1f
|
||
181 0000
|
||
182 0060 000000000000 dw 0,0,0,0 ;20-27
|
||
183 0000
|
||
184 0068 000000000000 dw 0,0,0,0 ;28-2f
|
||
185 0000
|
||
186 0070 000000003A01 dw 0,0,offset stack_top,0 ;30-37
|
||
187 0000
|
||
188 0078 000000000000 dw 0,0,0,0 ;38-3f
|
||
189 0000
|
||
190 0080 000000000000 dw 0,0,0,0 ;40-47
|
||
191 0000
|
||
192 0088 000000000000 dw 0,0,0,0 ;48-4f
|
||
193 0000
|
||
194 0090 000000000000 dw 0,0,0,0 ;50-57
|
||
195 0000
|
||
196 0098 000000000000 dw 0,0,0,0 ;58-5f
|
||
197 0000
|
||
198 00A0 01 db 1 ;60 INSYS <> 0
|
||
199 ;don't switch from
|
||
200 ;from UDA stack
|
||
201 ;on entry to SUP
|
||
202 00A1 00 db 0
|
||
203
|
||
204 00A2 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch ;62-67
|
||
205 00A8 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch ;68-6F
|
||
206 CCCC
|
||
207 00B0 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch ;70
|
||
208 CCCC
|
||
209 00B8 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch
|
||
210 CCCC
|
||
211 00C0 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch ;80
|
||
212 CCCC
|
||
CP/M ASM86 1.1 SOURCE: CLOCK.A86 Clock process PAGE 5
|
||
|
||
213
|
||
214 00C8 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch
|
||
215 CCCC
|
||
216 00D0 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch ;90
|
||
217 CCCC
|
||
218 00D8 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch
|
||
219 CCCC
|
||
220 00E0 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch ;A0
|
||
221 CCCC
|
||
222 00E8 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch
|
||
223 CCCC
|
||
224 00F0 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch ;B0
|
||
225 CCCC
|
||
226 00F8 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch
|
||
227 CCCC
|
||
228 0100 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch ;C0
|
||
229 CCCC
|
||
230 0108 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch
|
||
231 CCCC
|
||
232 0110 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch ;D0
|
||
233 CCCC
|
||
234 0118 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch
|
||
235 CCCC
|
||
236 0120 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch ;E0
|
||
237 CCCC
|
||
238 0128 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch
|
||
239 CCCC
|
||
240 0130 CCCCCCCCCCCC dw 0cccch,0cccch,0cccch,0cccch ;F0
|
||
241 CCCC
|
||
242 0138 CCCC dw 0cccch
|
||
243
|
||
244 013A 0300 stack_top dw offset clock ; code starting point
|
||
245 013C 0000 dw 0 ; code seg - set by GENSYS
|
||
246 013E 0000 dw 0 ; init. flags - set by GENSYS
|
||
247
|
||
248 ; UDA is 100H bytes long
|
||
249 end
|
||
250
|
||
251
|
||
252 END OF ASSEMBLY. NUMBER OF ERRORS: 0. USE FACTOR: 2%
|
||
CP/M ASM86 1.1 SOURCE: CLOCK.A86 Clock process PAGE 006
|
||
|
||
CCPM 0000 L 64# 82
|
||
CCPMINT 00E0 N 17# 64
|
||
CLOCK 0003 L 66# 244
|
||
CLOCKLOOP 0011 L 77# 100 118 130 137
|
||
CS SREG V
|
||
DEVFLAGSET 0085 N 19#
|
||
DEVFLAGWAIT 0084 N 18# 80
|
||
DS SREG V 68
|
||
ES SREG V 69
|
||
IOSTATLINE 0008 N 25# 86
|
||
MINFLAG 0003 N 29#
|
||
PDLEN 0030 N 41#
|
||
PFKEEP 0002 N 44# 157
|
||
PSRUN 0000 N 43# 155
|
||
PUDA 0010 N 40# 69
|
||
RLR 0068 N 21# 69
|
||
RSPBOTTOM 0140 N 51#
|
||
RSPPD 0010 N 49# 152
|
||
RSPTOP 0000 N 48#
|
||
RSPUDA 0040 N 50# 172
|
||
SECFLAG 0002 N 28# 80
|
||
SS SREG V
|
||
STACKTOP 013A V 186 244#
|
||
SYSDAT 0000 V 68 148#
|
||
TODDAY 0000 N 33# 136
|
||
TODHOUR 0002 N 34# 124 125 135
|
||
TODMIN 0003 N 35# 112 113 123
|
||
TODOFFSET 007E N 27# 74
|
||
TODSEC 0004 N 36# 94 95 105
|
||
UDA 0040 V 161 174#
|
||
UPDATEDAY 0062 L 129 132#
|
||
UPDATEHOUR 004D L 117 120#
|
||
UPDATEMIN 0038 L 99 102#
|
||
XIOSENTRY 0028 N 23# 88
|