Trailing-Edge
-
PDP-10 Archives
-
ks10_8080_microcode
-
kns10.pnt
There are no other files named kns10.pnt in the archive.
.MAIN. CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51
CONDEF.M80 TABLE OF CONTENTS
30 *CONSOLE ERROR CODES DEFINED*
85 *NUMERICAL VALUE ASSIGNMENTS*
113 *ASCII CHARACTER VALUE ASSIGNMENTS*
212 *MACROS FOR CODE OFT USED OR SUBJECT TO REPEATED CHANGES*
531 *KS10 CONSOLE HARDCORE*
532 *"RST" INSTRUCTION CODE*
629 *POWER UP START LOCATON*
666 *INITIALIZE UARTS*
730 *8080 PROM CHECKSUMMER*
997 *BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH PROMPT*
1185 *TYPEIN COMMAND DECODER AND DISPATCHER*
1227 *CTY SERVICE*
1383 *COMMAND DECODER CONTINUED*
1650 *COMMAND DISPATCH LIST*
1797 *CHECKSUMS AS COMPUTED BY SPECIAL 10-BASED PROGRAM*
1820 *** "MR" CMD ***
1848 *INTERRUPT HANDLER*
2229 *8080 TO KS10 CHARACTER SERVICE*
2272 *KS10 TO 8080 CHARACTER SERVICE*
2403 *TTY HANDLER FOR SPECIAL CHARACTERS*
2698 *CONSOLE COMMANDS AS IMPLEMENTED*
2699 *"EB" CMD*
2763 *** "DB" CMD ***
2850 *** "EM" CMD ***
2927 *** "EN" CMD ***
2952 *** "DM" CMD ***
2953 *** "DN" CMD ***
3014 *** "DN" CMD ***
3033 *** "EI" CMD ***
3057 *** "DI" CMD ***
3058 *** "DN" CMD ***
3082 *** "EK" CMD ***
3108 *** "EN" CMD ***
3115 *** "LA" CMD ***
3122 *** "LI" CMD ***
3128 *** "LK" CMD ***
3137 *** "DN" CMD ***
3146 *** "DK" CMD ***
3160 *** "CP" CMD ***
3184 *** "ER" CMD ***
3236 *** "LR" CMD ***
3248 *** "DR" CMD ***
3263 *** "LC" CMD ***
3272 *** "CE" CMD ***
3311 *** "TE" CMD ***
3335 *** "SC" CMD ***
3363 *** "TP CMD" ***
3386 *** "LT" CMD ***
3413 *** "MM" CMD ***
3428 *** "SI" CMD ***
3442 *** "CS" CMD ***
3453 *** "CH" CMD ***
3465 *** "LF" CMD ***
3476 *** "DF" CMD ***
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51
CMDS.M80 TABLE OF CONTENTS
3577 *** "RC" ***
3625 *** "EJ" CMD ***
3668 *** "TR" CMD ***
3704 *** "PM" CMD ***
3716 *** "EC" CMD ***
3821 *** "EN" CMD ***
3829 *** "DC" CMD ***
3830 *** "DN TO DC" CMD ***
3885 *** "SM" CMD ***
3971 *** "PE" CMD ***
4015 *** "EX" CMD ***
4052 *** "ST" CMD ***
4082 *** "CO" CMD ***
4102 *** "HA" CMD ***
4111 *** "SH" CMD ***
4127 *** "KL" CMD ***
4165 *** "TT" CMD ***
4179 *** "PW" CMD ***
4226 *** "MK" & "UM" CMD ***
4260 *** "ZM" CMD ***
4294 *** "RP" CMD ***
4382 *** "DS" CMD ***
4417 *** "MS" CMD ***
4524 *** "BT" CMD ***
4558 *** "LB" CMD ***
4604 *** "MT" CMD ***
4702 *** "MB" CMD ***
4729 FILE SYSTEM
4849 CRAM LOADER CODE
4959 *** "FI" CMD ***
5020 *** "B2" CMD ***
5029 *** "VD" CMD ***
5041 *** "VT" CMD ***
5055 VERIFY CRAM CODE
5256 CHANNEL COMMAND LIST EXECUTOR
5497 *** "BC" CMD ***
5704 ****KS10 CONSOLE SUBROUTINE FILE
6468 **** CLRB EXECUTE CODE ****
6476 **** SOME ERROR CODES ****
6857 SUBROUTINE TIME DELAY
6875 STRING COMPARE ROUTINE
6941 UART MODE MODIFICATIONS
7135 MODE 4 FOR DECIDING TO COLLECT AN ENVELOPE OR CTY OUT
7163 ENVELOPE COLLECTOR
7371 **** MORE ERROR ESCAPES ****
7394 ****DISK TRANSFER CHANNEL COMMAND LIST****
7439 TAPE TRANSFER CHANNEL COMMAND LIST
7550 *SM10 DATA STORAGE PARAMETERS*
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 1
CONDEF.M80
1 ;>>;WCONDEF.M80
2
3 ; VERSION 5.2 OF CONSOLE CODE - ALL OF THE CHANGES BETWEEN VERSION 4.2
4 ; AND 5.2 ARE NOTED WITH A (5.2X) AT THE CHANGE WHERE X IDENTIFIES THE
5 ; CATEGORY OF CHANGE. X CAN BE:
6 ;
7 ; A - KLINIK FIXES
8 ; B - UART FIXES
9 ; C - ?NXM FIXES
10 ; D - PW RECODING
11 ; E - HSB FIXES
12 ; F - FORCED RELOAD FIXES
13 ; G - POWER FAIL CODE
14 ; H - ADDITION OF COMMENT CAPABILITY
15 ;----------------------------------------------------------------------
16 ; ALSO, THIS FILE (KS.MAS) CONSISTS OF 6 INDIVIDUAL M80 FILES WHICH ARE
17 ; SEPARATED INTO THE INDIVIDUAL FILES BEFORE BEING ASSEMBLED BY CROSS.
18 ; THESE INDIVIDUAL FILES SEPARATE THE CODE INTO MAJOR DIVISIONS AND FOR
19 ; EASE IN MAKING CHANGES, ETC.. THEY ARE ALL COMBINED INTO ON MASTER FILE
20 ; KS.MAS. THESE ARE:
21 ; CONDEF.M80 - DEFINITIONS, ETC.
22 ; CHKSMS.M80 - PROM CHECKSUMS
23 ; HCORE.M80 - HARDCORE CONSOLE STUFF
24 ; CMDS.M80 - CONSOLE COMMANDS
25 ; SUBRTN.M80 - SUBROUTINE FILE
26 ; DR.M80 - DISK/TAPE ROUTINES
27 ; MSG.M80 - MESSAGE FILE
28 ; STORE.M80 - STORAGE AREA
29
30 .SBTTL *CONSOLE ERROR CODES DEFINED*
31
32 ; LISTING CONTROLS
33
34 .NLIST BEX
35 .LIST MD,MC,MEB
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 2
CONDEF.M80 *CONSOLE ERROR CODES DEFINED*
37
38 ; SYMBOL ASSIGNMENTS
39
40 020000 RAMST = 8192. ; FIRST "RAM" MEMORY ADDRESS
41 003244 KPAINI = 1700. ; VALUE FOR .44 SEC BETWEEN WORD31 CHECKS
42 000043 KATIMX = 35. ; NUMBER OF TIME IN A ROW KA HAS TO BE THE SAME
43 ; KATIMX = 14. IS 6 SECONDS, = 35. IS 15 SEC
44 000300 RUNFP = ^O300 ; I/O REG CONTAINING CPU "RUN FLOP"
45 000300 TTYSW = ^O300 ; I/O REG FOR TTY FRONT PANEL SWITCHES
46 000301 SMSTS = ^O301 ; I/O REG FOR KS10 STATUS BITS
47 000301 BOOTSW = ^O301 ; I/O REG FOR HARDWARE "BOOT" SWITCH
48 000302 CARRIER = ^O302 ; I/O REG FOR READING KLINIK CARRIER
49 000100 SMPAR = ^O100 ; I/O REG FOR ENABLING KS10 PARITY DETECT
50 000100 RESET = ^O100 ; I/O REG FOR ISSUEING KS10 BUS RESET
51 000101 REFERR = ^O101 ; I/O REG FOR READING MOS MEM REFRESH ERR FLAG
52 000101 LIGHTS = ^O101 ; I/O REG FOR WRITING THE PANEL LIGHTS
53 000101 DTR = ^O101 ; I/O REG FOR WRITING THE DATA TERMINAL READY
54 000102 R.BUSY = ^O102 ; I/O REG FOR READING "MEM BUSY" OR "I/O BUSY"
55 000102 R.RESET = ^O102 ; I/O REG FOR READY IF RESET WENT TRUE (VIA AC LO)
56 000204 CRMCTL = ^O204 ; I/O REG FOR ACCESSING CRAM
57 000205 DIAG = ^O205 ; I/O REG FOR DIAG FUNCTION BITS
58 000206 CLKCTL = ^O206 ; I/O REG FOR SETTING KS10 CLK CTL BITS
59 000210 BUSCTL = ^O210 ; I/O REG FOR KS10 BUS COMM.
60 000212 CPUCTL = ^O212 ; I/O REG FOR KS10 "RUN,EXECUTE,CONTINUE"
61 000201 CTYCTL = ^O201 ; I/O REG FOR UART CONTROL/STATUS
62 000200 CTYDAT = ^O200 ; I/O REG FOR UART DATA BUFFER
63 000203 REMCTL = ^O203 ; REMOTE UART CONTROL REGISTER
64 000202 REMDAT = ^O202 ; REMOTE UART DATA REGISTER
65 000114 DTARB = ^O114 ; I/O REG FOR DATA CYCLE OF BUS ARB..
66 000115 BUSARB = ^O115 ; I/O REG FOR BUS ARBITRATION SIGNALS
67 000116 INT2KS = ^O116 ; I/O REG FOR INTERRUPTING KS-10
68 000000 D2835 = ^O0 ; R DATA BITS 28-35
69 000001 D2027 = ^O1 ; R DATA BITS 20-27
70 000002 D1219 = ^O2 ; R DATA BITS 12-19
71 000003 D0411 = ^O3 ; R DATA BITS 04-11
72 000103 D0003 = ^O103 ; R DATA BITS 0-3
73 000103 A2835 = ^O103
74 000105 A2027 = ^O105
75 000107 A1219 = ^O107
76 000111 A0411 = ^O111
77 000113 A0003 = ^O113
78 000102 W2835 = ^O102
79 000104 W2027 = ^O104
80 000106 W1219 = ^O106
81 000110 W0411 = ^O110
82 000112 W0003 = ^O112
83
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 3
CONDEF.M80 *NUMERICAL VALUE ASSIGNMENTS*
85 .SBTTL *NUMERICAL VALUE ASSIGNMENTS*
86
87 002000 BPI16 = ^O2000 ; "DENSITY/SLAVE" DEFAULT FOR 1600 BPI TAPES
88 001000 BPI8 = ^O1000 ; "DENSITY/SLAVE" DEFAULT FOR 800 BPI TAPES
89 000377 EOLCH = ^O377 ; END-OF-LINE CODE
90 000020 ARBRESP = ^O20 ; BIT FOR "BUS REQ"
91 000001 DATACK = 01 ; BIT FOR "DATA ACKNOWLEDGE"
92 000100 NONXMEM = ^O100 ; BIT FOR "NON-EXISTANT MEMORY"
93 000020 TRPDEF = ^O20 ; BIT SAYS DEFAULT TRAP ENABLE ON
94 000174 DEFLTE = ^O174 ; BITS SAY DEFAULT: CACHE ENABLE, 1MSEC CLK ENA
95 ; ALL PARITY ON
96 100000 BIT15 = ^O100000 ; THIS IS BIT 15 (IF YOU COUNT RIGHT TO LEFT)
97 000001 BT.BIT = 1 ; BIT SAYS DOING BOOTSTRAP FROM DISK
98 000002 MT.BIT = 2 ; BIT SAYS DOING BOOTSTRAP FROM MAGTAPE
99 000001 .MODE0 = 1 ; FLAG SAYS KLINIK MODE 0
100 000002 .MODE1 = 2 ; FLAG SAYS KLINIK MODE 1
101 000004 .MODE2 = 4 ; FLAG SAYS KLINIK MODE 2
102 000010 .MODE3 = ^O10 ; FLAG SAYS KLINIK MODE 3
103 000020 .MODE4 = ^O20 ; FLAG SAYS KLINIK MODE 4 (MANUFACTURING MODE)
104 000003 CARRLOSS = ^O3 ; INTERRUPT CODE FOR "KLINIK CARRIER LOSS"
105 000002 KL.ACTIVE = ^O2 ; INTERRUPT CODE FOR WHEN KLINIK BECOMES ACTIVE
106 000373 STMSK = ^O373 ; MASK FOR THE STATE LIGHT
107 000004 STBIT = ^O4 ; STATE BIT
108 000333 .IN = ^O333 ; THE "IN" INSTRUCTION
109 000323 .OUT = ^O323 ; THE "OUT" INSTRUCTION
110 000311 .RET = ^O311 ; THE "RET" INSTRUCTION
111
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 4
CONDEF.M80 *ASCII CHARACTER VALUE ASSIGNMENTS*
113 .SBTTL *ASCII CHARACTER VALUE ASSIGNMENTS*
114
115 000000 Q.OUT = 00 ; NULL CHAR..STANDS FOR "QUICK.OUT"
116 000001 SYNC = 01 ; SYNC CHAR FOR APT MESSAGES
117 000015 CRCHR = ^O15 ; CARRIAGE RETURN
118 000012 LFCHR = ^O12 ; LINE FEED
119 000054 COMMA = ^O54 ; ASCII FOR COMMA
120 000073 SEMIC = ^O73 ; (5.2H) ASCII FOR SEMI-COLON
121 000034 CNBCK = ^O34 ; CONTROL-BACKSLASH
122 000007 BELL = ^O7 ; A BELL FOR WHEN HOST SYSTEMS GIVE ME GRIEF
123 000052 STAR = ^O52 ; A STAR *
124 000042 QUO = ^O42 ; DOUBLE QUOTES "
125 000043 LBSIGN = ^O43 ; POUND SIGN #
126 000051 RPAREN = ^O51 ; RIGHT PAREN )
127 000033 ALT = ^O33 ; ALTMODE
128 000032 CNTLZ = ^O32 ; CONTROL-Z
129 000031 CNTLY = ^O31 ; CONTROL-Y ENDS MODE 4
130 000025 CNTLU = ^O25 ; CONTROL-U
131 000023 CNTLS = ^O23 ; CONTROL-S
132 000021 CNTLQ = ^O21 ; CONTROL-Q
133 000017 CNTLO = ^O17 ; CONTROL-O
134 000003 CNTLC = ^O3 ; CONTROL-C
135 000177 RBOUT = ^O177 ; RUB-OUT
136 000103 CCHR = ^O103 ; "C"
137 000104 DCHR = ^O104 ; "D"
138 000011 TAB = ^O11 ; HORIZONTAL TAB
139 000040 SPACE = ^O40 ; SPACE
140 000057 SLASH = ^O57 ; SLASH "/"
141 000134 BSLASH = ^O134 ; BACKSLASH "\"
142 000044 DOLLAH = ^O44 ; DOLLAR SIGN "$"
143 000045 PERCNT = ^O45 ; "%"
144 000077 QUES = ^O77 ; "?"
145 000076 ARROW = ^O76 ; "^"
146 000125 UCHR = ^O125 ; "U"
147 000117 OCHR = ^O117 ; "O"
148 000136 UPARR = ^O136 ; "^"
149 000001 ONE = ^O01 ; "1"
150 000002 TWO = ^O02 ; "2"
151 000003 THREE = ^O03 ; "3"
152 000004 FOUR = ^O04 ; "4"
153 000005 FIVE = ^O05 ; "5"
154 000006 SIX = ^O06 ; "6"
155 000007 SEVEN = ^O07 ; "7"
156 000070 EIGHT = ^O70 ; "8" THE ASCII NUMBER
157 000071 NINE = ^O71 ; "9" THE ASCII NUMBER
158 000012 TEN = ^O12 ; "10"
159
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 5
CONDEF.M80 *ASCII CHARACTER VALUE ASSIGNMENTS*
161
162 ; NUMERICAL ASSIGNMENTS TO GENERATE THE OFFSETS USED IN COMPUTING
163 ; DEVICE ADDRESSES FROM ANY RH BASE ADDRESS.
164
165 .RADIX 8
166 000000 P.00 = 0
167 000002 P.02 = 2
168 000004 P.04 = 4
169 000006 P.06 = 6
170 000010 P.10 = 10
171 000012 P.12 = 12
172 000014 P.14 = 14
173 000016 P.16 = 16
174 000020 P.20 = 20
175 000022 P.22 = 22
176 000024 P.24 = 24
177 000026 P.26 = 26
178 000030 P.30 = 30
179 000032 P.32 = 32
180 000034 P.34 = 34
181 000036 P.36 = 36
182 000040 P.40 = 40
183 000042 P.42 = 42
184 000044 P.44 = 44
185 000046 P.46 = 46
186 000776 D776 = 776
187 000772 D772 = 772
188
189 .RADIX 10
190
191 ; DRIVE CONTROLLER REGISTER IS 776440..FOLLOWING COMMANDS APPLY
192 ; 7 = REWIND
193 ; 11 = DRIVE CLEAR
194 ; 25 = ERASE
195 ; 27 = WRITE TAPE MARK
196 000031 SKP.TAPE=^O31 ; 31 = SPACE FORWARD (SKIP A FILE)
197 ; 33 = SPACE REVERSE (SKIP A FILE)
198 ; 51 = WRITE CHECK FORWARD
199 ; 57 = WRITE CHECK REVERSE
200 ; 61 = WRITE FORWARD
201 000071 READ.TAPE=^O71 ; 71 = READ FORWARD(GO!)
202 ; 77 = READ REVERSE(GO!)
203
204 ; DEFAULT VALUES FOR CHECKSUM COUNTS, SO THAT ASSEMBLIES WITH 3 PROMS WILL WORK
205
206 000000 CHKSM0 = 0
207 000000 CHKSM1 = 0
208 000000 CHKSM2 = 0
209 000000 CHKSM3 = 0
210
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 6
CONDEF.M80 *MACROS FOR CODE OFT USED OR SUBJECT TO REPEATED CHANGES*
212 .SBTTL *MACROS FOR CODE OFT USED OR SUBJECT TO REPEATED CHANGES*
213
214 ; PCHAR: PRINTS A SINGLE CHARACTER, WHICH IT FINDS IN THE TRAILING BYTE.
215 ; CLOBBERS ACCUM.
216
217 .MACRO PCHAR XCHR
218 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
219 .BYTE XCHR ; CHAR TO PRINT
220 .ENDM
221
222 ; KCHAR: PRINT A SINGLE CHARACTER ON THE KLINIK LINE ONLY. CHAR TO BE
223 ; PRINTED IS PASSED AS A TRAILING ARGUMENT.
224
225 .MACRO KCHAR XCHR
226 CALL KCHR ; GO PRINT THE CHARACTER
227 .BYTE XCHR
228 .ENDM
229
230 ; PLINE: PRINTS A LINE OF CHARACTERS, POINTER PASSED AS TRAILING ARGUMENT.
231 ; AND END OF LINE SIGNALED BY A "0" BYTE.
232
233 .MACRO PLINE XMS
234 RST 3 ; PRINT LINE OF CHARS
235 .ADDR XMS ; BUFF TO PRINT
236 .ENDM
237
238 ; KLINE: PRINTS A LINE OF CHARACTERS, POINTER PASSED AS TRAILING ARGUMENT
239 ; AND END OF LINE SIGNALED BY A "0" BYTE.
240
241 .MACRO KLINE XMS
242 CALL KLINE ; PRINT LINE OF CHARS
243 .ADDR XMS ; BUFF TO PRINT
244 .ENDM
245
246 ; INTOFF: EXECUTES THE OLD "INTERNAL MODE OFF" SUBROUTINE.., BUT BY
247 ; USING RESTART INSTRUCTION CALL, WE SAVE 30.+ BYTES OVER "CALL INTOFF".
248
249 .MACRO INTOFF
250 RST 6 ; GO EXIT FROM INTERNAL MODE
251 .ENDM
252
253 ; INTON: EXECUTES THE OLD "INTERNAL MODE ON" SUBROUTINE.., BUT BY USING
254 ; RESTART INSTRUCTION CALL, WE SAVE 30.+ BYTES OVER "CALL INTON".
255
256 .MACRO INTON
257 RST 2 ; GO SET INTERNAL MODE
258 .ENDM
259
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 7
CONDEF.M80 *MACROS FOR CODE OFT USED OR SUBJECT TO REPEATED CHANGES*
261
262 ; CLINE: PRINTS A LINE OF CHARACTERS, POINTER PASSED IN (H,L),
263 ; AND END OF LINE SIGNALED BY A "0" BYTE.
264
265 .MACRO CLINE XMS
266 LXI H,XMS ; PASS POINTER TO THE CHARACTERS
267 CALL CLINE ; PRINT LINE OF CHARS
268 .ENDM
269
270 ; PCRLF: PRINTS CARRIAGE RETURN-LINE FEED. LEAVES ALL REGISTERS INTACT.
271
272 .MACRO PCRLF
273 CRLF ; GO PRINT CARRIAGE RETURN LINE FEED
274 .ENDM
275
276 ; SSCLK: ISSUES A SINGLE KS10 CLOCK..CLOBBERS THE ACCUMULATOR.
277
278 .MACRO SSCLK
279 MVI A,02 ; BIT TO SET "SINGLE CLK" TO KS10
280 OUT CLKCTL ; ISSUE THE SINGLE CLOCK
281 .ENDM
282
283 ; PTAB: PRINTS A TAB. CLOBBERS ACCUM.
284
285 .MACRO PTAB
286 PCHAR TAB ; GO PRINT A TAB
287 .ENDM
288
289 ; PSPACE: PRINTS A " " SPACE. CLOBBERS ACCUM.
290
291 .MACRO PSPACE
292 PCHAR SPACE ; GO PRINT A SPACE
293 .ENDM
294
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 8
CONDEF.M80 *MACROS FOR CODE OFT USED OR SUBJECT TO REPEATED CHANGES*
296
297 ; PSLSH: PRINTS A "/" SLASH. CLOBBERS ACCUM.
298
299 .MACRO PSLASH
300 PCHAR SLASH ; GO PRINT A SLASH
301 .ENDM
302
303 ; ENDCMD: MACRO TO DO THE RIGHT STUFF AT THE END OF A COMMAND.
304 ; COMMON CODE FOR FINISHING ALL INSTRUCTIONS.
305
306 .MACRO ENDCMD
307 RET ; RETURN TO CALLER
308 .ENDM
309
310 ; BUSRESP:
311 ; MACRO TO READ I/O REG 301 IN ORDER TO CHECK ANY OF THE BITS WHICH
312 ; ARE READABLE IN THAT REGISTER.. THE BIT OR BITS TO BE CHECKED IS
313 ; PASSED AS A TRAILING ARGUEMENT "DB" TO A RST INSTRUCTION. THE
314 ; EXECUTION OF THE RESTART ACCOUNTS FOR THE 2 "NOP" TIME REQUIRED
315 ; FOR THE BUS ARBITRATOR TO GRANT THE BUS. THIS MACRO RETURNS
316 ; MAINLINE WITH THE Z-BIT SET. IF THE REG 301 DOES !NOT! MATCH THE
317 ; TRAILING ARG THAT WAS PASSED AND WITH THE Z-BIT CLEAR IF THERE IS
318 ; A "TRUE" IN ANY OF THE BIT POSITIONS PASSED...
319
320 .MACRO BUSRESP XXX
321 CALL BUSRESP ; DO A CALL TO EXECUTE THIS CODE
322 .BYTE XXX ; BITS TO BE CHECKED
323 .ENDM
324
325 .MACRO D ARG,ARG1,NUL,ARG2,ARG3
326 .NLIST
327 .RADIX 8
328 .BYTE ARG3 & 377
329 Q.1 = <<ARG3/400> & 1> ! <<ARG2*2> & 376>
330 Q.2 = <<ARG2/200> & 3> ! <<ARG1*4> & 374>
331 Q.3 = <<ARG1/100> & 7> ! <<ARG*10> & 370>
332 Q.4 = <ARG/40> & 17
333 .BYTE Q.1
334 .BYTE Q.2
335 .BYTE Q.3
336 .BYTE Q.4
337 .RADIX 10
338 .LIST
339
340 .ENDM
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 9
CONDEF.M80 *MACROS FOR CODE OFT USED OR SUBJECT TO REPEATED CHANGES*
342
343 .MACRO LI. ARG2,ARG3
344 .RADIX 8
345 ARG = 0
346 ARG1 = 0
347 NUL = 0
348 Q.1 = <<ARG3/400> & 1> ! <<ARG2*2> & 376>
349 Q.2 = <<ARG2/200> & 3> ! <<ARG1*4> & 374> ! <2*4>
350 .BYTE Q.1
351 .BYTE ARG3 & 377
352 .BYTE Q.2
353 .RADIX 10
354 .ENDM
355
356
357 .MACRO EI. ARG2,ARG3
358 .RADIX 8
359 ARG = 0
360 ARG1 = 0
361 NUL = 0
362 Q.1 = <<ARG3/400> & 1> ! <<ARG2*2> & 376>
363 Q.2 = <<ARG2/200> & 3> ! <<ARG1*4> & 374> ! <4*4>
364 .BYTE Q.1
365 .BYTE ARG3 & 377
366 .BYTE Q.2
367 .RADIX 10
368 .ENDM
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 10
CONDEF.M80 *MACROS FOR CODE OFT USED OR SUBJECT TO REPEATED CHANGES*
370
371 .MACRO DI. ARG2,ARG3
372 .RADIX 8
373 ARG = 0
374 ARG1 = 0
375 NUL = 0
376 .BYTE ARG3 & 377
377 Q.1 = <<ARG3/400> & 1> ! <<ARG2*2> & 376>
378 Q.2 = <<ARG2/200> & 3> ! <<ARG1*4> & 374>
379 .BYTE Q.1
380 .BYTE Q.2
381 .RADIX 10
382 .ENDM
383
384
385 .MACRO DI.INDIRECT ARG3
386 .RADIX 8
387 .ADDR ARG3
388 .BYTE ^O200
389 .RADIX 10
390 .ENDM
391
392 .MACRO TWAIT ARG3
393 .RADIX 8
394 .ADDR ARG3
395 .BYTE <14*4>
396 .RADIX 10
397 .ENDM
398
399 .MACRO WAIT ARG3
400 .RADIX 8
401 .ADDR ARG3
402 .BYTE <6*4>
403 .RADIX 10
404 .ENDM
405
406 .MACRO ERRTST ARG3
407 .RADIX 8
408 .ADDR ARG3
409 .BYTE <10*4>
410 .RADIX 10
411 .ENDM
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 11
CONDEF.M80 *MACROS FOR CODE OFT USED OR SUBJECT TO REPEATED CHANGES*
413
414 .MACRO UBA. ARG2,ARG3
415 .RADIX 8
416 ARG = 0
417 ARG1 = 0
418 NUL = 0
419 .BYTE ARG3 & 377
420 Q.1 = <<ARG3/400> & 1> ! <<ARG2*2> & 376>
421 Q.2 = <<ARG2/200> & 3> ! <<ARG1*4> & 374> ! <16*4>
422 .BYTE Q.1
423 .BYTE Q.2
424 .RADIX 10
425 .ENDM
426
427 .MACRO ENDLST
428 .RADIX 8
429 .BYTE 0
430 .BYTE 0
431 .BYTE <12*4>
432 .RADIX 10
433 .ENDM
434
435 .MACRO MOV5B
436 RST 4
437 .BYTE 0
438 .ENDM
439
440 .MACRO CRLF
441 RST 4
442 .BYTE 2
443 .ENDM
444
445 .MACRO ARG16
446 RST 4
447 .BYTE 4
448 .ENDM
449
450 .MACRO RUN..
451 RST 4
452 .BYTE 6
453 .ENDM
454
455 .MACRO ARG36
456 RST 4
457 .BYTE 8
458 .ENDM
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 12
CONDEF.M80 *MACROS FOR CODE OFT USED OR SUBJECT TO REPEATED CHANGES*
460
461 .MACRO CLRRM FOO
462 RST 4
463 .BYTE 10.
464 .ADDR FOO+5
465 .ENDM
466
467 .MACRO EXAM FOO
468 .RADIX 8
469 CALL EXAMSH ; AND DO EXAM ASSUMING SHORT ADDRESS
470 .ADDR FOO ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
471 .RADIX 10
472 .ENDM
473
474 .MACRO DEPOS FOO
475 .RADIX 8
476 ANA A ; CLR "C-BIT" FOR USE BY COMMON CODE
477 CALL DEPSHT ; AND DO THE DEPOSIT ASSUMING SHORT ADDR
478 .ADDR FOO ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
479 .RADIX 10
480 .ENDM
481
482 .MACRO RD.REG FOO
483 IN FOO ; READ AN I/O REG
484 CMA ; AND ALWAYS COMPLEMENT
485 .ENDM
486
487 .MACRO SETZM FOO
488 CLRRM DMDAT
489 DEPOS FOO
490 .ENDM
491
492 .MACRO TSTRDY FOO
493 .RADIX 8
494 IN FOO ; READ DESIRED UART STATUS
495 ANI 01 ; CHECK IF SET? ZBIT=0/1 READY/NOT YET READY
496 .RADIX 10
497 .ENDM
498
499 .MACRO LONG.DELAY ARG
500 LXI H,200. * ARG ; SET UP THE TIMING COUNT IN H,L REG
501 CALL LTLOOP ; AND GO DELAY ABOUT 1 SEC FOR EACH (300 COUNT)
502 .ENDM
503
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 13
CONDEF.M80 *MACROS FOR CODE OFT USED OR SUBJECT TO REPEATED CHANGES*
505
506 ; MACRO TO SAVE SPACE ON OPERATIONS THAT WANT TO CLEAR A LOCATION IN
507 ; THE RAM.. ELIMINATES EVERY XRA/STA PAIR, AND INSERTS INSTEAD AN RST/BYTE
508 ; PAIR.. AT BEST, AN XRA AND AN STA ARE ELIMINATED. AT WORST, A 3 BYTE STA
509 ; IS REPLACED WITH A 2 BYTE RST/BYTE.
510
511 .MACRO CLRB XX
512 .NLIST
513 OFFSET= XX - ^O20000
514 .IF LE, ^O400-OFFSET
515 .IFF
516 RST 5
517 .BYTE OFFSET
518 .IFT
519 .ERROR OFFSET, ; BYTE OUT OF RANGE ON CLRB MACRO
520 .ENDC
521 .LIST
522 .ENDM
523
524
525 112317 CHKSM0=-^O65461
526 141417 CHKSM1=-^O36361
527 161563 CHKSM2=-^O16215
528 002015 CHKSM3=-^O175763
529 ;>>;WHCORE.M80
530
531 .SBTTL *KS10 CONSOLE HARDCORE*
532 .SBTTL *"RST" INSTRUCTION CODE*
533
534 ; AT POWER UP, ALWAYS BEGIN AT 0000
535
536 000000 .= 0000
537 000000 000 NOP ; NO-OPS FOR 2 INSTR CYCLES
538 000001 000 NOP ; LETS 8080 SETTLE DOWN
539 000002 363 DI ; GUARANTEE INTERRUPTS DISABLED
540 000003 303 100 000 JMP PWRUP ; BEGIN WITH INITIALIZATION CODE
541
542 ; *** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS
543 ; *** AND SPECIAL PURPOSE "RST" INSTRUCTIONS
544 ; BEGIN CODE FOR "PCHAR" WITH A "RST 1"
545
546 000010 .= ^O10
547 000010 343 XTHL ; GET POINTER TO TRAILING ARG
548 000011 176 MOV A,M ; CHAR INTO ACCUM
549 000012 043 INX H ; UPDATE POINTER TO RETURN ADDRESS
550 000013 343 XTHL ; RESTORE RETURN ADDRESS TO STACK
551 000014 303 343 003 JMP PCHR ; AND GO....
552
553 ; *** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS
554 ; *** AND SPECIAL PURPOSE "RST" INSTRUCTIONS
555 ; SUBROUTINE TO SET INTERNAL STATUS (I.E. DON'T TYPE ON TTY)
556
557 000020 .= ^O20
558 000020 345 INTON: PUSH H ; SAVE THE LIL BUGGER
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 13-1
HCORE.M80 *"RST" INSTRUCTION CODE*
559 000021 041 120 040 LXI H,NOPNT ; GET VALUE OF FLAG
560 000024 064 INR M ; INCREMENT BY ONE
561 000025 341 POP H ; RESTORE THE REG WE SAVED
562 000026 311 RET ; AND RETURN
563
564 ; *** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS
565 ; *** AND SPECIAL PURPOSE "RST" INSTRUCTIONS
566 ; BEGIN CODE FOR "PLINE"
567
568 000030 .= ^O30
569 000030 343 XTHL ; GET PNTR TO TRAILING ARG
570 000031 136 MOV E,M ; GET LO ORDER PIECE
571 000032 043 INX H ; UPDATE PNTR
572 000033 126 MOV D,M ; GET HI ORDER PIECE
573 000034 043 INX H ; UPDATE PNTR
574 000035 303 111 004 JMP PLNE ; AND GO TO ACTUAL ROUTINE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 14
HCORE.M80 *"RST" INSTRUCTION CODE*
576
577 ; *** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS
578 ; *** AND SPECIAL PURPOSE "RST" INSTRUCTIONS
579 ; BEGIN CODE FOR "TRAP" OR "UUO" TYPE SUBROUTINE CALLS
580
581 000040 .= ^O40
582 000040 343 XTHL ; SAVE "H,L" WHILE GETTING PC
583 000041 176 MOV A,M ; GET INDEX INTO SUBROUTINE DISPATCH LIST
584 000042 043 INX H ; UPDATE "PC" TO POINT AT RETURN
585 000043 343 XTHL ; PUT BACK RETURN AND RESTORE "H,L"
586 000044 345 PUSH H ; NOW SAVE "H,L" WHILE WE SET UP DISPATCH
587 000045 303 061 032 JMP RTNDIS ; GO CALCULATE SUBROUTINE TO DISPATCH TO..
588
589 ; *** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS
590 ; *** AND SPECIAL PURPOSE "RST" INSTRUCTIONS
591 ; THIS CODE CLEARS A SINGLE BYTE OF RAM SPACE, IN THE RANGE FROM 20000-20377
592
593 000050 .= ^O50
594 000050 343 XTHL ; SAVE "H,L" WHILE GETTING PC
595 000051 176 MOV A,M ; GET INDEX INTO SUBROUTINE DISPATCH LIST
596 000052 043 INX H ; UPDATE "PC" TO POINT AT RETURN
597 000053 343 XTHL ; PUT BACK RETURN AND RESTORE "H,L"
598 000054 345 PUSH H ; NOW SAVE "H,L" WHILE WE SET UP DISPATCH
599 000055 303 117 032 JMP CLRBYT ; GO CALCULATE SUBROUTINE TO DISPATCH TO..
600
601 ; *** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS
602 ; *** AND SPECIAL PURPOSE "RST" INSTRUCTIONS
603 ; THIS CODE EXECUTES THE "INTERNAL MODE OFF" FUNCTION, TURNING OFF
604 ; THE PRINTING OF 8080 FUNCTIONS EXECUTED INTERNALLY. "INTOFF" IS
605 ; CALLED AT LEAST 15 TIMES, SO THIS RESTART CODE SAVES AT LEAST 30
606 ; BYTES OVER "CALLS INTOFF".
607
608 000060 .= ^O60
609 000060 345 PUSH H ; SAVE THE LIL BUGGER
610 000061 041 120 040 LXI H,NOPNT ; CLEAR ACCUM
611 000064 065 DCR M ; DECREMENT PRINT FLAG
612 000065 341 POP H ; RESTORE THE REG WE SAVED
613 000066 311 RET ; AND RETURN
614
615 ; *** RESERVE "RESTART" MEMORY BLOCKS FOR INTERRUPTS
616 ; *** AND SPECIAL PURPOSE "RST" INSTRUCTIONS
617 ; BEGIN CODE FOR HANDLING INTERRUPTS
618
619 000070 .= ^O70
620 000070 363 DI ; GUARANTEE INTERRUPTS DISABLED
621 000071 365 PUSH PSW ; SAVE
622 000072 305 PUSH B ; EVERYTHING
623 000073 325 PUSH D ; ON THE STACK
624 000074 345 PUSH H
625
626 000075 303 221 005 JMP INTRP ; AND GO TO PROCESS THE INTERRUPT...
627
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 15
HCORE.M80 *POWER UP START LOCATON*
629 .SBTTL *POWER UP START LOCATON*
630
631 ; MAINLINE CODE BEGINS HERE
632
633 000100 .= ^O100
634
635 ; BEGIN BY SETTING UP 8080 STACK POINTER
636
637 000100 061 000 044 PWRUP: LXI SP,RAMST+^O2000 ; LOAD STACK PNTR WITH TOP RAM LOC
638
639 ; MUST SET DISPATCH LIST AND CLEAR RAM
640
641 000103 041 000 040 LXI H,RAMST ; SET "H,L" REGISTER TO RAM START ADDR
642 000106 021 000 004 LXI D,^O2000 ; COUNTER TO FILL REST OF RAM WITH 0'S
643
644 000111 066 000 CLRLP: MVI M,00 ; CLEAR A RAM LOC
645 000113 043 INX H ; NEXT RAM LOCATION
646 000114 033 DCX D ; DOWN COUNTER
647 000115 173 MOV A,E ; LO ORDER PIECE TO ACCUM
648 000116 262 ORA D ; THROW IN THE HI ORDER PIECE
649 000117 302 111 000 JNZ CLRLP ; CONTINUE TILL DONE
650
651 ; BEGIN PROCEEDURE FOR INITIALIZING KS10. MUST INDIVIDUALLY CLEAR
652 ; KS10 FLOPS "RUN","EXECUTE",& "CONTINUE" BECAUSE THEY ARE NOT RESET
653 ; BY KS10 BUS RESET.
654
655 000122 257 XRA A ; SET ACCUM=0
656
657 ; SET 0'S TO "RUN,EXECUTE,CONT"
658
659 000123 323 212 OUT CPUCTL ; ***** I/O WRT 212/0 *****
660
661 ; ISSUE KS10 BUS RESET
662
663 000125 315 172 005 CALL MRINT ; DOES RESET AND SETS DEFAULT PARITY & TRAPS
664
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 16
HCORE.M80 *INITIALIZE UARTS*
666 .SBTTL *INITIALIZE UARTS*
667
668 ; RAM BUFFERS HAVE BEEN INITIALIZED.. NOW MUST READ FRONT PANEL
669 ; SWITCHES & INITIALIZE "UART".
670
671 000130 333 300 IN TTYSW ; ***** I/O READ 300Q *****
672 000132 057 CMA ; FIX INVERSION
673
674 000133 001 200 004 LXI B,^O2200 ; THIS SETS B=^O4 AND C=^O200
675 000136 147 MOV H,A ; H WILL HOLD CTY STOP BIT FOR US. @BIT POS 7
676 000137 037 RAR ; BIT 4 MOVES TO BIT 3
677 000140 037 RAR ; BIT MOVES TO BIT 2
678 000141 137 MOV E,A ; E WILL HOLD KLINIK LENGTH BIT. @BIT POS 2
679 000142 037 RAR ; BIT 6 IS AT 4 FROM OTHER SHIFTS, NOW TO BIT 3
680 000143 037 RAR ; AND TO BIT 2
681 000144 157 MOV L,A ; L WILL HOLD CTY LENGTH BIT. @BIT POS 2
682 000145 174 MOV A,H ; ORIGINAL BACK TO ACCUM
683 000146 027 RAL ; BIT 5 TO BIT 6
684 000147 027 RAL ; AND TO BIT 7
685 000150 127 MOV D,A ; D WILL HOLD KLINIK STOP BIT. @BIT POS 7
686
687 ; NOW BEGIN MASKING OPERATIONS TO ISOLATE THE DESIRED UART BIT SETTINGS
688
689 000151 171 MOV A,C ; MASK OF OCTAL 200 INTO ACCUM
690 000152 244 ANA H ; ACCUM HAS ONLY CTY STOP BIT
691 000153 147 MOV H,A ; COPY BACK TO H
692 000154 171 MOV A,C ; MASK TO ACCUM
693 000155 242 ANA D ; ACCUM HAS ONLY A STOP BIT
694 000156 127 MOV D,A ; COPY BACK TO D
695
696 ; NOW MASK FOR THE LENGTH BITS
697
698 000157 170 MOV A,B ; MASK OF OCTAL 4 INTO ACCUM
699 000160 245 ANA L ; ACCUM NOW HAS CTY LENGTH BIT ONLY
700 000161 264 ORA H ; THROW IN THE CTY STOP BIT
701 000162 366 112 ORI ^B01001010 ; ADD IN THE CONSTANT BITS
702 000164 323 201 OUT CTYCTL ; SET THE UART MODE..........
703
704 ; NOW SET MODE FOR THE KLINIK STUFF
705
706 000166 170 MOV A,B ; MASK OF OCTAL 4 INTO ACCUM
707 000167 243 ANA E ; ACCUM NOW HAS KLINIK LENGTH BIT ONLY
708 000170 262 ORA D ; THROW IN THE KLINIK STOP BIT
709 000171 366 112 ORI ^B01001010 ; ADD IN THE CONSTANT BITS
710 000173 323 203 OUT REMCTL ; SET THE KLINIK UART MODE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 17
HCORE.M80 *INITIALIZE UARTS*
712
713 ; NOW ENABLE THE UART TO RECEIVE AND TRANSMIT
714
715 000175 076 025 MVI A,^B00010101 ; BITS FOR UART CONTROL
716
717 ; SET UART TO RECEIVE AND TRANSMIT
718
719 000177 323 201 OUT CTYCTL ; ***** I/O WRT 200/025 *****
720
721 000201 076 020 MVI A,^O20 ; ONE BIT TO SAY RESET THE UART
722 000203 323 203 OUT REMCTL ; RESET THE KLINIK UART BUT DO NOT ENABLE IT!!
723
724 000205 333 200 IN CTYDAT ; ** I/O RD 201** READ 1 DUMMY CHAR OUT OF UART
725 000207 333 202 IN REMDAT ; ** I/O RD 203** READ 1 DUMMY CHAR OUT OF UART
726
727 000211 315 115 010 CALL BFRST ; INIT TTY INPUT BUFFER
728
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 18
HCORE.M80 *8080 PROM CHECKSUMMER*
730 .SBTTL *8080 PROM CHECKSUMMER*
731
732 ; CODE TO COMPUTE A CHECKSUM FOR EACH OF THE 2K 8080 PROM PIECES. FIRST
733 ; COMPUTE THE CHECKSUMS FOR EACH PROM, THEN DO SIMPLE TEST ON THE 8080
734 ; RAM.. BEGIN WITH THE PROMS.
735
736 000214 041 000 000 LXI H,00 ; START AT PROM ADDRESS 0
737 000217 257 LCHKR: XRA A ; CLEAR ACCUM
738 000220 117 MOV C,A ; CLEAR B,C PAIR
739 000221 107 MOV B,A ; "B,C" TO BE USED AS ADDEND
740 000222 137 MOV E,A ; CLEAR D,E PAIR
741 000223 127 MOV D,A ; "D,E" TO HOLD CURRENT COUNT OF CHECKSUM
742
743 000224 116 A256: MOV C,M ; GET A BYTE
744 000225 043 INX H ; UPDATE MEM POINTER
745 000226 353 XCHG ; PUT CURRENT CHECKSUM SUB TOTAL INTO H,L
746 000227 011 DAD B ; THROW IN AN ADDEND
747 000230 353 XCHG ; RETURN H,L TO RIGHTFUL PLACE
748
749 ; NOW QUICK CHECK FOR THE END OF PROM
750
751 000231 175 MOV A,L ; GET LO ORDER OF CURRENT PROM ADDRESS
752 000232 247 ANA A ; SET CONDITION CODES
753 000233 302 224 000 JNZ A256 ; IF = 0, WE'VE DONE 256 LOCS, IF # 0, DO MORE
754
755 ; FALL TO HERE WHEN DONE A CHUNK OF 256..SEE IF ITS ON A PROM BOUNDARY NOW
756
757 000236 174 MOV A,H ; GET HI ORDER PIECE OF ADDRESS
758 000237 346 007 ANI ^O7 ; IF THIS .EQ. 0, THEN WE ARE AT A BOUNDARY
759 000241 302 224 000 JNZ A256 ; IF .NE 0, THEN KEEP TRYING
760
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 19
HCORE.M80 *8080 PROM CHECKSUMMER*
762
763 ; FALL THRU HERE WHEN WE'VE COMPLETED A PROMS WORTH
764
765 000244 174 MOV A,H ; GET HI ORDER (CORRESPONDS TO "WHICH PROM")
766 000245 017 RRC ; JUSTIFY AT EDGE OF THE ACCUM
767 000246 017 RRC
768 000247 017 RRC
769 000250 075 DCR A ; DECREMENT MAKES "0-3" INSTEAD OF "1-4"
770 000251 207 ADD A ; DOUBLE THIS VALUE TO MAKE IT ON 16 BYTE BOUNDARIES
771
772 000252 365 PUSH PSW ; SAVE THIS VALUE FOR A BIT
773 000253 345 PUSH H ; AND SAVE OUR CURRENT POINTER
774 000254 302 315 000 JNZ DEV ; IF DOING PROM 0, ELIMINATE ACTUAL CHECKSUM CNT
775
776 ; FELL THRU TO HERE TO DO ACTUAL CHECKSUM ELIMINATION EXECUTED WHEN
777 ; CHECKSUMMING PROM 0. IT REMOVES THE ACTUAL CHECKSUM VALUES FROM
778 ; THE COMPUTED CHECKSUM, AS WE CANNOT SOLVE THE CHECKSUM FEEDBACK
779 ; LOOP PROBLEM.
780
781 000257 365 PUSH PSW ; SAVE ACCUM
782 000260 041 134 005 LXI H,CHECKS ; H,L GETS A POINTER TO THE LIST OF CHECKSUMS
783 000263 076 010 MVI A,8. ; START WITH A COUNT OF 8, FOR THE EIGHT BYTES WE MUST SUB
784 000265 062 275 040 DEVLP: STA T80DT ; SAVE COUNT IN RAM, SO WE CAN USE ACCUM
785 000270 006 377 MVI B,^O377 ; IN B,C PAIR, ENSURE UPPER HALF .EQ. -1
786 000272 176 MOV A,M ; GET CHECKSUM BYTE TO ACCUM
787 000273 057 CMA ; NEGATE IT
788 000274 117 MOV C,A ; THROW IT INTO A 16 BIT ENTITY
789 000275 003 INX B ; AND MAKE B,C PAIR 2'S COMPLEMENT
790
791 000276 353 XCHG ; GET CURRENT COMPUTED CHECKSUM TO H,L
792 000277 011 DAD B ; "SUBTRACT" THE BYTE ASSEMBLED. (2'S COMP ADDITION)
793 000300 353 XCHG ; PUT H,L/D,E PAIR RIGHT
794 000301 043 INX H ; AND UPDATE THE POINTER INTO THE LIST
795 000302 072 275 040 LDA T80DT ; GET OUR CURRENT COUNT FROM THE RAM
796 000305 075 DCR A ; DECREMENT
797 000306 302 265 000 JNZ DEVLP ; CONTINUE IN THE LOOP
798
799 000311 001 000 000 LXI B,00 ; NOW GUARANTEE B,C PAIR IS ALL GONE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 20
HCORE.M80 *8080 PROM CHECKSUMMER*
801
802 ; FALL THRU WHEN FINISHED
803
804 000314 361 POP PSW ; RESTORE ACCUM
805
806 000315 117 DEV: MOV C,A ; GET CURRENT PROM NUMBER INTO C
807 000316 041 134 005 LXI H,CHECKS ; H,L POINTS TO THE TABLE OF CHECKSUM
808 000321 011 DAD B ; ADD INDEX, AND NOW (M) POINTS TO EXPECTED CHECKSUM
809 000322 116 MOV C,M ; COPY EXPECTED CHECKSUM INTO C
810 000323 043 INX H
811 000324 106 MOV B,M ; AND B, MAKES "B,C" PAIR
812 000325 043 INX H ; AND KEEP COUNT UP
813
814 ; NOW D,E HAS CALCULATED CHECKSUM AND B,C HAS EXPECTED CHECKSUM
815
816 000326 353 XCHG ; H,L NOW HAS CALCULATED CHECKSUM
817 000327 011 DAD B ; IF CHECKSUM OK, RESULT OF THIS SHOULD .EQ. 0
818 000330 175 MOV A,L ; GET LO PIECE
819 000331 264 ORA H ; THROW IN HI PIECE..CONDITION CODE FLAGS
820 ; ARE NOW SET
821
822 000332 353 XCHG ; D,E NOW HAS THE RESULTS OF THE ADDITION
823 000333 341 POP H ; BEFORE JUMPING ON CONDITION CODES, FIRST
824 ; FIX REGISTER
825 000334 302 355 000 JNZ CHKERR ; IF H,L NON-0, THEN HAD PROM CHECKSUM ERROR...
826
827 ; FALL THRU IF CHECKSUM WAS OK
828
829 000337 361 POP PSW ; RESTORE INDEX INTO "WHICH PROM" WE ARE IN
830 000340 376 006 CPI 6 ; SEE IF DONE ALL
831 000342 302 217 000 JNZ LCHKR ; JUMP BACK TO BEGINNING IF NOT DONE ALL
832
833 ; FALL THRU IF DONE ALL..PROMS CHECKSUM OK
834
835 000345 303 372 000 JMP XXX230 ; SO AVOID THE ERROR PRINTOUT CODE
836
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 21
HCORE.M80 *8080 PROM CHECKSUMMER*
838
839 ; YOU JUMPED TO HERE IF YOU ENCOUNTERED A CHECKSUM ERROR.
840
841 000350 077 103 110 ROMMSG: .ASCIZ /?CHK/ ; IF PROM CHECKSUM FAILS, USE THIS MESSAGE
842 000355 CHKERR: PLINE ROMMSG ; PRINT "?CHK "
(1) 000355 337 RST 3 ; PRINT LINE OF CHARS
(1) 000356 350 000 .ADDR ROMMSG ; BUFF TO PRINT
843 000360 361 POP PSW ; RETRIEVE PROM NUMBER
844 000361 017 RRC ; DIVIDE DOWN, SINCE WE DOUBLED IT BEFORE
845 000362 074 INR A ; MAKE PROM TYPE-OUT BE 1-4
846 000363 366 060 ORI ^O60 ; MAKE IT ASCII
847 000365 315 343 003 CALL PCHR ; GO PRINT IT
848 000370 PCRLF ; <CR-LF>
(2) 000370 347 RST 4
(2) 000371 002 .BYTE 2
849
850 ; FINAL STEP IS TO ENABLE PARITY DETECTION IN THE KS10.
851 ; DEFAULT IS: PARITY DETECTION ON.. DATA PATH PARITY DETECTION ENABLED
852
853 000372 076 174 XXX230: MVI A,DEFLTE ; INIT ENABLES TO BE ON
854 000374 323 100 OUT SMPAR ; ***** I/O WRT 100/174 *****
855
856 ; LITTLE ROUTINE TO LOAD ALL DEFAULT CONSTANTS INTO THE 8080 RAM.
857 ; THIS ROUTINE SAVES ABOUT 40. BYTES OF PROM, OVER USING LXI'S,SHLD'S
858 ; MVI'S & STA'S.
859
860 000376 041 342 040 LXI H,KATIM1 ; LIST OF DESTINATION LOCATIONS BEGINS HERE
861 000401 021 020 001 LXI D,PRMLST ; LIST OF DATUMS FOR THE RAM INIT
862 000404 032 RAMMER: LDAX D ; GET BYTE FROM THE DATA LIST
863 000405 376 252 CPI ^O252 ; TEST FOR END OF LIST
864 000407 312 061 001 JZ XXX235 ; CONTINUE PROM INIT
865
866 ; ELSE MORE RAM TO INITIALIZE
867
868 000412 167 MOV M,A ; PUT GOOD STUFF IN RAM
869 000413 043 INX H ; UPDATE POINTERS
870 000414 023 INX D
871 000415 303 004 001 JMP RAMMER
872
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 22
HCORE.M80 *8080 PROM CHECKSUMMER*
874
875 000420 PRMLST:
876 000420 244 006 .ADDR KPAINI ; KATIM1(2) KEEP ALIVE INITIAL COUNTER
877 000422 377 .IIF DF,SCECOD, .BYTE -1 ; FOR SCE ADR INIT
878 000423 377 .IIF DF,SCECOD, .BYTE -1 ; FOR SCE ADR INIT
879 000424 135 010 .ADDR MODE0 ; MODDIS(2) INIT THE KLINIK LINE TO MODE 0
880 000426 200 001 .ADDR REINI ; NORMAL INSTR ENDS WILL GO TO REINIT
881 000430 013 042 .ADDR ENVBUF ; ENVPNT(2) APT PNTER FOR ENVELOPES SENT TO THE HOST
882 000432 174 .BYTE DEFLTE ; PARBT(1) INIT ENABLES TO BE ON
883 000433 020 .BYTE TRPDEF ; TRAPEN(1) INIT ENABLES THE HARDWARE TRAPS
884 000434 014 .BYTE ^O14 ; MTAUBA(1) DEFAULT MAGTAPE UBA NUMBER IS "3"
885 000435 004 .BYTE ^O4 ; DSKUBA(1) DEFAULT DISK UBA NUMBER IS "1"
886 000436 010 .BYTE ^O10 ; STATE(1) STATE BEGINS WITH DTR TRUE
887 000437 041 .BYTE ^O41 ; LSTMSG(1) FIRST APT MSG SHOULD BE 136 (NOT OF 41)
888 000440 D 0,0,,2,0 ; DEN.SLV(5) GET DEFAULT VALUE FOR ALL TAPES
889 000445 .MTBASE: D 0,0,,772,440 ; MTBASE(5) INITIAL DEFAULT MTA RHBASE ADDRESS
890 000452 .DSBASE: D 0,0,,776,700 ; DSBASE(5) INITIAL DEFAULT DSK RHBASE ADDRESS
891 000457 377 .BYTE -1 ; RPINI(1) SO CAN MAKE IT -1
892 000460 252 .BYTE ^O252 ; END OF LIST MARKER
893
894 000461 076 025 XXX235: MVI A,^O25 ; BIT TO RESET THE UART
895 000463 323 203 OUT REMCTL ; RESET THE KLINIK UART AND ENABLE IT!!
896 000465 076 010 MVI A,^O10 ; GET A BIT TO SET "DATA TERMINAL READY"
897 000467 323 101 OUT DTR ; SET IT.
898
899 000471 PLINE INIMS ; PRINT VERSION AND ID
(1) 000471 337 RST 3 ; PRINT LINE OF CHARS
(1) 000472 144 005 .ADDR INIMS ; BUFF TO PRINT
900 000474 INTON ; SET INTERNAL MODE
(1) 000474 327 RST 2 ; GO SET INTERNAL MODE
901
902 ; CLEAR ?NXM IF THIS BIT IS CURRENTLY SET FOR SOME REASON
903
904 000475 257 XRA A ; (5.2C) CLR ACCUM
905 000476 323 210 OUT BUSCTL ; (5.2C) *** I/O WRT 210/0 *** CLR NXM BIT
906 000500 315 355 011 CALL EM1 ; DO PSEUDO EXAMINE TO SET MEM LATCHES
907 000503 315 036 011 CALL EBCMD ; EXAMINE THE BUS, TO SEE IF ZERO
908 000506 373 EI ; ENABLE INTERRUPTS
909
910 000507 315 016 033 CALL CMP36 ; NOW CHECK RESULTS OF THE "EB" CMD
911 000512 012 040 .ADDR EMBUF ; THE RESULTS READ FROM THE BUS
912 000514 333 016 .ADDR MAD000 ; VERSUS A WORD OF ALL ZEROES
913
914 000516 312 130 001 JZ PWRCHK ; IF OK, GO TO AUTO BOOT
915
916 ; FALL THRU IF ERRORS ENCOUNTERED
917
918 000521 INTOFF ; LEAVE INTERNAL MODE
(1) 000521 367 RST 6 ; GO EXIT FROM INTERNAL MODE
919 000522 PLINE INIER ; SAY "INITIALIZE ERROR"
(1) 000522 337 RST 3 ; PRINT LINE OF CHARS
(1) 000523 002 037 .ADDR INIER ; BUFF TO PRINT
920 000525 303 200 001 JMP REINI ; AND GO OUT
921
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 23
HCORE.M80 *8080 PROM CHECKSUMMER*
923
924 ;(5.2G) THIS CODE WAS FOR HANDLING POWER FAIL RESTART - WITH BATTERY
925 ; BACKUP. SINCE THERE IS NO BATTERY BACKUP ANY MORE, IT IS TAKEN OUT.
926 ;
927 ; JUMP TO HERE IF DOING PWR FAIL RESTART
928 ;
929 ;PWR.FAIL: CALL MICROP ; READ IN POINTERS AND READY TO GO
930 ; JC C.BTERR ; IF BOMBED, GIVE UP
931 ; CALL DMEM2CRAM ; GO READIN THE MICRO-CODE
932 ;
933 ; CALL BT.GO ; START MICRO-CODE
934 ; CLRRM TMPBF2 ; CLEAR A BUFFER
935 ; MVI M,^O70 ; POWER FAIL START ADDRESS IS "70"
936 ;
937 ; MVI A,4 ; CODE 4 INDICATES PWR FAIL
938 ; STA GOCODE ; SAVE IN RESTART INDICATOR
939 ; CALL STINT ; GO START MACHINE, USE INTERNAL MODE
940 ; JMP REINI ; AND GO LET THINGS HAPPEN
941
942 ;(5.2G) SINCE POWER FAIL RESTART (RECOVERY) IS NO LONGER SUPPORTED BY
943 ; THIS CODE, THERE IS NO REASON TO READ THE MEM STATUS REGISTER TO
944 ; DETERMINE IF THE MEMORY CONTENTS ARE STILL VALID. SO THIS SECTION
945 ; IS DELETED.
946 ;
947 ; FIRST THING TO DO IS TO CHECK IF THIS IS A POWER FAIL RESTART.
948 ; NOTE: WE ARE STILL IN "INTERNAL" MODE HERE..THINGS WON'T PRINT.
949 ;
950 ;PWRCHK:CLRRM IOAD ; CLEAR A BUFFER..WE WILL GENERATE A "100000"
951 ; INX H ; CLRRM PASSES PNTR..WE MAKE IT "IOAD+1"
952 ; MVI M,^O200 ; SET BIT THAT MAKES IT "100000"
953 ; CALL EI1 ; GO EXAMINE I/O ADDRESS - READ MEM STAT REG
954
955 000530 PWRCHK: INTOFF ; (5.2G - LABEL MOVED) CLEAR INTERNAL MODE
(1) 000530 367 RST 6 ; GO EXIT FROM INTERNAL MODE
956
957 000531 016 226 SYSUP: MVI C,150. ; NOW DO AN AUTO BOOT SEQUENCE
958 000533 041 031 000 SYSUP1: LXI H,25. ; WILL DO A DELAY LOOP
959 000536 315 076 014 CALL LTLOOP ; BY HAND, BY-PASSING USUAL MACRO GENERATION
960
961 000541 072 157 040 LDA RPEND ; SEE IF A CHAR WAS TYPED TO END THE AUTO BOOT
962 000544 247 ANA A ; SET CONDITION FLAGS
963 000545 302 200 001 JNZ REINI ; IF A CHAR WAS TYPED, NO AUTO STUFF, GO NULL JOB
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 24
HCORE.M80 *8080 PROM CHECKSUMMER*
965
966 ; WHILE WE HAVEN'T GOT ANYTHING TO DO, MIGHT AS WELL CHECK BOOT SWITCH
967 ; TO SEE IF THAT GOT PUSHED WHILE WE WERE SITTING HERE.
968
969 000550 333 301 IN BOOTSW ; ***** I/O RD/301 *****
970 000552 346 002 ANI 2 ; "BOOT" BUTTON PUSHED IS "TRUE .LO."
971 000554 312 366 001 JZ N0.5 ; SO, IF RESULTS = Z-BIT, THEN BUTTON PUSHED
972
973 000557 333 102 IN ^O102 ; READ AND SEE IF "AC PWR LO" HAPPENED
974 000561 346 100 ANI ^O100 ; CHECK THE RESET SIGNAL
975 000563 312 000 000 JZ 0000 ; ITS TRUE .LO., SO IF TRUE, RESTART MACHINE
976
977 ; FALL THROUGH IF NO BOOT BUTTON PUSHED
978
979 000566 015 DCR C ; STILL TIMING OUT.. WAIT LONGER
980 000567 302 133 001 JNZ SYSUP1 ; BACK WHILE WAITING
981
982 ; NOW SEE IF NEED AUTO BOOT, OR POWER FAIL RECOVERY..
983
984 ;(5.2G) THIS CODE HANDLES POWER FAIL RECOVERY - IT CHECKS THE POWER SAVED
985 ; BIT IN MEM STAT REGISTER TO SEE IF THE MEMORY IS STILL VALID. IT IS
986 ; TAKEN OUT
987 ; LDA EMBUF+2 ; FETCH UP BITS 12-19
988 ; ANI ^O200 ; CHECK THE PWR SAVED BIT
989 ; JZ PWR.FAIL ; IF BIT SET, GO TRY A POWER FAIL RECOVERY
990
991 ; FELL THROUGH IF THIS MUST BE AN AUTO BOOT SEQUENCE
992
993 000572 PLINE AUTOMS ; SAY "BT AUTO"
(1) 000572 337 RST 3 ; PRINT LINE OF CHARS
(1) 000573 360 037 .ADDR AUTOMS ; BUFF TO PRINT
994 000575 315 220 021 CALL BTAUT ; CALL THE BOOT
995
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 25
HCORE.M80 *BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH PROMPT*
997 .SBTTL *BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH PROMPT*
998
999 000600 061 000 044 REINI: LXI SP,RAMST+^O2000 ; RESET STACK POINTER TO RE-INIT
1000 000603 CLRB EOL ; GUARANTEE END-OF-LINE CNTR RESET
1001 000605 CLRB ERRCD ; CLEAR CURRENT ERROR CODE
1002 000607 CLRB ERRCD+1 ; CLEAR CURRENT ERROR CODE
1003 000611 CLRB RPTON ; ALWAYS CLEAR THE REPEAT FLAG
1004 000613 CLRB NOPNT ; CLR THE "NO PRINT" FLAG
1005 000615 041 001 041 LXI H,RPINI ; GET POINTER TO BUFFER WHERE WE SAVE THE
1006 000620 042 211 040 SHLD RPLST ; COMMAND DISPATCH ADDRESSES.USED BY REPEAT
1007 000623 041 200 001 LXI H,REINI ; IF GOT HERE, IT IS SAFE TO GUARANTEE THAT
1008 ; YOU ALWAYS GET HERE
1009 000626 042 350 040 SHLD NOREND ; PASS REINIT LOCATION TO NORMAL END DISPATCH
1010 000631 315 115 010 CALL BFRST ; RESET TTY INPUT BUFFER
1011 000634 373 EI ; MAKE SURE THAT BOMBS RESTORE THE INTERRUPTS
1012
1013 000635 072 156 040 LDA USRMD ; GRAB USER MODE FLAG
1014 000640 247 ANA A ; SET CONDITION CODES
1015 000641 302 260 001 JNZ NULLJ ; IF USER MODE, NO PROMPTS, NO CR-LF, NOTHING
1016
1017 000644 072 251 040 LDA MMFLG ; IF MM MODE WE WILL PRINT NO PROMPTS
1018 000647 247 ANA A ; SET 8080 FLAGS
1019 000650 302 260 001 JNZ NULLJ ; SKIP PROMPT IF MM
1020
1021 000653 PCRLF ; START FRESH WITH CR-LF
(2) 000653 347 RST 4
(2) 000654 002 .BYTE 2
1022 000655 PLINE KSPRMT ; PROMPT IS "KS10>"
(1) 000655 337 RST 3 ; PRINT LINE OF CHARS
(1) 000656 042 037 .ADDR KSPRMT ; BUFF TO PRINT
1023
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 26
HCORE.M80 *BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH PROMPT*
1025
1026 ; HERE BEGINS THE NULL STATE LOOP.... CHECK FRONT PANEL BOOT SWITCH.
1027
1028 000660 041 145 002 NULLJ: LXI H,DCODE ; NULLJ JOB PROCESSES COMMANDS ON "END-OF-LINE"
1029 000663 333 102 NULLW: IN ^O102 ; READ AND SEE IF "AC PWR LO" HAPPENED
1030 000665 346 100 ANI ^O100 ; CHECK THE RESET SIGNAL
1031 000667 312 000 000 JZ 0000 ; ITS TRUE .LO., SO IF TRUE, RESTART MACHINE
1032
1033 000672 333 302 IN ^O302 ; READ THE STATE OF THE KLINIK SWITCHES
1034 000674 057 CMA ; FIX THE HARDWARE INVERSION
1035 000675 117 MOV C,A ; SAVE RESULTS OF READ IN REG "C"
1036 000676 346 014 ANI ^O14 ; OFF ALL BUT THE 2 KLINIK BITS
1037 000700 017 RRC ; JUSTIFY "WORD-WISE"
1038 000701 107 MOV B,A ; SAVE THE KLINIK BITS FOR A SEC.
1039 000702 072 124 040 LDA KLNKSW ; GET THE CURRENT KLINIK SWITCH STATE
1040 000705 270 CMP B ; SEE IF KLINIK SWITCH CHANGED SINCE LAST TIME
1041 000706 345 PUSH H ; SAVE H,L IT HAS OUR DISPATCH ADDRESS
1042 000707 304 323 033 CNZ KLNKLT ; IF COMPARE # 0, THEN WE MUST CHANGE LIGHTS
1043 000712 341 POP H ; RETRIEVE H,L SO WE HAVE THE REAL DISPATCH
1044
1045 ; OK, NOW SEE IF WE ARE WATCHING CARRIER FROM THE KLINIK LINE, AND IF
1046 ; WE ARE, SEE IF IT HAS GONE AWAY.. IF KLINIK CARRIER GOES AWAY FOR 2
1047 ; SECONDS, THEN WE WILL HANGUP THE LINE.
1048
1049 000713 171 MOV A,C ; GET STATE OF THE CARRIER INTO ACCUM
1050 000714 346 001 ANI 1 ; SEE IF IT IS SET
1051 000716 312 327 001 JZ N00 ; IF THERE IS NO CARRIER, THEN SEE IF WE CARE
1052
1053 ; CARRIER WAS TRUE IF WE GOT HERE, SET FLAG SAYING THAT WE MUST WATCH
1054 ; IF IT DECIDES TO GO AWAY ON US
1055
1056 000721 062 130 040 STA WATCHC ; SET FLAG SAYING WATCH THE KLINIK
1057 000724 303 357 001 JMP N0 ; AND PROCEED WITH THE NULL JOB
1058
1059 ; GOT HERE IF CARRIER WAS FALSE, SEE IF WE CARE
1060
1061 000727 072 130 040 N00: LDA WATCHC ; FETCH UP THE "WATCH" FLAG
1062 000732 247 ANA A ; SET FLAGS
1063 000733 312 357 001 JZ N0 ; WE DON'T CARE, JUMP
1064
1065 ; CARRIER WENT AWAY ON US. WAIT 2 SECONDS, IF STILL GONE, HANG EM UP
1066
1067 000736 345 PUSH H ; BEST SAVE DISPATCHER TYPE ADDRESS
1068 000737 LONG.DELAY 2 ; WAIT 2 SECONDS
(1) 000737 041 220 001 LXI H,200. * 2 ; SET UP THE TIMING COUNT IN H,L REG
(1) 000742 315 076 014 CALL LTLOOP ; AND GO DELAY ABOUT 1 SEC FOR EACH (300 COUNT)
1069 000745 333 302 IN CARRIER ; ***** I/O RD 302 *****
1070 000747 346 001 ANI 1 ; SEE IF TRUE(LOW) OR FALSE(HIGH)
1071 000751 304 121 034 CNZ KILL.KLINIK ; (5.2A) STILL FALSE (HIGH), HANGUP THE LINE
1072 000754 341 POP H ; NOW RESTORE
1073 000755 CLRB WATCHC ; AND SAY TO LEAVE THIS ALONE FOR A WHILE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 27
HCORE.M80 *BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH PROMPT*
1075
1076 ; ELSE FALL THRU CAUSE ALL OK
1077
1078 000757 333 301 N0: IN BOOTSW ; ***** I/O READ 301 *****
1079 000761 346 002 ANI 2 ; BOOT SW SET? (TRUE LO, BECAUSE OF INVERSION)
1080 000763 302 374 001 JNZ N1 ; SKIP NEXT INSTR IF FALSE(I.E HIGH)
1081
1082 000766 315 215 021 N0.5: CALL BOOT ; OTHERWISE...GO TO BOOT COMMAND
1083 000771 303 260 001 JMP NULLJ ; AFTER BOOT, ALL TTY INPUT WAITS ARE KILLED
1084
1085 ; CONTINUE NULL STATE STATUS CHECK.
1086 ; CHECK FOR SYSTEM PARITY ERRORS.
1087
1088 000774 333 301 N1: IN BOOTSW ; ***** I/O RD 301 *****
1089 000776 346 010 ANI ^O10 ; IS PARITY ERR SIGNAL SET(TRUE .LO.)
1090 001000 302 015 002 JNZ NX2 ; SKIP NEXT INSTR IF NOT SET
1091
1092 ; IF YES SET, MUST CHECK THE PARITY ERROR
1093
1094 001003 072 166 040 LDA CHKPAR ; GET FLAG TO SEE IF SHOULD REPORT PARITY ERRORS
1095 001006 247 ANA A ; SET FLAGS
1096 001007 302 021 027 JNZ RPTPAR ; IF NOT ZERO, MUST GO REPORT PARITY ERROR
1097 001012 303 021 002 JMP N2 ; AND CONTINUE ELSE
1098
1099 001015 057 NX2: CMA ; IF HERE, SET ACCUM .EQ. -1
1100 001016 062 166 040 STA CHKPAR ; AND SET FLAG TO SAY REPORT PARITY ERR
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 28
HCORE.M80 *BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH PROMPT*
1102
1103 ; CONTINUE NULL STATE STATUS CHECKS
1104 ; CHECK TO SEE IF RUN FLOP HAS DIED
1105
1106 001021 333 300 N2: IN RUNFP ; ;***** I/O READ 300Q *****
1107 001023 346 010 ANI ^O10 ; IS HALT LOOP SET? (TRUE .LO.)
1108 001025 302 047 002 JNZ NX3 ; CPU RUNNING - CONTINUE
1109
1110 ; FALL THRU IF HALT LOOP SET..
1111
1112 001030 072 231 040 LDA CHKHLT ; GET THE FLAG THAT SAYS IF WE SHLD CHK HALT
1113 001033 247 ANA A ; SET CONDITION CODES
1114 001034 365 PUSH PSW ; SAVE FLAGS FOR LATER USE
1115 001035 304 226 016 CNZ HLTCM ; IF FLAG SET, GO REPORT THE HALT
1116 001040 361 POP PSW ; GET FLAGS BACK
1117 001041 302 236 002 JNZ CHKKA ; IF YOU JUST HALTED, GO SEE IF RELOAD REQUEST
1118 001044 303 053 002 JMP N3 ; IF CLR, NO NEED TO REPORT..THEY KNOW
1119
1120 ; THIS AND THE "CONTINUE" CODE IS THE ONLY CODE IN THE CONSOLE THAT SETS
1121 ; THE "CHECK HALT" FLAG.. AND YOU CAN ONLY GET HERE IF THE "HALT LOOP"
1122 ; FLAG HAS BEEN CLEARED, BY ANY MEANS. AND WHEN YOU GET HERE, THE ACCUM
1123 ; MUST BE ZERO.
1124
1125 001047 057 NX3: CMA ; SET ACCUM = -1
1126 001050 062 231 040 STA CHKHLT ; AND ZAP THE CHECK HALT FLAG..
1127
1128 ; CONTINUE NULL STATE STATUS CHECKS.
1129 ; CHECK TO SEE IF MOS MEMORY REFRESH CYCLE HAS DIED.
1130
1131 001053 333 101 N3: IN REFERR ; READ REFRESH ERROR BIT
1132 001055 346 001 ANI 01 ; REFRESH ERROR TRUE? (TRUE .LO.)
1133 001057 302 076 002 JNZ NX4 ; SKIP FOLLOWING CODE IF NO REFRESH ERROR
1134
1135 ; FALL INTO THIS IF A REFRESH ERROR OCCURS
1136
1137 001062 072 167 040 LDA CHKREF ; GET FLAG THAT SAYS CHECK REFRESH
1138 ; ..SEE IF SHOULD BE REPORTED
1139 001065 247 ANA A ; SET 8080 FLAGS
1140 001066 345 PUSH H ; SAVE DISPATCHING ADDRESS
1141 001067 304 267 032 CNZ NOREFRESH ; GO REPORT REFRESH ERROR IF NECESSARY
1142 001072 341 POP H ; RESTORE DISPATCH ADDRESS
1143 001073 303 102 002 JMP N4 ; AND CONTINUE AS IF NOTHING HAPPENED
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 29
HCORE.M80 *BEGINNING OF BASIC CONSOLE NULL JOB... BEGINS WITH PROMPT*
1145
1146 ; THIS IS THE ONLY CODE THAT CAN SET THE "REPORT REFRESH ERROR FLAG"
1147
1148 001076 057 NX4: CMA ; YOU GOT HERE ON A JZ, SO ACCUM MUST BE ZERO
1149 001077 062 167 040 STA CHKREF ; AND SET FLAG TO -1
1150
1151 ; CONTINUE NULL STATE STATUS CHECK
1152 ; CHECK FOR "END-OF-LINE" OR A RUNNING 10'S "KEEP-ALIVE"
1153
1154 001102 072 156 040 N4: LDA USRMD ; IS THIS USER MODE?
1155 001105 247 ANA A ; SET CONDITION FLAGS
1156 001106 302 212 002 JNZ LIVE10 ; IF YES, CHECK 10 INTERRUPTS & KEEP ALIVE
1157
1158 ; BEFORE DOING ANOTHER COMMAND - SEE IF WE ARE ENVELOPING
1159 ; AND MUST SEND OUT A PACKET.
1160
1161 001111 072 247 040 LDA CSLMODE ; ONLY DO ENVELOPE STUFF IF IN MODE 4 OR GREATER
1162 001114 376 020 CPI .MODE4 ; CHECK IF MODE 4
1163 001116 302 126 002 JNZ EOL.LK ; NOT MODE 4, PROCEED AS NORMAL
1164
1165 001121 345 PUSH H ; SAVE H,L - IT HAS THE DISPATCH ADDRESS
1166 001122 315 174 034 CALL DECNET ; IF SOMETHING THERE, SEND IT OUT
1167 001125 341 POP H ; NEED H,L AGAIN
1168
1169 ; OTHERWISE, CTY'S EOL FLAG.
1170 ; BUT FIRST SEE IF THIS IS A REPEAT.
1171
1172 001126 072 213 040 EOL.LK: LDA RPTON ; GET THE REPEAT FLAG
1173 001131 247 ANA A ; SET THE PROCESSOR FLAGS
1174 001132 302 166 020 JNZ RPTRTN ; GO BACK TO REPEAT FUNCTION SO THAT HE CAN PROCEED
1175
1176 001135 072 204 040 LDA EOL ; GET VALUE OF EOL FLAG
1177 001140 267 ORA A ; SET FLAGS..IS EOL SET?
1178 001141 312 263 001 JZ NULLW ; REMAIN IN NULL JOB LOOP IF NOT SET
1179
1180 ; ELSE GO PROCESS A COMMAND
1181
1182 001144 351 PCHL ; RETURN TO COMMAND IN TTY INPUT, OR DECODE
1183
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 30
HCORE.M80 *TYPEIN COMMAND DECODER AND DISPATCHER*
1185 .SBTTL *TYPEIN COMMAND DECODER AND DISPATCHER*
1186
1187 001145 257 DCODE: XRA A ; ZERO OUT THE ACCUM
1188 001146 107 MOV B,A ; AND ZERO OUT TMP LOCATION
1189
1190 001147 021 143 004 LXI D,CMDLST ; "D,E" NOW POINTS TO CMD LIST CHARACTER PAIRS
1191 001152 052 227 040 LHLD FIRST ; "H,L" NOW POINTS TO FIRST CHAR TYPED AS CMD
1192 001155 315 204 021 CALL FNDARG ; FIRST GO CLR ANY LEADING SPACES OR TABS
1193 ; FROM CMD LINE
1194 001160 332 277 003 JC NORML ; IF AT END-OF-COMMAND, ITS A NULL COMMAND
1195
1196 ; NOW BEGINS COMMAND LOOK UP LOOP... "H,L" POINTS TO FIRST COMMAND CHAR.
1197 ; WHILE "D,E" POINTS TO FIRST CHAR IN THE LIST OF ALLOWABLE COMMANDS.
1198
1199 001163 032 DCODL: LDAX D ; CMD LIST CHAR TO ACCUM
1200 001164 267 ORA A ; IS THIS A ZERO BYTE?
1201 001165 312 204 002 JZ NXMDC ; IF YES, END OF LIST
1202 001170 023 INX D ; WHILE YOU ARE AT IT UPDATE CMD LIST PNTR
1203
1204 001171 276 CMP M ; COMPARE CMD LIST CHAR WITH TYPED CHAR.
1205 001172 312 136 003 JZ MTCH1 ; IF THEY MATCH, BR TO "MTCH1"
1206
1207 ; HERE IF NO MATCH.. UPDATE CMD LIST PNTR TO START OF NEXT COMMAND,
1208 ; THEN CHECK IF TRIED ENTIRE LIST YET. IF TRIED ENTIRE LIST, REPORT
1209 ; COMMAND ERROR AND BACK TO NULL JOB LOOP. IF NOT TRIED ENTIRE LIST
1210 ; YET, LOOP BACK AND TRY SOME MORE.
1211
1212 001175 023 MISS2: INX D ; BUMP PNTR PAST SECOND CHAR OF CMD
1213 001176 023 INX D ; BUMP PAST THE DISPATCH ADDR
1214 001177 023 INX D
1215 001200 004 INR B ; UPDATE NUMBER OF "TRIES"
1216 001201 303 163 002 JMP DCODL ; IF NOT, JUMP BACK AND TRY AGAIN
1217
1218 ; IF FALL TO HERE, WAS ILLEGAL COMMAND.. CLEAR REST OF LINE UP TO EOL...
1219 ; TYPE ERROR MESSSAGE AND BACK TO NULL JOB LOOP. FIRST STEP IS CLEARING
1220 ; BAD COMMAND FROM COMMAND BUFFER.
1221
1222 001204 NXMDC: PLINE CMDNG ; COMMAND NO GOOD
(1) 001204 337 RST 3 ; PRINT LINE OF CHARS
(1) 001205 015 037 .ADDR CMDNG ; BUFF TO PRINT
1223
1224 001207 303 137 032 JMP MMERR ; AND BACK TO PROMPT..
1225
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 31
HCORE.M80 *CTY SERVICE*
1227 .SBTTL *CTY SERVICE*
1228
1229 ; CODE ENTERED FROM THE NULL JOB LOOP WHENEVER WE ARE IN USER MODE
1230 ; (MODE 3). CODE CHECKS TO SEE IF CHAR IS AVAILABLE FROM THE 10
1231 ; AND ALSO IF KEEP ALIVE COUNT IS ACTIVE. WE ALSO CHECK FOR REBOOT
1232 ; REQUESTS (AS IN 20 SYSTEM MONITOR'S "BUGHALTS").
1233
1234 001212 333 301 LIVE10: IN SMSTS ; SEE IF INTERRUPT FROM THE 10 IS PENDING
1235 001214 247 ANA A ; SET CONDITION CODES
1236 001215 365 PUSH PSW ; SAVE FLAGS FOR A LITTLE BIT
1237 001216 364 174 007 CP CHRRDY ; IF PLUS, A CHARACTER IS READY, GO PROCESS
1238
1239 ; FIRST, WE ONLY WANT TO CHECK THE KEEP-ALIVE COUNTER EVERY SECOND.
1240 ; FIRST WE WILL CHECK OUR COUNTERS AND SEE IF TIME TO CHECK KEEP-ALIVE DATA
1241
1242 001221 361 POP PSW ; GET FLAGS BACK
1243 001222 364 334 002 CP FAKLIT ; IF TYPED A CHAR, THEN DOWN COUNT FOR TIME WASTED
1244 001225 312 236 002 JZ CHKKA ; IF ZERO, DO WHAT MUST BE DONE
1245
1246 001230 315 346 002 CALL DTIME ; ALWAYS DO IT AT LEAST ONCE
1247 001233 302 260 001 JNZ NULLJ ; IF NOT ZERO, IT HASN'T BEEN A SECOND YET. BACK NULL
1248
1249 ; WHEN YOU FALL TO HERE, IT IS TIME TO CHECK FOR "KEEP-ALIVE" OR "RELOAD"
1250
1251 001236 041 244 006 CHKKA: LXI H,KPAINI ; FIRST WE MUST RESET OUR MAJOR LOOP COUNTER
1252 001241 042 342 040 SHLD KATIM1 ; EACH NUM IN THIS LOC .EQ. .444 SECONDS BETWEEN CHECKS
1253
1254 001244 INTON ; DON'T PRINT THIS CRUD
(1) 001244 327 RST 2 ; GO SET INTERNAL MODE
1255 001245 363 DI ; NO INTERRUPTS
1256 001246 EXAM 31 ; MOS MEMORY LOC 31 HAS THE INFORMATION
(1) 001246 315 202 030 CALL EXAMSH ; AND DO EXAM ASSUMING SHORT ADDRESS
(1) 001251 031 000 .ADDR 31 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
1257 001253 373 EI ; OK..INTERRUPTS
1258
1259 001254 INTOFF ; INTERNAL MODE OFF NOW
(1) 001254 367 RST 6 ; GO EXIT FROM INTERNAL MODE
1260 001255 072 015 040 LDA EMBUF+3 ; GRAB THE RELOAD BITS.. WE CERTAINLY NEED THOSE
1261 001260 027 RAL ; "FORCED RELOAD" SHIFT INTO CARRY
1262 001261 332 360 002 JC FRELOAD ; IF "RELOAD" SET, GO EXECUTE A RELOAD
1263
1264 ; NOW SEE IF KEEP-ALIVE ACTIVE
1265
1266 001264 027 RAL ; "KEEP-ALIVE" BIT INTO THE C-BIT
1267 001265 322 260 001 JNC NULLJ ; IF ITS NOT SET, GO BACK TO NULL JOB
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 32
HCORE.M80 *CTY SERVICE*
1269
1270 ; KEEPING A WATCH ON THE KEEP ALIVE COUNT...BLINKY LIGHTS
1271
1272 001270 072 360 040 LDA STATE ; GET CURRENT STATE OF THE LIGHTS
1273 001273 127 MOV D,A ; SAVE IT JUST FOR A LITTLE BIT
1274 001274 346 373 ANI STMSK ; CLR THE "STATE" LIGHT FROM CURRENT SELECTIONS
1275 001276 137 MOV E,A ; AND NOW SAVE THIS LITTLE BIT IN A REGISTER
1276
1277 001277 172 MOV A,D ; GET BACK THE ORIGINAL "STATE"
1278 001300 057 CMA ; "BLINK"
1279 001301 346 004 ANI STBIT ; ONLY WANT TO BLINK THE SINGLE LIGHT
1280 001303 263 ORA E ; THROW IN THE PART THAT IS AS WAS..
1281 001304 062 360 040 STA STATE ; PUT WHOLE MESS BACK, NULL LOOP WILL BLINKY
1282 001307 323 101 OUT LIGHTS ; BLINK THE LIGHTS HERE
1283 001311 372 260 001 JM NULLJ ; AND IF MINUS, WE ARE "SHUTTING DOWN", LET LIGHTS GO
1284
1285 ; WE DID AN EXAM 31 A VERY SHORT TIME AGO, SO THE EXAMINE BUFFER
1286 ; SHOULD STILL HAVE A VALID "KEEP-ALIVE" UPDATE COUNT IN IT.
1287
1288 001314 041 250 040 LXI H,KACNTR ; GET POINTER TO THE PREVIOUS "KA" COUNT
1289 001317 072 013 040 LDA EMBUF+1 ; GET WHAT SHOULD BE AN UPDATED "KA" COUNT
1290 001322 276 CMP M ; COMPARE..BETTER BE DIFFERENT
1291 001323 312 063 003 JZ DIEING ; IF SAME, GO SEE IF CPU IS REALLY DIEING
1292
1293 ; FALL THRU IF THE COUNTS WERE DIFFERENT.. SAVE THE NEW COUNT.
1294
1295 001326 167 MOV M,A ; NEW COUNT GOES TO RAM, OVERWRITES THE OLD
1296 001327 CLRB DIECNT ; CLEAR THAT DIE COUNT
1297 001331 303 260 001 JMP NULLJ ; BACK TO THE NULL LOOP
1298
1299 ; ROUTINE FOR WHEN DOING CTY OUTPUT THE LIGHTS STILL BLINK AT
1300 ; A REASONABLE RATE.
1301
1302 001334 052 342 040 FAKLIT: LHLD KATIM1 ; GET CURRENT COUNT FOR BETWEEN THE LIGHTS
1303 001337 175 MOV A,L ; GET LO ORDER PIECE
1304 001340 346 374 ANI ^O374 ; TWEEK LITE COUNT, CAUSE TYPING MESSED UP TIMER LOOP
1305 001342 157 MOV L,A ; PUT LO ORDER PIECE BACK (MASKING EQUIV TO SUB 100)
1306 001343 303 352 002 JMP DTM1 ; AND PROCEED
1307
1308 ; ROUTINE TO DOWN COUNT KEEP ALIVE COUNTER
1309
1310 001346 052 342 040 DTIME: LHLD KATIM1 ; GET A 16-BIT MINOR LOOP COUNTER
1311 001351 053 DCX H ; DECREMENT THE COUNTER
1312 001352 042 342 040 DTM1: SHLD KATIM1 ; AND PUT IT BACK
1313 001355 175 MOV A,L ; NOW CHECK THE COUNT FOR .EQ. 0
1314 001356 264 ORA H ; "OR" HI PIECE WITH THE "LO" PIECE
1315 001357 311 RET
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 33
HCORE.M80 *CTY SERVICE*
1317
1318 ; ROUTINE TO ENTERED WHEN THE "FORCE RELOAD" BIT HAS BEEN SET BY A RUNNING
1319 ; PROGRAM IN THE KS10.
1320
1321 001360 FRELOAD:CLRB NOPNT ; CLEAR THE NO PRINT FLAG
1322 001362 PLINE FRCMSG ; PRINT MESSAGE TO INDICATE THE FORCED RELOAD
(1) 001362 337 RST 3 ; PRINT LINE OF CHARS
(1) 001363 324 037 .ADDR FRCMSG ; BUFF TO PRINT
1323 001365 076 002 MVI A,2 ; BIT 34 IS THE APPROPRIATE GUY ON A FORCED RELOAD
1324 001367 062 255 040 STA GOCODE ; SET BIT IN THE 8080 RAM BUFFER
1325 001372 333 300 IN RUNFP ; NOW SEE IF WE MUST HALT THE PROCESSOR
1326 001374 346 010 ANI ^O10 ; WE DID NOT INVERT SIGNAL. 0=HALTED, 1=RUNNING
1327
1328 001376 INTON ; DON'T PRINT WHAT HAPPENS TO THE HALT
(1) 001376 327 RST 2 ; GO SET INTERNAL MODE
1329 001377 304 173 017 CNZ HACMD ; MAKE SURE THE PROCESSOR IS STOPPED
1330 001402 INTOFF ; OK TO PRINT NOW
(1) 001402 367 RST 6 ; GO EXIT FROM INTERNAL MODE
1331 001403 072 256 040 LDA SECRET ; SECRET LOCATION
1332 001406 247 ANA A ; SET 8080 FLAGS
1333 001407 302 200 001 JNZ REINI ; IF FLAG SET, WE WILL NOT DO AUTO RELOADS
1334
1335 001412 021 004 002 LXI D,^O1004 ; POINTER TO THE MONITOR PRE-BOOT
1336 001415 315 252 022 CALL FILEINIT ; GO READ IN THE MONITOR PRE-BOOT
1337 001420 332 215 032 JC L.BTERR ; IF ERROR, FATAL OUT
1338
1339 001423 041 001 000 LXI H,1 ; NO ERR, NOW GO START THE MICRO-CODE AT LOC 1
1340 001426 315 164 016 CALL SM1.5 ; START MICROCODE, ADDRESS PASSED IN H,L
1341 001431 LONG.DELAY 2 ; GUARANTEE THAT THE "SM 1" HAS TIME TO FINISH
(1) 001431 041 220 001 LXI H,200. * 2 ; SET UP THE TIMING COUNT IN H,L REG
(1) 001434 315 076 014 CALL LTLOOP ; AND GO DELAY ABOUT 1 SEC FOR EACH (300 COUNT)
1342 001437 315 341 021 CALL BT.GO1 ; NOW FIX PARITY AND OTHER THINGS THAT WE BROKE
1343 001442 315 304 021 CALL INFOBT ; AND PASS THE SOURCE OF THE PRE-BOOT IN MOS MEM
1344
1345 001445 041 272 040 LXI H,HSBFL1 ; (5.2F) SET "H,L" REGISTER TO SPECIAL HSB FLAG
1346 001450 066 004 MVI M,4 ; (5.2F) SET TO 4 ("RUN")
1347 001452 043 INX H ; (5.2E) POINT TO NEXT HSB FLAG
1348 001453 066 001 MVI M,1 ; (5.2E) SET TO 1 ("CONTINUE")
1349 001455 315 247 021 CALL LB.GO1 ; AND GO EXECUTE THE BOOT CODE
1350 001460 303 260 001 JMP NULLJ ; AND BACK TO NULL JOB
1351
1352 001463 041 257 040 DIEING: LXI H,DIECNT ; GET NUMBER OF CONSECUTIVE "NO CHANGES" IN KA CNT
1353 001466 064 INR M ; INCREMENT
1354 001467 176 MOV A,M ; GET COUNT INTO ACCUM
1355 001470 376 043 CPI KATIMX ; NOW SEE IF OFFICIAL DEATH
1356 001472 372 260 001 JM NULLJ ; IF NOT YET, GO BACK AND WAIT FOR MORE
1357
1358 ; ELSE, FALL ON THROUGH TO THE RELOAD CODE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 34
HCORE.M80 *CTY SERVICE*
1360
1361 ; ROUTINE ENTERED WHEN THE "KEEP-ALIVE" COUNT DOES NOT CHANGE, AND WE
1362 ; ISSUE A RELOAD BECAUSE WE BELIEVE THAT THE PROGRAM RUNNING IN THE
1363 ; KS10 HAS DIED.
1364
1365 001475 CLRB NOPNT ; CLEAR THE NO PRINT FLAG
1366 001477 CLRB DIECNT ; AND RESET THE DIE COUNT
1367 001501 PLINE KAMSG ; PRINT MESSAGE TO INDICATE KEEP-ALIVE FAILURE
(1) 001501 337 RST 3 ; PRINT LINE OF CHARS
(1) 001502 317 037 .ADDR KAMSG ; BUFF TO PRINT
1368
1369 001504 INTON ; DON'T PRINT ANY OF THIS STUFF
(1) 001504 327 RST 2 ; GO SET INTERNAL MODE
1370 001505 315 173 017 CALL HACMD ; FIRST, STOP THE MACHINE
1371 001510 363 DI ; NO INTERRUPTS, TILL THE EXAMINE IS COMPLETE
1372 001511 EXAM 71 ; EXAMINE THE INSTRUCTION IN 71
(1) 001511 315 202 030 CALL EXAMSH ; AND DO EXAM ASSUMING SHORT ADDRESS
(1) 001514 071 000 .ADDR 71 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
1373 001516 373 EI ; OK TO INTERRUPT NOW
1374
1375 001517 076 001 MVI A,1 ; KEEP ALIVE CODE IS A 1
1376 001521 062 255 040 STA GOCODE ; SAVE FOR PASSING TO KS10
1377 001524 315 012 017 CALL EXINTM ; NOW GO EXECUTE LOC 71 IN PAGE 0 OF MONITOR SPACE
1378 001527 315 142 017 CALL COCMD ; LET THE PROCESSOR RESUME
1379 001532 INTOFF ; MAY RESUME PRINTING THIS STUFF
(1) 001532 367 RST 6 ; GO EXIT FROM INTERNAL MODE
1380 001533 303 260 001 JMP NULLJ ; AND BACK TO NULL JOB
1381
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 35
HCORE.M80 *COMMAND DECODER CONTINUED*
1383 .SBTTL *COMMAND DECODER CONTINUED*
1384
1385 ; CONTINUE COMMAND DECODER......
1386 ; HERE IF FIRST CHARACTER MATCHED. SEE IF SECOND CHAR MATCHED.
1387
1388 001536 043 MTCH1: INX H ; INPUT BUFFER NOW PNTS TO SECOND CHAR TYPED
1389 001537 032 LDAX D ; ACCUM GETS SECOND "EXPECTED" CHAR FROM CMD LIST
1390 001540 276 CMP M ; NOW. DOES SECOND CHARACTER MATCH??
1391 001541 312 150 003 JZ MTCH2 ; JUMP IF YES, SECOND CHAR MATCHES.
1392
1393 ; HERE IF SECOND CHARACTER DID NOT MATCH.RESET "H,L" & GO BACK TO TRY AGAIN
1394
1395 001544 053 DCX H ; RESET "H,L"
1396 001545 303 175 002 JMP MISS2 ; AND CONTINUE PROCESSING
1397
1398 ; GET TO HERE IF SECOND CHARACTER MATCHED
1399
1400 001550 023 MTCH2: INX D ; UPDATE PAST 2ND CHAR
1401 001551 043 INX H ; UPDATE BUFFER POINTER
1402
1403 001552 315 241 033 CALL SEPCHR ; GET RID OF SEPARATORS
1404
1405 ; "H,L" SHOULD NOW POINTS TO THE CMD BUFF
1406 ; "D,E" NOW POINTS TO THE DISP ADDR
1407 ; OR ELSE TO "EOL" CHAR IF CMD HAS NO ARGS.. ANYTHING ELSE IS COMMAND ERROR
1408
1409 001555 042 223 040 SHLD .ARG1 ; SAVE "H,L" POINTER TO FIRST ARG.
1410
1411 001560 170 MOV A,B ; NOW LOAD ACCUM WITH NUMBER "TRIES" TO FIND MATCH
1412 001561 353 XCHG ; DISP POINTER NOW TO "H,L"
1413
1414 001562 136 MOV E,M ; SET LOW ORDER HALF OF "TABLE ENTRY" INTO "E"
1415 001563 043 INX H ; BUMP POINTER
1416 001564 126 MOV D,M ; SET HIGH ORDER HALF OF "TABLE ENTRY" INTO "D"
1417 001565 041 277 003 LXI H,NORML ; SET A RETURN VALUE
1418 001570 345 PUSH H ; AND PLACE ON STACK FOR RETURNS
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 36
HCORE.M80 *COMMAND DECODER CONTINUED*
1420
1421 ; PIECE OF CODE TO SAVE EACH COMMAND DISPATCH ADDRESS IN THE RAM BUFFER
1422 ; SO THAT THE REPEAT FUNCTION CAN DISPATCH THRU THE LIST WITHOUT DECODING
1423 ; THE TYPED IN COMMAND STRING AGAIN..
1424
1425 001571 247 ANA A ; CHECK IF THIS IS RP COMMAND..IF YES MUST
1426 001572 062 275 040 STA T80DT ; SAVE WHICH COMMAND IS BEING EXECUTED
1427 001575 312 224 003 JZ CMDGO ; JUMP SO THAT CMD LST BUFFER NO CHANGED
1428
1429 001600 072 131 040 LDA CMDS.. ; SEE IF THIS IS THE FIRST COMMAND IN A LINE
1430 001603 247 ANA A ; SET FLAGS
1431 001604 314 267 020 CZ RPNEW ; IF IS FIRST CMD, RESET REPEAT BUFFER POINTERS
1432
1433 001607 052 211 040 LHLD RPLST ; GET POINTER TO CURRENT FREE BUFFER LOCATION
1434 001612 162 MOV M,D ; SAVE HI ORDER PIECE OF DISPATCH ADDRESS
1435 001613 043 INX H ; UPDATE MEM POINTER
1436 001614 163 MOV M,E ; SAVE LO ORDER PIECE OF DISPATCH ADDRESS
1437 001615 043 INX H ; UPDATE POINTER TO FIRST FREE..
1438 001616 257 XRA A ; CLR ACCUM
1439 001617 057 CMA ; IN ORDER TO MAKE IT -1
1440 001620 167 MOV M,A ; SET -1 AS END-OF-LIST INDICATOR
1441 001621 042 211 040 SHLD RPLST ; AND RESTORE THE POINTER
1442
1443 ; CONTINUE THE DISPATCH
1444
1445 001624 353 CMDGO: XCHG ; SET "TABLE ENTRY" INTO "H,L"
1446
1447 ; AND DISPATCH TO ACTUAL COMMAND CODE
1448
1449 001625 315 330 032 CALL EOCML ; SET "C-BIT" TO SAY END-OF-LINE IF TRUE
1450 001630 365 PUSH PSW ; SAVE STATE OF PROCESSOR FLAGS
1451 001631 324 252 003 CNC REMARG ; IF NO C-BIT, CMD HAD ARG..MUST REMEMBER IT
1452
1453 ; FINALLY SEE IF COMMAND REQUIRES AN ARG
1454
1455 001634 322 244 003 JNC CMDGO9 ; IF REQUIRES NO ARG, GO GO GO
1456
1457 ; FALL HERE IF COMMAND HAD NO ARG..SEE IF IT SHOULD HAVE HAD ONE
1458
1459 001637 174 MOV A,H ; GET HI ORDER OF DISP ADDRESS
1460 001640 027 RAL ; SHIFT HI ORDER BIT (BIT15) INTO THE C-BIT
1461 001641 332 126 032 JC RRARG ; WELL IF SET, IT NEEDED ARG.. REPORT THAT HAD NONE
1462
1463 ; ELSE ALL OK.. CLEAR BIT15 IF SET AND PROCEED
1464
1465 001644 174 CMDGO9: MOV A,H ; HI ORDER TO ACCUM
1466 001645 346 177 ANI ^O177 ; CLEAR BIT 15 NO MATTER WHAT
1467 001647 147 MOV H,A ; PUT HI ORDER BACK
1468 001650 361 POP PSW ; GET THE PROCESSOR FLAGS BACK
1469 001651 351 PCHL ; ADDR TO PC TAKES THE DISPATCH
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 37
HCORE.M80 *COMMAND DECODER CONTINUED*
1471
1472 ; ROUTINE TO REMEMBER IF COMMAND HAD AN ARG..USED BY REPEAT FUNCTION
1473
1474 001652 365 REMARG: PUSH PSW ; SAVE FLAGS
1475 001653 072 275 040 LDA T80DT ; SEE IF THIS WAS A REPEAT, IN WHICH CASE, DO NOTHING
1476 001656 247 ANA A ; SET CPU FLAGS
1477 001657 312 275 003 JZ REMAR1 ; IF WAS RP, GET OUT
1478
1479 001662 345 PUSH H ; AND SAVE DISPATCH ADDRESS
1480 001663 052 211 040 LHLD RPLST ; GET THIS DISPATCH FROM REPEAT LIST
1481 001666 053 DCX H ; BACK UP ADDR POINTER TO POINT
1482 001667 053 DCX H ; HI ORDER PIECE OF ADDRESS
1483 001670 176 MOV A,M ; NOW GET HI ORDER PIECE INTO ACCUM
1484 001671 366 200 ORI ^O200 ; ADD SIGN BIT TO REMEMBER ARG
1485 001673 167 MOV M,A ; NOW PUT IT BACK
1486 001674 341 POP H ; RESTORE DISPATCH ADDRESS
1487 001675 361 REMAR1: POP PSW ; AND RESTORE C-BIT FROM PREVIOUS "EOCML"
1488 001676 311 RET ; AND RETURN
1489
1490 ; THIS IS "NORML", FOR NORMAL RETURNS.. IT SETS UP PREVIOUS POINTERS
1491 ; AND THEN GOES BACK TO PROMPT.
1492
1493 001677 041 204 040 NORML: LXI H,EOL ; GET PNTR TO COMMAND COUNT
1494 001702 176 MOV A,M ; COPY TO ACCUM
1495 001703 075 DCR A ; DECREMENT IT
1496 001704 167 MOV M,A ; PUT BACK WHERE U GOT IT
1497
1498 ; IF COUNT WAS DOWN TO ZERO, THEN RESET IT
1499
1500 001705 075 DCR A ; IF COUNT WAS ZERO, THIS MAKES IT NEGATIVE
1501 001706 372 337 003 JM NORDIS ; IF EOL HAS GONE MINUS, TAKE NORMAL DISPATCH
1502 001711 315 324 003 CALL FXNXT ; OTHER WISE BE CLEVER & CRYPTIC
1503 001714 CLRB ERRCD ; AND CLEAR ERROR CODE
1504 001716 041 145 002 LXI H,DCODE ; FIX H,L FOR NORMAL NULL JOB
1505
1506 001721 303 374 001 JMP N1 ; AND FINALLY, ALL ELSE GOES TO NULL LOOP
1507 001724 052 223 040 FXNXT: LHLD .ARG1 ; GET CMD PNTR
1508 001727 043 INX H ; UPDATE IT PAST CURRENT EOL CHAR (, OR CRLF)
1509 001730 042 227 040 SHLD FIRST ; FIX CURRENT CMD LINE PNTR
1510 001733 311 RET ; AND THATS ENOUGH FOR NOW
1511
1512 ; CODE FOR BUFFER OVER FLOW
1513
1514 001734 BFOVR: PLINE BV ; "BUFFER OVERFLOW
(1) 001734 337 RST 3 ; PRINT LINE OF CHARS
(1) 001735 010 037 .ADDR BV ; BUFF TO PRINT
1515 001737 052 350 040 NORDIS: LHLD NOREND ; GET THE CURRENT DISPATCH ADDRESS FOR NORMAL ENDS
1516 001742 351 PCHL ; AND GO
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 38
HCORE.M80 *COMMAND DECODER CONTINUED*
1518
1519 ; SUBROUTINE TO PRINT A SINGLE CHARACTER. CHARACTER TO BE PRINTED IS
1520 ; PASSED IN THE ACCUM. IF THE UART SHOULD FAIL AND NEVER REACH THE
1521 ; TRANSMITTER READY STATE, THE 8080 WILL HANG IN THIS LOOP FOREVER
1522 ; TRYING TO PRINT.
1523
1524 001743 365 PCHR: PUSH PSW ; SAVE CHARACTER ON THE STACK
1525 001744 072 120 040 LDA NOPNT ; GET NO PRINT FLAG
1526 001747 267 ORA A ; IS IT SET?
1527 001750 312 355 003 JZ PCHR0 ; IF NOT CONTINUE AS NORMAL
1528
1529 001753 361 POP PSW ; IF IT IS..NO PRINTING
1530 001754 311 RET ; SO RETURN
1531
1532 001755 072 247 040 PCHR0: LDA CSLMODE ; GET CURRENT KLINIK LINE MODE
1533 001760 376 020 CPI .MODE4 ; IS THIS APT MODE?
1534 001762 302 012 004 JNZ PCHR1 ; IF NO, PRINT
1535
1536 ; HERE IF DOING APT AND MUST MERELY STACK CHARS TO BE ENVELOPED AND SENT OUT
1537 ; A LITTLE LATER. THE CHARACTER TO BE STACKED IS SITTING ON THE TOP OF THE
1538 ; STACK.
1539
1540 001765 361 POP PSW ; NOW GET THE CHARACTER THAT WAS STACKED
1541 001766 345 PUSH H ; MUST SAVE H,L IN HERE
1542 001767 052 352 040 LHLD ENVPNT ; GET THE POINTER TO THE ENVELOPE
1543 001772 167 MOV M,A ; PUT CHARACTER INTO THE BUFFER
1544 001773 043 INX H ; UPDATE THE POINTER
1545 001774 066 000 MVI M,0 ; GUARANTEE LAST BYTE IS A ZERO
1546 001776 042 352 040 SHLD ENVPNT ; PUT IT BACK WHERE U GOT IT
1547 002001 341 POP H ; AND RESTORE REG
1548 002002 376 015 CPI CRCHR ; IF WE ARE BUFFERING A CR, MUST SET THE FLAG
1549 002004 300 RNZ ; IF NOT A CR, JUST LEAVE
1550 002005 062 252 040 STA MAILFG ; ELSE SET THE FLAG
1551 002010 311 RET ; AND OUT
1552
1553 002011 365 PCHR1Z: PUSH PSW ; CHAR ON STACK FOR A BIT
1554 002012 333 201 PCHR1: IN CTYCTL ; GET UART STATUS
1555 002014 346 001 ANI 01 ; CHECK BITS TO SEE IS XMITTER READY?
1556 002016 312 012 004 JZ PCHR1 ; JUMP BACK IF NOT READY YET
1557
1558 ; NOW,BEFORE PRINTING, SEE IF NEED TO TYPE TO KLINIK LINE TOO.
1559
1560 002021 072 247 040 LDA CSLMODE ; GET CURRENT KLINIK LINE MODE
1561 002024 376 010 CPI .MODE3 ; KLINIK IN PARALLEL MODE??
1562 002026 302 046 004 JNZ PCHROV ; IF NOT, JUST GO PRINT
1563
1564 ; FALL THROUGH IF NEED KLINIK TOO
1565
1566 002031 333 203 PCHR2: IN REMCTL ; GET KLINIK UART STATUS
1567 002033 346 001 ANI 01 ; CHECK THE READY BIT
1568 002035 312 031 004 JZ PCHR2 ; IF NOT READY, GO BACK AND TRY AGAIN
1569 002040 361 POP PSW ; GET CHAR OFF STACK WHEN THINGS ARE READY
1570 002041 323 202 OUT REMDAT ; PRINT CHAR ON THE KLINIK LINE
1571 002043 323 200 OUT CTYDAT ; PRINT ON CTY
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 38-1
HCORE.M80 *COMMAND DECODER CONTINUED*
1572 002045 311 RET ; AND BACK TO CALLER
1573
1574 002046 361 PCHROV: POP PSW ; FINALLY READY..GET CHAR FROM STACK
1575 002047 323 200 OUT CTYDAT ; SEND CHARACTER
1576 002051 311 RET ; AND RETURN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 39
HCORE.M80 *COMMAND DECODER CONTINUED*
1578
1579 ; SUBROUTINE KCHR. FOR PRINTING A SINGLE CHARACTER ON THE KLINIK LINE
1580 ; ONLY. PARTICULARLY USEFUL FOR THE "?NA" AND "PW:" MESSAGES. CHARACTER
1581 ; TO BE PRINTED CAN BE A TRAILING ARG, OR YOU CAN CALL THIS ROUTINE IN
1582 ; THE MIDDLE AND PASS THE CHAR TO BE PRINTED IN THE ACCUM.
1583
1584 002052 343 KCHR: XTHL ; SWAP STACK TOP WITH H,L
1585 002053 176 MOV A,M ; GET THE TRAILING ARG FROM PROM
1586 002054 043 INX H ; UPDATE RETURN ADDRESS PAST THE TRAILING ARG
1587 002055 343 XTHL ; PUT THE RETURN BACK ON THE STACK
1588 002056 365 KCHR0: PUSH PSW ; SAVE THE CHARACTER JUST FOR A LITTLE BIT
1589 002057 333 203 KCHR1: IN REMCTL ; GET KLINIK UART STATUS
1590 002061 346 001 ANI 01 ; SEE IF UART IS READY
1591 002063 312 057 004 JZ KCHR1 ; LOOP TILL IT IS
1592
1593 002066 361 POP PSW ; READY NOW, GET THE CHAR OFF THE STACK
1594 002067 323 202 OUT REMDAT ; SEND TO UART
1595 002071 311 RET ; AND BACK TO CALLER
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 40
HCORE.M80 *COMMAND DECODER CONTINUED*
1597
1598 ; SUBROUTINE KLINE. FOR PRINTING A LINE OF CHARACTERS. A TRAILING ARG
1599 ; POINTING TO THE STRING TO BE PRINTED IS USED. ("/" FOR CRLF NOT USED).
1600
1601 002072 343 KLINE: XTHL ; SWAP STACK, GET POINTER TO TRAILING ARG TO H,L
1602 002073 315 044 033 CALL TARG1 ; GET POINTER TO ARG INTO D,E
1603 002076 343 XTHL ; FIX RETURN ADDRESS
1604
1605 002077 032 KLINE1: LDAX D ; GET FIRST CHAR INTO ACCUM
1606 002100 023 INX D ; UPDATE THE CHARACTER POINTER
1607
1608 002101 247 ANA A ; WELL THEN, SEE IF CHAR IS 0, MEANING END OF STRING
1609 002102 310 RZ ; OUT IF YES
1610
1611 ; WELL THEN , MIGHT AS WELL GO PRINT THE THING
1612
1613 002103 315 056 004 CALL KCHR0 ; GO PRINT THE CHARACTER
1614 002106 303 077 004 JMP KLINE1 ; AND WHEN RETURN, GO FETCH UP THE NEXT CHAR
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 41
HCORE.M80 *COMMAND DECODER CONTINUED*
1616
1617 ; SUBROUTINE TO PRINT A LINE OF CHARACTERS. POINTER TO THE LINE OF
1618 ; CHARACTERS TO BE PRINTED IS PASSED IN "H,L" REGISTER. NO REGISTERS
1619 ; ARE DESTROYED BY THIS ROUTINE. THE END-OF-MESSAGE FOR THE LINE OF
1620 ; CHARACTERS TO BE PRINTED IS INDICATED BY A "00" BYTE AT THE END OF
1621 ; THE MESSAGE TEXT.
1622
1623 002111 343 PLNE: XTHL ; REPLACE RETURN..PUT ON STACK
1624 002112 353 XCHG ; TRAILING ARG FROM "D,E" TO "H,L"
1625
1626 002113 176 PLN1: MOV A,M ; GET CHARACTER FROM MEM.
1627 002114 043 INX H ; INCREMENT TO NEXT CHARACTER TO BE PRINTED
1628
1629 002115 376 134 CPI BSLASH ; IS THIS A BACK SLASH(I.E. IN-LINE CRLF)
1630 002117 312 127 004 JZ PLN2 ; JUMP IF YES...
1631
1632 002122 267 ORA A ; IS IT A "00" BYTE?
1633 002123 310 RZ ; RETURN IF DONE
1634
1635 ; FALL HERE IF GOTTA REAL CHAR..
1636
1637 002124 315 343 003 CALL PCHR ; GO PRINT CHAR IN ACCUM
1638 002127 314 136 004 PLN2: CZ CRLFIN ; GET HERE ON ZERO FLAG,ONLY IF NEED CRLF
1639 002132 303 113 004 JMP PLN1 ; CONTINUE LOOP
1640
1641 ; SUBROUTINE TO PRINT A CARRIAGE RETURN-LINE FEED. NO REGISTERS
1642 ; DESTROYED..JUST CALL TO GET YOUR <CR><LF> PRINTED
1643
1644 002135 341 .CRLF: POP H ; MUST FIX THE STACK
1645 002136 CRLFIN: PCHAR CRCHR ; PRINT CARRIAGE RETURN
(1) 002136 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 002137 015 .BYTE CRCHR ; CHAR TO PRINT
1646 002140 PCHAR LFCHR ; PRINT LINE FEED
(1) 002140 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 002141 012 .BYTE LFCHR ; CHAR TO PRINT
1647 002142 311 RET ; RETURN
1648
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 42
HCORE.M80 *COMMAND DISPATCH LIST*
1650 .SBTTL *COMMAND DISPATCH LIST*
1651
1652 ; THIS LIST CONTAINS ALL CHARACTER PAIRS WHICH ARE CONSIDERED
1653 ; LEGITIMATE COMMANDS TO THE KS10 CONSOLE.
1654
1655 002143 CMDLST:
1656 002143 122 120 .BYTE 'R,'P ; *REPEAT IN FAST LOOP*
1657 002145 124 020 .ADDR RPCMD
1658 002147 104 116 .BYTE 'D,'N ; *DEPOSIT NEXT*
1659 002151 246 212 .ADDR BIT15!DNCMD
1660 002153 104 103 .BYTE 'D,'C ; *DEPOSIT CRAM*
1661 002155 047 216 .ADDR BIT15!DCCMD
1662 002157 104 115 .BYTE 'D,'M ; *DEPOSIT MEMORY*
1663 002161 147 212 .ADDR BIT15!DMCMD
1664 002163 114 103 .BYTE 'L,'C ; *LOAD CRAM ADDRESS*
1665 002165 254 213 .ADDR BIT15!LCCMD
1666
1667 002167 114 101 .BYTE 'L,'A ; *LOAD MEMORY ADDRESS*
1668 002171 043 213 .ADDR BIT15!LACMD
1669 002173 104 111 .BYTE 'D,'I ; *DEPOSIT I/O*
1670 002175 335 212 .ADDR BIT15!DICMD
1671 002177 114 111 .BYTE 'L,'I ; *LOAD I/O ADDRESS*
1672 002201 050 213 .ADDR BIT15!LICMD
1673 002203 104 102 .BYTE 'D,'B ; *DEPOSIT BUS*
1674 002205 163 011 .ADDR DBCMD
1675 002207 104 113 .BYTE 'D,'K ; *DEPOSIT KONSOLE*
1676 002211 071 213 .ADDR BIT15!DKCMD
1677
1678 002213 114 113 .BYTE 'L,'K ; *LOAD ADR FOR KONSOLE*
1679 002215 055 213 .ADDR BIT15!LKCMD
1680 002217 105 113 .BYTE 'E,'K ; *EXAMINE KONSOLE*
1681 002221 376 012 .ADDR EKCMD
1682 002223 114 106 .BYTE 'L,'F ; LOAD DIAG FUNCTION
1683 002225 211 214 .ADDR BIT15!LFCMD
1684 002227 104 106 .BYTE 'D,'F ; DEPOSIT INTO DIAG FUNCTION
1685 002231 220 214 .ADDR BIT15!DFCMD
1686 002233 115 113 .BYTE 'M,'K ; *MARK MICRO-CODE*
1687 002235 376 217 .ADDR BIT15!MKCMD
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 43
HCORE.M80 *COMMAND DISPATCH LIST*
1689
1690 002237 125 115 .BYTE 'U,'M ; *UNMARK MICRO-CODE*
1691 002241 371 217 .ADDR BIT15!UMCMD
1692 002243 120 105 .BYTE 'P,'E ; *PARITY ENABLE*
1693 002245 340 016 .ADDR PECMD
1694 002247 103 105 .BYTE 'C,'E ; *CACHE ENABLE*
1695 002251 261 013 .ADDR CECMD
1696 002253 124 105 .BYTE 'T,'E ; *1 MSEC CLOCK ENABLE*
1697 002255 335 013 .ADDR TECMD
1698 002257 124 120 .BYTE 'T,'P ; *TRAP ENABLE*
1699 002261 027 014 .ADDR TPCMD
1700
1701 002263 123 124 .BYTE 'S,'T ; *START*
1702 002265 057 217 .ADDR BIT15!STCMD
1703 002267 110 101 .BYTE 'H,'A ; *HALT*
1704 002271 173 017 .ADDR HACMD
1705 002273 103 117 .BYTE 'C,'O ; *CONTINUE*
1706 002275 142 017 .ADDR COCMD
1707 002277 123 111 .BYTE 'S,'I ; *SINGLE INSTRUCT*
1708 002301 142 014 .ADDR SICMD
1709 002303 123 115 .BYTE 'S,'M ; *START MICRO-CODE*
1710 002305 150 016 .ADDR SMCMD
1711
1712 002307 115 122 .BYTE 'M,'R ; *MASTER RESET*
1713 002311 164 005 .ADDR MRCMD
1714 002313 103 123 .BYTE 'C,'S ; *START CPU CLOCK*
1715 002315 163 014 .ADDR CSCMD
1716 002317 103 110 .BYTE 'C,'H ; *HALT CPU CLOCK*
1717 002321 176 014 .ADDR CHCMD
1718 002323 103 120 .BYTE 'C,'P ; *PULSE CPU CLOCK*
1719 002325 107 013 .ADDR CPCMD
1720 002327 105 116 .BYTE 'E,'N ; *EXAMINE NEXT*
1721 002331 116 012 .ADDR ENCMD
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 44
HCORE.M80 *COMMAND DISPATCH LIST*
1723
1724 002333 105 115 .BYTE 'E,'M ; *EXAMINE MEMORY*
1725 002335 347 011 .ADDR EMCMD
1726 002337 105 111 .BYTE 'E,'I ; *EXAMINE I/O*
1727 002341 272 012 .ADDR EICMD
1728 002343 105 103 .BYTE 'E,'C ; *EXAMINE CRAM*
1729 002345 227 015 .ADDR ECCMD
1730 002347 105 102 .BYTE 'E,'B ; *EXAMINE BUS*
1731 002351 036 011 .ADDR EBCMD
1732 002353 105 112 .BYTE 'E,'J ; *EXAMINE CURRENT CRAM INFO*
1733 002355 052 015 .ADDR EJCMD
1734
1735 002357 124 122 .BYTE 'T,'R ; *TRACE*
1736 002361 141 015 .ADDR TRCMD
1737 002363 122 103 .BYTE 'R,'C ; *FUNCTION READ CRAM CONTROL REG*
1738 002365 366 014 .ADDR RCCMD
1739 002367 132 115 .BYTE 'Z,'M ; *ZERO KS10 MOS MEMORY*
1740 002371 050 020 .ADDR ZMCMD
1741 002373 120 115 .BYTE 'P,'M ; *PULSE MICRO-CODE..*
1742 002375 216 015 .ADDR PMCMD
1743 002377 102 124 .BYTE 'B,'T ; *BOOT SYS*
1744 002401 230 021 .ADDR BTCMD
1745
1746 002403 102 103 .BYTE 'B,'C ; *BOOT CHECK*
1747 002405 344 025 .ADDR BCCMD
1748 002407 114 102 .BYTE 'L,'B ; *LOAD BOOT*
1749 002411 260 021 .ADDR LBCMD
1750 002413 105 130 .BYTE 'E,'X ; *EXECUTE*
1751 002415 006 217 .ADDR BIT15!EXCMD
1752 002417 114 124 .BYTE 'L,'T ; *LAMP TEST*
1753 002421 057 014 .ADDR LTCMD
1754 002423 113 114 .BYTE 'K,'L ; *KLINIK*
1755 002425 231 017 .ADDR KLCMD
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 45
HCORE.M80 *COMMAND DISPATCH LIST*
1757
1758 002427 105 122 .BYTE 'E,'R ; *EXAMINE REGISTER*
1759 002431 140 013 .ADDR ERCMD
1760 002433 114 122 .BYTE 'L,'R ; *LOAD REGISTER*
1761 002435 223 013 .ADDR LRCMD
1762 002437 104 122 .BYTE 'D,'R ; *DEPOSIT REGISTER*
1763 002441 233 013 .ADDR DRCMD
1764 002443 115 124 .BYTE 'M,'T ; *MAGTAPE BOOT*
1765 002445 357 021 .ADDR MTCMD
1766 002447 104 123 .BYTE 'D,'S ; *DISK SELECT*
1767 002451 310 020 .ADDR DSCMD
1768 002453 115 123 .BYTE 'M,'S ; *MAGTAPE SELECT*
1769 002455 366 020 .ADDR MSCMD
1770 002457 123 110 .BYTE 'S,'H ; *SHUTDOWN*
1771 002461 201 017 .ADDR SHCMD
1772 002463 115 102 .BYTE 'M,'B ; *MAGTAPE BOOTSTRAP*
1773 002465 173 022 .ADDR MBCMD
1774 002467 120 127 .BYTE 'P,'W ; *PASSWORD*
1775 002471 317 017 .ADDR PWCMD
1776 002473 124 124 .BYTE 'T,'T ; *KLINIK LINE TO TTY*
1777 002475 273 017 .ADDR TTCMD
1778 002477 126 124 .BYTE 'V,'T ; *VERIFY AGAINST TAPE*
1779 002501 000 024 .ADDR VTCMD
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 46
HCORE.M80 *COMMAND DISPATCH LIST*
1781
1782 002503 126 104 .BYTE 'V,'D ; *VERIFY AGAINST DISK*
1783 002505 365 023 .ADDR VDCMD
1784 002507 130 061 .BYTE 'X,'1 ; DUMMY
1785 002511 054 040 .ADDR RAMX1
1786 002513 106 111 .BYTE 'F,'I ; *FILE*
1787 002515 267 223 .ADDR BIT15!FICMD
1788 002517 102 062 .BYTE 'B,'2 ; **TEMP BOOTCHECK 2**
1789 002521 355 023 .ADDR B2CMD
1790 002523 115 115 .BYTE 'M,'M ; MANUFACTURING MODE
1791 002525 116 014 .ADDR MMCMD
1792 002527 123 103 .BYTE 'S,'C ; SOFT CRAM ERROR RECOVERY "ON/OFF" SWITCH
1793 002531 371 013 .ADDR SCCMD
1794 002533 000 .BYTE 0 ; END LIST MARKER
1795
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 47
HCORE.M80 *CHECKSUMS AS COMPUTED BY SPECIAL 10-BASED PROGRAM*
1797 .SBTTL *CHECKSUMS AS COMPUTED BY SPECIAL 10-BASED PROGRAM*
1798
1799 001 .IF DF,PASS1
1800
1801 CHECKS: .ADDR 0 ; PSUEDO BYTES FOR RAM NUMBER 1
1802 .ADDR 0 ; PSUEDO BYTES FOR RAM NUMBER 2
1803 .ADDR 0 ; PSUEDO BYTES FOR RAM NUMBER 3
1804 .ADDR 0 ; PSUEDO BYTES FOR RAM NUMBER 4
1805 000 .ENDC
1806
1807
1808 001 .IF DF,PASS2
1809 002534 317 224 CHECKS: .ADDR CHKSM0 ; CHECKSUM FOR RAM NUMBER 1
1810 002536 017 303 .ADDR CHKSM1 ; CHECKSUM FOR RAM NUMBER 2
1811 002540 163 343 .ADDR CHKSM2 ; CHECKSUM FOR RAM NUMBER 3
1812 002542 015 004 .ADDR CHKSM3 ; CHECKSUM FOR RAM NUMBER 4
1813 000 .ENDC
1814
1815 .TITLE VER 5.2 KS10 CONSOLE PROGRAM
1816
1817 002544 134 113 123 INIMS: .ASCIZ /\KS10 CSL.V5.2\/ ; POWER UP MESSAGE AND IDENTIFIER
1818
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 48
HCORE.M80 *** "MR" CMD ***
1820 .SBTTL *** "MR" CMD ***
1821
1822 ; THIS CODE PERFORMS THE "MASTER RESET" CONSOLE FUNCTION.
1823
1824 002564 MRCMD:
1825 002564 257 XRA A ; SET ACCUM=0
1826 002565 323 212 OUT CPUCTL ; SET 0'S TO "RUN,EXECUTE,CONT"
1827 002567 315 176 014 CALL CHCMD ; AND INSURE CPU HAS STOPPED...
1828
1829 ; ISSUE SM10 BUS RESET
1830
1831 002572 076 005 MRINT: MVI A,5 ; BITS FOR "DP RESET", & "CRAM RESET"
1832 002574 323 204 OUT CRMCTL ; ***** I/O WRT 204/5 *****
1833
1834 002576 076 200 MVI A,^B10000000 ; BIT 7 FOR RESET
1835 002600 323 100 OUT RESET ; ISSUE RESET, SET CONSOLE MODE
1836
1837 002602 315 325 016 CALL SMFINI ; GET CURRENT PARITY SETTINGS & SET IN KS
1838
1839 002605 072 355 040 LDA TRAPEN ; BIT FOR "CLR TEN INT" SHOULD BE LOW
1840 002610 323 205 OUT DIAG ; ***** I/O WRT 205/XX *****
1841
1842 002612 006 000 MVI B,0 ; WILL SET NO BITS IN THE STATE WORD
1843 002614 315 312 032 CALL STATEM ; SET THE STATE
1844 002617 012 .BYTE ^O12 ; OFF THE STUFF WE DON'T WANT
1845 002620 ENDCMD ; AND OUT
(1) 002620 311 RET ; RETURN TO CALLER
1846
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 49
HCORE.M80 *INTERRUPT HANDLER*
1848 .SBTTL *INTERRUPT HANDLER*
1849
1850 ; HERE ON INTERRRUPTS..REGS ALREADY SAVED AT "RST" BLOCK
1851
1852 002621 041 145 006 INTRP: LXI H,ENDIN ; PUSH OUR FAVORITE EXIT ADDRESS ON THE STACK
1853 002624 345 PUSH H ; AND WE CAN DO "RET"'S TO LEAVE ROUTINE
1854 002625 333 201 IN CTYCTL ; GET CTY TTY STATUS
1855 002627 107 MOV B,A ; SAVE IT IN THE "B" REG FOR A COUPLE INSTRS
1856 002630 333 203 IN REMCTL ; NOW FETCH UP THE REMOTE STATUS
1857 002632 260 ORA B ; AND THROW BOTH STATUS'S TOGETHER
1858 002633 346 070 ANI ^O70 ; ANY ERR BITS SET?
1859 002635 302 024 010 JNZ TTERR ; GO TELL ERR IF YES
1860
1861 ; FALL THROUGH IF NO ONE IN ERROR. NOW SEE WHO THE CHARACTER IS FROM
1862
1863 002640 170 MOV A,B ; COPY CTY STATUS INTO ACCUM
1864 002641 346 002 ANI 2 ; IS A CHARACTER IN THE CTY UART??
1865 002643 302 274 005 JNZ INTCH ; JUMP IF YES. FIND CHARACTER IN CTY UART.
1866
1867 ; FALL HERE IF IT WAS A KLINIK CHAR
1868
1869 002646 333 202 IN REMDAT ; FETCH OUT THE CHARACTER
1870 002650 346 177 ANI ^O177 ; OFF THE PARITY BIT
1871 002652 107 MOV B,A ; MAKE SECOND COPY OF CHARACTER IN "B"
1872
1873 002653 376 031 CPI CNTLY ; BEFORE DISPATCHING, IS THIS "CONTROL-Y"?
1874 002655 302 270 005 JNZ KL.DSP ; IF NOT, DO EVERYTHING AS PER NORMAL
1875
1876 ; AHA. IT WAS A CONTROL-Y..NOW SEE IF IN MM MODE
1877
1878 002660 072 251 040 LDA MMFLG ; GET FLAG
1879 002663 247 ANA A ; SET 8080 CONDITION CODES
1880 002664 302 151 032 JNZ MMERR1 ; IF YES, MM MODE, THEN ABORT WHATEVER YOU ARE DOING
1881 002667 170 MOV A,B ; NOW REPLACE THE CHAR WE JUST BOMBED
1882
1883 ; ELSE FALL THROUGH
1884
1885 002670 052 346 040 KL.DSP: LHLD MODDIS ; GET CURRENT KLINIK MODE DISPATCH
1886 002673 351 PCHL ; DISPATCH TO DO THE RIGHT THING
1887
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 50
HCORE.M80 *INTERRUPT HANDLER*
1889
1890 ; CHECK IF WE ARE IN USER MODE
1891
1892 002674 333 200 INTCH: IN CTYDAT ; INPUT CHARACTER
1893 002676 346 177 ANI ^O177 ; STRIP BIT 8
1894 002700 107 MOV B,A ; SAVE CHAR FOR 2 INSTRUCTIONS
1895
1896 ; SEE IF THIS IS MANUFACTURING MODE BEFORE WE CONTINUE
1897
1898 002701 072 247 040 LDA CSLMODE ; GRAB CURRENT CSL MODE
1899 002704 346 020 ANI .MODE4 ; AND SEE IF ITS MODE 4
1900 002706 312 332 005 JZ CMNBUF ; IF NO, CTY INPUT NORMAL
1901
1902 ; PLACE YOU GO IF MANUFACTURING MODE.. CTY CHARS ARE JUST SENT TO KLINIK
1903
1904 002711 170 MOV A,B ; GRAB CHARACTER TO BE SENT TO KLINIK
1905 002712 315 056 004 CALL KCHR0 ; ONLY ECHO CTY STUFF AGAINST THE KLINIK LINE
1906
1907 ; NOW SEE IF THAT WAS A MODE CHANGE CHAR WE JUST SENT DOWN THE LINE
1908
1909 002715 376 031 CPI CNTLY ; IS IT "CONTROL-Y"
1910 002717 300 RNZ ; IF WAS NOT, SIMPLY GET OUT
1911
1912 002720 CLRB KLNKSW ; FORCE RE-EXAMINE OF THINGS
1913 002722 CLRB MMFLG ; TURN OFF MANUFACTURING MODE
1914 002724 315 070 034 CALL SETM2 ; FORCE KLINIK LINE IMMEDIATELY INTO MODE 2
1915 002727 303 200 001 JMP REINI
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 51
HCORE.M80 *INTERRUPT HANDLER*
1917
1918 ; ALSO STANDARD COMMON ENTRY POINT WHEN KLINIK LINE PARALLELS THE CTY
1919
1920 002732 MODE3:
1921 002732 072 156 040 CMNBUF: LDA USRMD ; GET USER MODE FLAG
1922 002735 247 ANA A ; IS IT SET?
1923 002736 170 MOV A,B ; COPY CHAR INTO ACCUM (FOR KLINIK OR CTY)
1924 002737 302 236 006 JNZ USER ; JUMP IF IN USER MODE...
1925
1926 ; FALL THRU TO HERE IF NOT USER MODE AND WE NEED DO SOMETHING WITH CHAR
1927
1928 002742 376 017 CPI CNTLO ; CONTROL-O?
1929 002744 302 364 005 JNZ SKP2 ; JMP IF NO
1930
1931 ; ELSE FALL INTO CONTROL-O CODE..STOP THE PRINTER
1932
1933 002747 PCHAR UPARR
(1) 002747 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 002750 136 .BYTE UPARR ; CHAR TO PRINT
1934 002751 PCHAR OCHR
(1) 002751 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 002752 117 .BYTE OCHR ; CHAR TO PRINT
1935 002753 072 120 040 LDA NOPNT ; GET CURRENT STATE OF "NO PRINT"
1936 002756 306 200 ADI ^O200 ; ZAP PRINT FLAG
1937 002760 062 120 040 STA NOPNT ; PUT IT BACK
1938 002763 257 XRA A ; ZAP CHAR SO WE CAN EARLY EXIT
1939
1940 002764 376 023 SKP2: CPI CNTLS ; IS IT CONTROL-S
1941 002766 314 076 007 CZ CNTS ; CALL IF YES
1942
1943 002771 376 021 CPI CNTLQ ; IS IT CONTROL-Q
1944 002773 302 001 006 JNZ SKP6 ; JMP IF NO
1945
1946 ; FALL TO HERE IF YES, ZAPP CNTL-Q FLAG
1947
1948 002776 CLRB STPPD ; ZAP!!
1949 003000 257 XRA A ; CLEAR ACCUM
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 52
HCORE.M80 *INTERRUPT HANDLER*
1951
1952 003001 062 157 040 SKP6: STA RPEND ; ANY OTHER CHARS MEAN END REPEAT LOOP
1953 003004 376 032 CPI CNTLZ ; CONTROL-Z?
1954 003006 312 324 006 JZ CNTZ ; JMP IF YES
1955
1956 003011 376 025 CPI CNTLU ; CONTROL-U?
1957 003013 302 030 006 JNZ SKP8 ; JMP IF NO
1958
1959 ; FALL TO HERE TO DO THE CONTROL-U CODE
1960
1961 003016 PCHAR UPARR
(1) 003016 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 003017 136 .BYTE UPARR ; CHAR TO PRINT
1962 003020 PCHAR UCHR
(1) 003020 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 003021 125 .BYTE UCHR ; CHAR TO PRINT
1963 003022 PCRLF ; AND A CR-LF TO GIVE CLEAN LINE
(2) 003022 347 RST 4
(2) 003023 002 .BYTE 2
1964 003024 315 115 010 CALL BFRST ; CLEAR INPUT BUFFER
1965 003027 257 XRA A ; AND SET ACCUM FOR EARLY OUT
1966
1967 003030 376 003 SKP8: CPI CNTLC ; CONTROL-C?
1968 003032 312 103 010 JZ CNTC ; JMP IF YES
1969
1970 003035 376 000 CPI Q.OUT ; SEE IF MUST TAKE A QUICK OUT
1971 003037 310 RZ ; LEAVE IF YES
1972
1973 003040 376 054 CPI COMMA ; IS IT A COMMA?
1974 003042 302 051 006 JNZ M11 ; IF NOT COMMA, AVOID NEXT COUPLE INSTRUCTIONS
1975
1976 ; FALL TO HERE IF WAS A COMMA
1977
1978 003045 041 225 040 LXI H,CMCNT ; POINT TO THE COMMA COUNTER
1979 003050 064 INR M ; UPDATE.. AND CONTINUE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 53
HCORE.M80 *INTERRUPT HANDLER*
1981
1982 ; NOT SPECIAL CHAR..PROCESS NORMAL
1983
1984 003051 376 034 M11: CPI CNBCK ; CONTROL BACKSLASH SHOULD LOOK LIKE CRLF
1985 003053 314 164 006 CZ EOMRK ; CALL IF YES
1986
1987 003056 376 015 CPI CRCHR ; CARRIAGE RET?
1988 003060 314 164 006 CZ EOMRK ; CALL IF YES
1989
1990 003063 376 012 CPI LFCHR ; LINE FEED?
1991 003065 314 164 006 CZ EOMRK ; CALL IF YES
1992
1993 003070 052 215 040 LHLD BUF. ; POINTER TO FIRST FREE BUFFER PLACE
1994 003073 376 177 CPI RBOUT ; RUB-OUT CHAR?
1995 003075 312 203 006 JZ RUB ; JMP IF YES
1996
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 54
HCORE.M80 *INTERRUPT HANDLER*
1998
1999 ; OTHERWISE ITS A REGULAR CHAR..
2000 ; THIS IS DUMB CODE - FOR FIRST GO AROUND TYPE-AHEAD WON'T WORK.
2001
2002 003100 315 153 006 CALL UP.LO ; CONVERT SO PGM INTERNAL ONLY SEES UPPER CASE
2003
2004 003103 167 MOV M,A ; CHAR INTO BUFFER SPACE
2005 003104 043 INX H ; UPDATE PNTR
2006 003105 042 215 040 SHLD BUF. ; AND REPLACE PNTR
2007
2008 003110 107 MOV B,A ; SAVE THE CHAR JUST TYPED
2009 003111 326 040 SUI ^O40 ; CHECK IF ITS A PRINTING CHAR
2010 003113 372 130 006 JM NOECH ; IF IT IS NONE-PNT..GO NO ECHO
2011
2012 003116 170 MOV A,B ; GET CHAR BACK
2013 003117 326 176 SUI ^O176 ; IS IT TOO HI TO BE PRINTING CHAR?
2014 003121 362 130 006 JP NOECH ; IF YES, GO NO ECHO
2015
2016 003124 170 MOV A,B ; GET CHAR BACK AGAIN
2017 003125 315 343 003 CALL PCHR ; NOW GO ECHO IT.....
2018
2019 003130 072 161 040 NOECH: LDA BFCNT ; GET CHAR COUNT
2020 003133 074 INR A ; BUMP UP
2021 003134 376 120 CPI 80. ; TOO MANY?
2022 003136 312 334 003 JZ BFOVR ; JMP BUFFER OVERFLOW IF YES
2023 003141 062 161 040 STA BFCNT ; REPLACE COUNT
2024 003144 341 POP H ; CLEAR STACK OF THE PSEUDO RETURN FIRST
2025
2026 ; FALL INTO END INTERRRUPT CODE IF CHAR COUNT OK
2027
2028 003145 341 ENDIN: POP H ; RESTORE REGS
2029 003146 321 POP D
2030 003147 301 POP B
2031 003150 361 POP PSW
2032 003151 373 EI ; INTERRUPTS BACK ON
2033 003152 311 RET ; AND OUT
2034
2035 ; AND ACCEPT LOWER CASE AS REQUESTED
2036
2037 003153 376 141 UP.LO: CPI ^O141 ; LOW CASE "A" OR BETTER?
2038 003155 370 RM ; IF MINUS, NOT LOW CASE, CONTINUE
2039 003156 376 173 CPI ^O173 ; LOW CASE "Z" OR WORSE?
2040 003160 360 RP ; IF POS, OR ZERO, ITS NOT LOW CASE RANGE
2041
2042 ; FALL INTO HERE IF IT WAS LOWER CASE....
2043
2044 003161 326 040 SUI ^O40 ; MAKE IT UPPER FOR ALL
2045 003163 311 RET ; AND OUT
2046
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 55
HCORE.M80 *INTERRUPT HANDLER*
2048
2049 ; CODE FOR END-OF-LINE CHAR TYPED IN
2050
2051 003164 EOMRK: PCRLF ; GIVE CR-LF
(2) 003164 347 RST 4
(2) 003165 002 .BYTE 2
2052
2053 003166 072 225 040 LDA CMCNT ; GET COUNT OF COMMAS
2054 003171 074 INR A ; UP BY ONE, FOR THE CR-LF
2055 003172 062 204 040 STA EOL ; AND SET EOL MARKER
2056 003175 257 XRA A ; CLEAR ACCUM
2057 003176 062 225 040 STA CMCNT ; SET LOCATION
2058 003201 057 CMA ; SET ACCUM = -1
2059 003202 311 RET ; RETURN
2060
2061 ; CODE FOR A RUB-OUT
2062
2063 003203 072 161 040 RUB: LDA BFCNT ; GET CURRENT CHAR COUNT
2064 003206 247 ANA A ; IS IT 0?
2065 003207 310 RZ ; GOOD, NOTHING TO DELETE
2066 003210 075 DCR A ; DECREMENT OTHERWISE
2067 003211 062 161 040 STA BFCNT ; AND PUT IT BACK
2068
2069 003214 053 DCX H ; AND BACK UP THE BUFFER PNTR
2070 003215 042 215 040 SHLD BUF. ; PUT IT BACK
2071 003220 PSLASH ; TYPE SLASH AS RUBOUT INDICATOR
(2) 003220 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 003221 057 .BYTE SLASH ; CHAR TO PRINT
2072 003222 176 MOV A,M ; GET CURRENT CHAR IN BUFFER
2073 003223 315 343 003 CALL PCHR ; ECHO WHAT WAS RUBBED OUT
2074 003226 376 054 CPI COMMA ; OH WAIT, WAS THAT A COMMA?
2075 003230 300 RNZ ; JMP IF NO, TAKE A NORMAL OUT
2076
2077 ; FALL THRU IF WAS A COMMA
2078
2079 003231 041 225 040 LXI H,CMCNT ; GET COMMA COUNT
2080 003234 065 DCR M ; DECREMENT
2081 003235 311 RET ; AN EXIT THIS PLACE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 56
HCORE.M80 *INTERRUPT HANDLER*
2083
2084 ; HERE IF USER MODE FLAG IS SET..
2085
2086 003236 376 034 USER: CPI CNBCK ; IS IT "^\"?
2087 003240 302 115 007 JNZ TENCHR ; IF NOT, THEN ITS A CHAR FOR THE KS-10
2088
2089 ; BEFORE WE LEAVE USER MODE, WE MUST CHECK THE CONSOLE ENABLE SWITCH
2090
2091 003243 333 301 END.USR: IN BOOTSW ; ***** I/O RD 301 ***** IS CONSOLE LOCKED UP??
2092
2093 ; BIT 2 IS "LO" IF CONSOLE ENABLE IS TRUE. IF BIT 2 IS "HI", WE ARE DISABLED
2094 ; DUE TO THE HARDWARE INVERSION OF SIGNAL LEVELS.
2095
2096 003245 346 004 ANI ^O4 ; CHECK BIT 2
2097 003247 300 RNZ ; IF HI, WE ARE DISABLED AND WILL IGNORE
2098
2099 ; IF YES, USER MODE MUST BE CLEARED
2100
2101 003250 CLRB NOPNT ; CLR NO PRINT FLAG IN CASE WE WERE IN "INTERNAL MODE"
2102 003252 315 305 006 CALL CLRUSE ; EXIT FROM USER MODE
2103 003255 PLINE RDYMS ; "ENABLED"
(1) 003255 337 RST 3 ; PRINT LINE OF CHARS
(1) 003256 274 006 .ADDR RDYMS ; BUFF TO PRINT
2104 003260 041 200 001 LXI H,REINI ; SET UP AN EXIT ADDRESS
2105 003263 321 IOUT: POP D ; CLEAR THE PSEUDO RETURN TO "ENDIN" FROM STACK
2106 003264 321 POP D ; CLEAR ORIGINAL SAVED "H,L" OFF STACK
2107 003265 321 POP D
2108 003266 301 POP B
2109 003267 361 POP PSW
2110 003270 063 INX SP ; NOW GET OLD RETURN ADDR OFF STACK
2111 003271 063 INX SP
2112
2113 003272 373 EI ; ENABLE INTS..
2114 003273 351 PCHL ; AND GO TO PROMPT
2115 003274 105 116 101 RDYMS: .ASCIZ /ENABLED\/
2116
2117 003305 CLRUSE: CLRB USRMD ; AND CLEAR THE USER MODE FLAG
2118 003307 072 251 040 LDA MMFLG ; BEFORE DROPPING USER, SEE IF IN MM MODE
2119 003312 247 ANA A ; SET 8080 FLAGS
2120 003313 310 RZ ; IF NOT MM MODE, OK TO GET OUT
2121
2122 ; IF WAS SET, MUST DROP BACK TO MODE 4
2123
2124 003314 315 037 034 CALL SETM4
2125 003317 315 052 004 CALL KCHR ; NON-PRINTING CHAR, ALSO TELLS HOST TO SWITCH MODES
2126 003322 034 .BYTE CNBCK ; "CONTROL-BACKSLASH IS THE MAGIC CHAR"
2127 003323 311 RET ; JUST LEAVE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 57
HCORE.M80 *INTERRUPT HANDLER*
2129
2130 ; CONTROL-Z CODE...ENTER USER MODE
2131
2132 003324 315 354 006 CNTZ: CALL SETUSE ; SET THE USER MODE
2133 003327 315 115 010 CALL BFRST ; BUFFER RESET..RE-INIT TTY INPUT BUFFER
2134
2135 ;THIS LINE WAS REMOVE BECAUSE IN PROTECT MODE TYPING A CONTROL-Z WOULD
2136 ;CAUSE THE PW TO BE QUERIED AGAIN AND WOULD NOT ALLOW THE KLINIK LINE TO
2137 ;ENTER DUPLICATE CTY MODE (MODE 3).
2138 ;
2139 ;(5.2A) CLRB KLNKSW ; FORCE LIGHTS FIXING AFTER ENTER USER
2140
2141 003332 PLINE U ; PRINT "USER MODE"
(1) 003332 337 RST 3 ; PRINT LINE OF CHARS
(1) 003333 343 006 .ADDR U ; BUFF TO PRINT
2142 003335 041 260 001 LXI H,NULLJ ; LOAD "H,L" WITH A PLACE TO GO
2143 003340 303 263 006 JMP IOUT ; AND GET OUT
2144 003343 125 123 122 U: .ASCIZ /USR MOD\/
2145
2146
2147 003354 SETUSE:
2148
2149 ; HERE IS THE DEPOSIT WORD 31 CODE..
2150
2151 003354 WRD31: INTON ; DON'T PRINT THIS STUFF
(1) 003354 327 RST 2 ; GO SET INTERNAL MODE
2152 003355 EXAM 31 ; MUST SAVE CURRENT STATE OF KA & RELOAD BITS
(1) 003355 315 202 030 CALL EXAMSH ; AND DO EXAM ASSUMING SHORT ADDRESS
(1) 003360 031 000 .ADDR 31 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
2153 003362 INTOFF ; ITS OK NOW
(1) 003362 367 RST 6 ; GO EXIT FROM INTERNAL MODE
2154 003363 072 255 040 LDA GOCODE ; BYTE 28-35 GETS THE REASON FOR RELOAD
2155 003366 041 047 040 LXI H,DMDAT ; MAKE H,L POINT TO THE DESIRED BUFFER
2156 003371 167 MOV M,A ; SET THE GOCODE BITS INTO THE BYTE "DMDAT"
2157
2158 003372 072 355 040 LDA TRAPEN ; NOW GRAB THE TRAP BIT
2159 003375 007 RLC ; AND SHIFT TO APPROPRIATE POSITION (20 TO 40)
2160 003376 007 RLC ; (40 TO 100)
2161 003377 007 RLC ; (100 TO 200)
2162 003400 107 MOV B,A ; SAVE IT IN B FOR A WHILE
2163
2164 003401 072 251 040 LDA MMFLG ; GET "MAINTENANCE MODE" FLAG
2165 003404 247 ANA A ; SET 8080 FLAGS
2166 003405 365 PUSH PSW ; SAVE THE STATE OF THE FLAGS FOR LATER USE
2167 003406 312 013 007 JZ WRD.PR ; IF NO MM MODE, DON'T SET A BIT
2168
2169 ; WAS MM MODE, MUST SET THE BIT
2170
2171 003411 076 100 MVI A,^O100 ; A BIT FOR MM MODE
2172 003413 260 WRD.PR: ORA B ; THROW TOGETHER WITH THE TRAP BIT
2173 003414 043 INX H ; PUT INTO THE DEPOSIT BUFFER
2174 003415 043 INX H
2175 003416 167 MOV M,A ; THIS IS LOC "DMDAT+2"
2176
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 57-1
HCORE.M80 *INTERRUPT HANDLER*
2177 003417 072 354 040 LDA PARBT ; NOW FOR THE SELECTION OF PARITY BITS
2178 003422 017 RRC ; RIGHT ONCE TO FREE UP 200 WEIGHT
2179 003423 107 MOV B,A ; SAVE IN B REG
2180 003424 072 247 040 LDA CSLMODE ; GET CURRENT KLINIK MODE
2181 003427 346 014 ANI .MODE2!.MODE3 ; IF EITHER OF THESE MODES, MUST SET THE BIT
2182 003431 312 036 007 JZ WRD.DP ; JUMP IF NOT THOSE BITS
2183
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 58
HCORE.M80 *INTERRUPT HANDLER*
2185
2186 ; HERE IF ONE OF THOSE MODES WAS SET
2187
2188 003434 076 100 MVI A,^O100 ; A BIT TO SET
2189
2190 003436 260 WRD.DP: ORA B ; THROW THIS BIT WITH THE OTHERS
2191 003437 017 RRC ; FINAL JUSTIFICATION
2192 003440 107 MOV B,A ; NOW SAVE THIS GOOD STUFF IN "B"
2193 003441 072 015 040 LDA EMBUF+3 ; GET THE BYTE THAT HAS CURRENT "KA" BIT
2194 003444 346 300 ANI ^O300 ; OFF EVERYTHING ELSE
2195 003446 260 ORA B ; NOW THROW WHOLE MESS TOGETHER AGAIN
2196
2197 003447 043 INX H ; BUMP POINTER TO "DMDAT+3"
2198 003450 167 MOV M,A ; AND PUT DATA INTO RAM
2199 003451 DEPOS 31 ; PUT INTO MOS MEMORY AT LOC 31
(1) 003451 247 ANA A ; CLR "C-BIT" FOR USE BY COMMON CODE
(1) 003452 315 203 030 CALL DEPSHT ; AND DO THE DEPOSIT ASSUMING SHORT ADDR
(1) 003455 031 000 .ADDR 31 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
2200 003457 CLRB GOCODE ; CLEAR THE RELOAD CODE
2201
2202 003461 361 POP PSW ; THIS WORD HAS FLAGS SET FROM BEFORE WHEN WE TESTED "MM"
2203 003462 076 377 MVI A,-1 ; FLAGS WON'T CHANGE WHILE WE SET USER MODE FLAG
2204 003464 062 156 040 STA USRMD ; SET USER MODE... NOW DO S/G BASED ON THE FLAGS
2205 003467 310 RZ ; IF NOT SET, A SIMPLE OUT
2206
2207 ; HERE IF SET, WE MUST SEND AN "ACK" DOWN KLINIK LINE BEFORE ANYTHING ELSE
2208
2209 003470 315 174 035 CALL ACK ; "ACK" DOWN THE KLINIK
2210 003473 303 070 034 JMP SETM2 ; ALSO SET MODE 2 AND USE HIS "RET" TO RETURN
2211
2212 ; TYPED "CONTROL-S" TO STOP CONSOLE OUTPUT
2213
2214 003476 041 162 040 CNTS: LXI H,STPPD ; POINTER TO STOPPED FLAG
2215 003501 176 MOV A,M ; GET THE FLAG
2216 003502 057 CMA ; SET .EQ. 0 IF WAS ALREADY SET
2217 003503 247 ANA A ; NOW SET FLAGS, 'CAUSE CMA DOESN'T
2218 003504 310 RZ ; IF .EQ. 0 NOW, MERELY LEAVE..ALREADY SET
2219
2220 003505 167 MOV M,A ; AND SET THE FLAG .EQ. -1 IF HERE
2221 003506 373 EI ; LET THE CNTL-Q THRU
2222
2223 003507 176 CNTSL: MOV A,M ; GET FLAG STATUS
2224 003510 247 ANA A ; IS IT SET?
2225 003511 310 RZ ; IF NOT,THEN TIME TO QUIT
2226 003512 303 107 007 JMP CNTSL ; STAY IN LOOP IF FLAG STILL SET
2227
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 59
HCORE.M80 *8080 TO KS10 CHARACTER SERVICE*
2229 .SBTTL *8080 TO KS10 CHARACTER SERVICE*
2230
2231 003515 062 035 040 TENCHR: STA CHRBUF ; PUT CHARACTER IN A RAM BUFFER
2232 003520 076 032 MVI A,^O32 ; DESIRED ADDRESS FOR DEPOSTING CHARACTER
2233
2234 003522 323 103 OUT A2835 ; WRITE ONLY RELEVANT PIECE OF THE ADDRESS
2235 003524 257 XRA A ; THEN CLR ACCUM
2236 003525 323 105 OUT A2027 ; AND CLR REST OF THE HARDWARE ADDRESS REGISTER
2237 003527 323 107 OUT A1219
2238 003531 323 106 OUT W1219 ; CLEAR PIECES OF DEPOSIT DATA WHICH MUST BE ZERO
2239 003533 323 110 OUT W0411
2240 003535 323 112 OUT W0003
2241
2242 003537 076 002 MVI A,02 ; BIT TO SAY "WRITE FUNCTION"
2243 003541 323 113 OUT A0003 ; ***** I/O WRT 113 *****
2244
2245 ; THE FOLLOWING "ADD A" WORKS BY LUCK..I.E. 2+2=4
2246
2247 003543 207 ADD A ; BIT INTO ACCUM FOR "COM/ADR CYCLE"
2248 003544 323 115 OUT BUSARB ; ***** I/O WRT 115/4 *****
2249
2250 003546 072 035 040 LDA CHRBUF ; NOW GET THE CHARACTER WE WANT
2251 003551 323 102 OUT W2835 ; PUT IT IN THE HARDWARE REGISTER
2252 003553 076 001 MVI A,1 ; AND GET THE VALID BIT TO GO WITH CHARACTER
2253 003555 323 104 OUT W2027 ; PUT IT IN THE HARDWARE REGISTER
2254
2255 ; AND BY LUCK, THE ACCUM HAS JUST WHAT WE NEED FOR THE NEXT STEP
2256
2257 003557 323 114 OUT DTARB ; ***** I/O WRT 114/1 *****
2258
2259 003561 076 360 MVI A,^O360 ; BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR
2260 ; COM/ADR", "T ENB FOR DATA CYCLE"
2261 003563 323 210 OUT BUSCTL ; *****I/O WRT 210/360 *****
2262
2263 ; DO THIS TWICE TO GUARANTEE THAT THE INTERRUPT HAPPENS
2264
2265 003565 076 001 MVI A,1 ; BIT FOR SETTING INTERRUPT TO THE KS10
2266 003567 323 116 OUT INT2KS ; SET THE INTERRUPT
2267 003571 323 116 OUT INT2KS ; SET THE INTERRUPT
2268
2269 003573 311 RET ; AND EXIT NORMALLY....
2270
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 60
HCORE.M80 *KS10 TO 8080 CHARACTER SERVICE*
2272 .SBTTL *KS10 TO 8080 CHARACTER SERVICE*
2273
2274 ; ENTER HERE WITH THE CHAR IN THE ACCUM. ROUTINE FOR HANDLING
2275 ; INTERRUPT CHARACTERS FROM A RUNNING KS10. ONLY CHARS FROM KS
2276 ; TO CTY IMPLEMENTED.
2277
2278 003574 CHRRDY: INTON ; SET UP INTERNAL MODE
(1) 003574 327 RST 2 ; GO SET INTERNAL MODE
2279 003575 363 DI ; COMMON CODE,NOT TO BE DISTURBED
2280
2281 ; DISABLE INTERRUPTS FOR THIS OPERATION
2282
2283 003576 072 355 040 LDA TRAPEN ; GET DEFAULT FOR THE TRAP ENABLE BITS
2284 003601 323 205 OUT DIAG ; *****I/O WRT/ TO CLR THE INTERRUPT*****
2285
2286 ; FALL TO HERE IF YES WE ARE IN KLINIK MODE 2. ITS POSSIBLE THAT THIS
2287 ; INTERRUPT IS FROM THE KLINIK COMM WORD, FOR THE KLINIK LINE.
2288
2289 003603 EXAM 35 ; EXAM THE KLINIK COMM WORD
(1) 003603 315 202 030 CALL EXAMSH ; AND DO EXAM ASSUMING SHORT ADDRESS
(1) 003606 035 000 .ADDR 35 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
2290 003610 INTOFF ; KEEP THIS FLAG IN STEP
(1) 003610 367 RST 6 ; GO EXIT FROM INTERNAL MODE
2291 003611 072 013 040 LDA EMBUF+1 ; GRAB CONTENTS OF THE BYTE WITH THE CONTROL KEY
2292 003614 247 ANA A ; SET 8080 FLAGS
2293 003615 312 273 007 JZ CTYONLY ; IF CONTROL KEY CLEAR, NOTHING FROM KLINIK, TRY CTY
2294
2295 003620 107 MOV B,A ; SAVE THE DATA IN THE ACCUM FOR A LITTLE WHILE
2296 003621 072 247 040 LDA CSLMODE ; GET CURRENT MODE. DECIDE IF HAVE TO DISCARD
2297 003624 346 013 ANI .MODE0!.MODE1!.MODE3 ; CHARS OR JUST ACT AS A NULL BIT BUCKET
2298 003626 302 265 007 JNZ NULKL ; JUMP TO A NULL ACTION IF ANY OF THESE 3 MODES
2299
2300 ; NOW HERE IF CONTROL KEY IS .NE. 0
2301
2302 003631 170 MOV A,B ; RETRIEVE DATA
2303 003632 376 001 CPI 1 ; IS IT THE KEY FOR A SIMPLE CHAR TO BE OUTPUT?
2304 003634 312 251 007 JZ KLPCHR ; IF YES, GO PROCESS THE CHARACTER
2305
2306 003637 376 002 CPI 2 ; IS IT FOR A HANGUP
2307 003641 302 022 010 JNZ NOACTN ; NOPE, IGNORE ENTIRELY
2308
2309 003644 315 121 034 CALL KILL.KLINIK ; (5.2A) YUP, HANG 'EM UP
2310 003647 373 EI ; IDENTICAL CODE TO LOCATION "NOACTN", BUT THE
2311 003650 311 RET ; 2 BYTES HERE ARE CHEAPER THAN A "JMP"
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 61
HCORE.M80 *KS10 TO 8080 CHARACTER SERVICE*
2313
2314 ; CODE FOR PRINTING THE DESIRED CHARACTER ON THE KLINIK LINE
2315
2316 003651 KLPCHR: TSTRDY REMCTL ; SEE IF THE LINE IS READY FOR THE NEXT CHAR
(1) 003651 333 203 IN REMCTL ; READ DESIRED UART STATUS
(1) 003653 346 001 ANI 01 ; CHECK IF SET? ZBIT=0/1 READY/NOT YET READY
2317 003655 312 251 007 JZ KLPCHR ; IF NOT READY YET, BETTER WAIT LONGER
2318
2319 ; HERE WHEN READY
2320
2321 003660 072 012 040 LDA EMBUF ; GET THE CHARACTER
2322 003663 323 202 OUT REMDAT ; PRINT IT
2323 003665 076 035 NULKL: MVI A,^O35 ; NOW MUST CLEAR WORD AND INTERRUPT TO SAY DONE
2324 003667 315 354 007 CALL TTOCOM ; (5.2A) GO COMMON CODE
2325 003672 363 DI ; KEEP INTERRUPTS OFF BECAUSE TTOCOM TURNED IT ON
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 62
HCORE.M80 *KS10 TO 8080 CHARACTER SERVICE*
2327
2328 003673 CTYONLY: INTON ; DON'T PRINT THIS CRUD
(1) 003673 327 RST 2 ; GO SET INTERNAL MODE
2329 003674 EXAM 33 ; GET THE COMMUNICATION WORD
(1) 003674 315 202 030 CALL EXAMSH ; AND DO EXAM ASSUMING SHORT ADDRESS
(1) 003677 033 000 .ADDR 33 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
2330 003701 INTOFF ; INTERNAL MODE OFF
(1) 003701 367 RST 6 ; GO EXIT FROM INTERNAL MODE
2331 003702 072 013 040 LDA EMBUF+1 ; GET THE INTERRUPT CODE
2332 003705 376 001 CPI 1 ; IS INTERRUPT CODE .EQ. 1?
2333 003707 302 022 010 JNZ NOACTN ; JUMP TO "NO ACTION" IF NOT, CODE OUT OF BOUNDS
2334
2335 003712 072 012 040 LDA EMBUF ; ACTUAL CHAR TO ACCUM
2336 003715 107 MOV B,A ; AND SAVE IT IN THE B REG
2337
2338 ; CODE TO PRINT A CHAR PASSED FROM THE KS-10 CPU. CODE INTERRUPTS
2339 ; THE 10 WHEN THE CHARACTER HAS FINISHED PRINTING
2340
2341 003716 CTYPCHR: TSTRDY CTYCTL ; CHECK IS THE XMITTER READY?
(1) 003716 333 201 IN CTYCTL ; READ DESIRED UART STATUS
(1) 003720 346 001 ANI 01 ; CHECK IF SET? ZBIT=0/1 READY/NOT YET READY
2342 003722 312 316 007 JZ CTYPCHR ; LOOP UNTIL IT IS
2343
2344 ; FALL THRU WHEN READY
2345 ; BUT BEFORE PRINTING, CHECK THE KLINIK LINE TO SEE IF IT GETS THE
2346 ; CHARACTER TOO.
2347 003725 072 247 040 LDA CSLMODE ; CHECK THE KLINIK MODE
2348 003730 376 010 CPI .MODE3 ; IS THE KLINIK PARALLEL TO THE CTY LINE?
2349 003732 302 347 007 JNZ CTYOUT ; JUMP IF NO. KLINIK DOES NOT GET THIS CHAR
2350
2351 ; FALL HERE IF YES, KLINIK LINE GETS A PIECE OF THIS CHARACTER TOO.
2352
2353 003735 KLTOO: TSTRDY REMCTL ; SEE IF KLINIK LINE IS READY
(1) 003735 333 203 IN REMCTL ; READ DESIRED UART STATUS
(1) 003737 346 001 ANI 01 ; CHECK IF SET? ZBIT=0/1 READY/NOT YET READY
2354 003741 312 335 007 JZ KLTOO ; IF NOT YET, GO BACK AND TRY AGAIN
2355
2356 003744 170 MOV A,B ; CHAR TO ACCUM
2357 003745 323 202 OUT REMDAT ; PRINT IT ON THE KLINIK LINE
2358
2359 003747 170 CTYOUT: MOV A,B ; GET THE CHAR WE SAVED IN THE B REG.
2360 003750 323 200 OUT CTYDAT ; SEND TO THE UART
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 63
HCORE.M80 *KS10 TO 8080 CHARACTER SERVICE*
2362
2363 ; NOW CLEAR A DATA BUFFER FOR DEPOSITING 0'S INTO THE MOS MEMORY.
2364 ; WE ARE USING IN-LINE CODE HERE IN ORDER TO SPEED UP THE TYPE-OUT
2365 ; ON KS10 TO 8080 XFER'S..
2366
2367 003752 076 033 MVI A,^O33 ; THIS IS THE ADDRESS WE WISH TO DEPOSIT
2368 003754 323 103 TTOCOM: OUT A2835 ; PUT IT INTO THE HARDWARE REGISTER
2369 003756 257 XRA A ; CLEAR ACCUM, BECAUSE REST OF ADDR MUST BE ZERO
2370 003757 323 105 OUT A2027 ; CLR THE OTHER HARDWARE REGISTERS
2371 003761 323 107 OUT A1219
2372 003763 323 102 OUT W2835 ; AND WE WILL MAKE ALL OF THE HARDWARE DATA REGS 0
2373 003765 323 104 OUT W2027
2374 003767 323 106 OUT W1219
2375 003771 323 110 OUT W0411
2376 003773 323 112 OUT W0003
2377
2378 003775 076 002 MVI A,02 ; BIT TO SAY "WRITE FUNCTION"
2379 003777 323 113 OUT A0003 ; ***** I/O WRT 113 *****
2380
2381 ; THIS "ADD A" WORKS BY LUCK..I.E. 2+2=4
2382
2383 004001 207 ADD A ; BIT INTO ACCUM FOR "COM/ADR CYCLE"
2384 004002 323 115 OUT BUSARB ; ***** I/O WRT 115/4 *****
2385
2386 004004 076 001 MVI A,1 ; BIT INTO ACCUM FOR "DATA CYCLE"
2387 004006 323 114 OUT DTARB ; ***** I/O WRT 114/1 *****
2388
2389 004010 076 360 MVI A,^O360 ; BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR
2390 ; COM/ADR", "T ENB FOR DATA CYCLE"
2391 004012 323 210 OUT BUSCTL ; *****I/O WRT 210/360 *****
2392
2393
2394 ; DO THIS TWICE TO GUARANTEE THE INTERRUPT GETS THRU
2395
2396 004014 076 001 POKE10: MVI A,1 ; BIT FOR SETTING INTERRUPT TO THE KS10
2397 004016 323 116 OUT INT2KS ; SET THE INTERRUPT
2398 004020 323 116 OUT INT2KS ; SET THE INTERRUPT
2399 004022 373 NOACTN: EI ; OK FOR INTERRUPTS NOW
2400 004023 311 RET ; AND OUT
2401
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 64
HCORE.M80 *TTY HANDLER FOR SPECIAL CHARACTERS*
2403 .SBTTL *TTY HANDLER FOR SPECIAL CHARACTERS*
2404
2405 ; WHEN HERE, "B" REG CONTAINS THE STATUS OF THE CTY LINE
2406
2407 004024 170 TTERR: MOV A,B ; COPY CTY STATUS TO ACCUM
2408 004025 346 070 ANI ^O70 ; ANY ERRS IN CTY UART?
2409 ; ANI ^O170 ; (5.2B WAS ^O70) ANY ERRS IN CTY UART?
2410 004027 302 046 010 JNZ TTERR1 ; IF YES, GO CHECK THINGS ON THE CTY LINE
2411
2412 ; HERE IF GOT KLINIK ERRORS
2413
2414 004032 076 025 MVI A,^O25 ; BEFORE JUMPING, RESET UART SO IT WILL WORK
2415 004034 323 203 OUT REMCTL ; I/O WRITE TO RESET THE UART
2416
2417 004036 072 156 040 LDA USRMD ; CHECK USER MODE. WILL NOT REPORT ERR IF IT IS
2418 004041 247 ANA A ; SET FLAGS
2419 004042 302 274 005 JNZ INTCH ; IF WAS USER MODE, IGNORE OVERRUN AND HANDLE CHAR
2420 004045 311 RET ; DONE INT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 65
HCORE.M80 *TTY HANDLER FOR SPECIAL CHARACTERS*
2422
2423 004046 346 150 TTERR1: ANI ^O150 ; SEE IF OVERRRUN OR A FATAL ERROR
2424
2425 ; NOW MUST CLR ERROR FROM THE UART FIRST
2426
2427 004050 076 025 MVI A,^O25 ; BITS TO CLR ERROR CONDITIONS IN UART
2428 004052 323 201 OUT CTYCTL ; *****I/O WRT 200/25 *****
2429 004054 302 066 010 JNZ TTERMS ; NOW JUMP IF FATAL
2430
2431 004057 072 156 040 LDA USRMD ; BEFORE ISSUING MESSAGE,IS USER MODE SET?
2432 004062 267 ORA A ; TEST USER MODE FLAG
2433 004063 302 274 005 JNZ INTCH ; IF YES, USER MODE, THEN IGNORE THE ERROR
2434
2435 ; NOW MUST CLR OVERRUN ERROR FROM THE UART
2436
2437 004066 TTERMS:
2438 ; ANI ^O100 ; (5.2B) SEE IF BREAK DETECT
2439 ; JZ TTERMZ ; (5.2B) NO - CONTINUE
2440 ; MVI A,^O125 ; (5.2B) YES - BITS TO CLR ERRORS IN UART
2441 ; OUT CTYCTL ; (5.2B) *****I/O WRT 200/125 *****
2442
2443 004066 041 247 040 TTERMZ: LXI H,CSLMODE ; GET CURRENT MODE OF KLINIK
2444 004071 116 MOV C,M ; SAVE IT IN C
2445 004072 066 000 MVI M,0 ; NOW CLEAR CSL MODE
2446 004074 345 PUSH H ; AND SAVE "H,L"
2447 004075 PLINE TTM ; OUTPUT THE ERROR MESSAGE
(1) 004075 337 RST 3 ; PRINT LINE OF CHARS
(1) 004076 023 037 .ADDR TTM ; BUFF TO PRINT
2448 004100 341 POP H ; AND RESTORE MEM POINTER
2449 004101 161 MOV M,C ; REPLACE CSL MODE AND GET OUT
2450 004102 311 RET ; AND RESTART NULL LOOP
2451
2452 004103 061 000 044 CNTC: LXI SP,RAMST+^O2000 ;GUARANTEE THAT CNTRL-C WINS
2453 004106 PCHAR UPARR
(1) 004106 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 004107 136 .BYTE UPARR ; CHAR TO PRINT
2454 004110 PCHAR CCHR
(1) 004110 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 004111 103 .BYTE CCHR ; CHAR TO PRINT
2455 004112 303 200 001 JMP REINI ; JUMP AWAY
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 66
HCORE.M80 *TTY HANDLER FOR SPECIAL CHARACTERS*
2457
2458 ; LOCAL SUBROUTINE TO RESET TTY INPUT BUFFER
2459
2460 004115 041 114 041 BFRST: LXI H,BUFBG ; BUFFER BEGINNING
2461 004120 042 215 040 SHLD BUF. ; RESET CURRENT BUFFER POINTER
2462 004123 042 227 040 SHLD FIRST ; RESET CMD POINTER
2463 004126 CLRB RPEND ; CLEAR REPEAT KILLER
2464 004130 CLRB CMDS.. ; SAY LINE IS DONE.. AT BEGINNING OF THINGS
2465 004132 CLRB BFCNT ; CLEAR CHAR COUNT
2466 004134 311 RET ; AND RETURN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 67
HCORE.M80 *TTY HANDLER FOR SPECIAL CHARACTERS*
2468
2469 ; THIS IS THE INITIAL MODE OF THE KLINIK LINE AFTER A POWER UP. ALSO,
2470 ; WHEN THE KLINIK LINE IS DISABLED, OR IN "PROTECT" MODE, BUT NO
2471 ; PASSWORD HAS BEEN SET BY THE OPERATOR.
2472
2473 004135 376 007 MODE0: CPI BELL ; NO ECHO IF RECEIVE BELL
2474 004137 310 RZ ; BELL, SO OUT
2475 004140 KLINE NOACCS ; PRINT A MESSAGE FOR THE KLINIK LINE ONLY
(1) 004140 315 072 004 CALL KLINE ; PRINT LINE OF CHARS
(1) 004143 337 037 .ADDR NOACCS ; BUFF TO PRINT
2476 004145 303 121 034 JMP KILL.KLINIK ; (5.2A) HANG UP SO REPEAT ?NA DON'T HANG SYSTM
2477
2478 ; THIS IS KLINIK MODE 1. THIS IS THE MODE OF THE KLINIK LINE WHENEVER
2479 ; THE FRONT PANEL SWITCH IS IN THE PROTECT POSITION, AND WE ARE WAITING
2480 ; FOR THE PASSWORD TO BE ENTERED.
2481
2482 004150 MODE1: KLINE QPW ; BEGIN BY PRINTING "PW:"
(1) 004150 315 072 004 CALL KLINE ; PRINT LINE OF CHARS
(1) 004153 345 037 .ADDR QPW ; BUFF TO PRINT
2483 004155 041 262 040 LXI H,PASSWORD ; GET ADDRESS OF PASSWORD (1ST CHARACTER)
2484 004160 042 125 040 SHLD APASS ; (5.2D) SAVE ADDRESS IN POINTER LOCATION
2485 004163 CLRB PNUM ; (5.2D) CLEAR PASSWORD CHARACTER COUNT
2486 004165 CLRB PWNOK ; (5.2D) CLEAR PASSWORD VALIDITY FLAG
2487
2488 ;THIS SECTION WAS THE OLD PW INIT SECTION WHICH IS REPLACE BY THE 3 LINES ABOVE
2489 ;
2490 ;(5.2D) LXI H,KPWBUF ; INITIALIZE BUFFER FOR SAVING TYPED PASSWORD
2491 ;(5.2D) SHLD KPWPNT ; SAVE IN THE BUFFER POINTER
2492 ;(5.2D)
2493 ;(5.2D) CLRB KPWCNT ; AND CLEAR THE PASSWORD CHARACTER COUNTER
2494
2495 004167 041 176 010 LXI H,PW.WAIT ; NOW ADDITIONAL KLINIK CHARS MUST DISPATCH TO
2496 004172 042 346 040 SHLD MODDIS ; THE PLACE THAT WAITS FOR A COMPLETE PASSWORD
2497 004175 311 RET ; END OF INTERRUPT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 68
HCORE.M80 *TTY HANDLER FOR SPECIAL CHARACTERS*
2499
2500 ;(5.2D) THIS SECTION HAS BEEN RECODED TO SAVE 20 - 30 BYTES, AND THE CODE
2501 ; REPLACING THIS IS BELOW THIS SECTION.
2502 ;
2503 ; THIS IS THE ENTRY POINT WHEN THE PERSON IS IN THE PROCESS OF TYPING THE
2504 ; PASSWORD. WE STORE THE PASSWORD AS IT IS TYPED, THEN WHEN DONE, WE WILL
2505 ; VERIFY THAT IT IS CORRECT.
2506 ;
2507 ;PW.WAIT: CPI CRCHR ; IS IT AN END OF LINE CHARACTER
2508 ; JZ PW.TST ; JUMP IF YES.. TIME TO VERIFY THE PASSWORD
2509 ;
2510 ; CALL UP.LO ; GENERATE ONLY UPPER CASE FOR PROGRAM INTERNALS
2511 ; MOV B,A ; SAVE THE CHAR IN B REG FOR A LITTLE BIT
2512 ;
2513 ; IF NOT END OF LINE, JUST ADD IT TO THE BUFFER OF CHARS THAT IS THE PASSWORD
2514 ;
2515 ; LDA KPWCNT ; FIRST THINGS FIRST, SEE HOW MANY CHARS IN BUFFER
2516 ; INR A ; UPDATE TO ACCOUNT FOR THIS ONE
2517 ; CPI 7 ; IS IT TOO MANY
2518 ; JZ PW.ERR ; JUMP IF YES. ITS A PASSWORD ERROR
2519 ; STA KPWCNT ; ELSE SAVE THE UPDATED COUNT AND CONTINUE
2520 ;
2521 ; LHLD KPWPNT ; GET THE BUFFER POINTER
2522 ; MOV M,B ; PUT THE CHARACTER IN THE BUFFER
2523 ; INX H ; UPDATE THE BUFFER POINTER
2524 ; SHLD KPWPNT ; PUT THE POINTER BACK
2525 ; RET ; AND END OF INTERRUPT
2526 ;
2527 ; CODE FOR VERIFYING THAT THE PASSWORD ENTERED IS THE CORRECT AND VALID
2528 ; PASSWORD.
2529 ;
2530 ;PW.TST:LXI D,PASSWORD ; D,E POINTS TO THE EXPECTED PASSWORD
2531 ; LXI H,KPWBUF ; H,L POINTS TO THE TYPED IN BUFFER
2532 ; MVI B,00 ; "B" WILL BE THE COUNTER
2533 ;
2534 ;PW..: LDAX D ; FETCH UP AN EXPECTED CHARACTER
2535 ; ANA A ; SET THE FLAGS
2536 ; JZ PW.END ; IF "END", GO MAKE SURE TYPEIN IS TERMINATED
2537 ;
2538 ; INR B ; ELSE UPDATE OUR COUNTER
2539 ; CMP M ; AND COMPARE A CHAR
2540 ; JNZ PW.ERR ; IF MIS-COMPARE REPORT IT AS ERROR
2541 ;
2542 ; INX D ; UPDATE EXPECTED POINTER
2543 ; INX H ; UPDATE TYPED IN POINTER
2544 ; JMP PW.. ; CONTINUE
2545 ;
2546 ; END.. THIS IS ONLY TO VERIFY THAT TYPED TERMINATED AT THE SAME NUMBER OF
2547 ; CHARACTERS AS EXPECTED.
2548 ;
2549 ;PW.END:LDA KPWCNT ; GET EXPECTED COUNT
2550 ; CMP B ; CHECK AGAINST THE CURRENT COUNT
2551 ; JZ PW.OK ; AND JUMP IF COUNTS MATCH
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 69
HCORE.M80 *TTY HANDLER FOR SPECIAL CHARACTERS*
2553
2554 ;(5.2D) THIS SECTION REPLACES THE PREVIOUS SECTION TO VERIFY THE CORRECTNESS
2555 ; OF A PASSWORD AS IT IS BEING ENTERED.
2556 ;
2557 ; THIS SECTION TAKES EACH CHARACTER OF THE PASSWORD AS IT IS BEING
2558 ; ENTERED AND COMPARES TO EXPECTED. IF ANY CHARACTER MISMATCHES
2559 ; OCCUR, AN ERROR FLAG IS SET.
2560
2561 004176 376 015 PW.WAIT:CPI CRCHR ; EOL CHARACTER?
2562 004200 312 242 010 JZ PW.TST ; YES - CHECK IF PW IS OK
2563 004203 315 153 006 CALL UP.LO ; NO - CONVERT TO UPPER CASE
2564
2565 ; COMPARE CHARACTER TYPED TO EXPECTED
2566
2567 004206 052 125 040 LHLD APASS ; GET ADDR OF PASSWORD (CURRENT CHARACTER)
2568 004211 276 CMP M ; COMPARE TO TYPED IN
2569 004212 043 INX H ; INCREMENT PW ADDR
2570 004213 042 125 040 SHLD APASS ; SAVE PW ADDR
2571 004216 312 225 010 JZ PWOK1 ; CHARACTER SAME? YES - CONTINUE
2572
2573 ; ERROR SEEN - SET ERROR FLAG
2574
2575 004221 041 127 040 LXI H,PWNOK ; GET ADDR OF PWNOK FLAG
2576 004224 064 INR M ; INCREMENT IT
2577
2578 ; CHECK IF OVER 6 CHARACTERS
2579
2580 004225 072 271 040 PWOK1: LDA PNUM ; GET CHARACTER COUNT
2581 004230 074 INR A ; UPDATE TO ACCOUNT FOR THIS ONE
2582 004231 376 007 CPI 7 ; SEVEN YET?
2583 004233 312 261 010 JZ PW.ERR ; YES - ERROR
2584 004236 062 271 040 STA PNUM ; SAVE CHARACTER COUNT
2585 004241 311 RET ; END OF INTERRUPT
2586
2587 ; CHECK IF OK
2588
2589 004242 052 125 040 PW.TST: LHLD APASS ; GET ADDR OF NEXT PW CHAR - SHOULD BE 0
2590 004245 176 MOV A,M ; LOAD CHAR INTO ACCUM
2591 004246 247 ANA A ; IS THIS 0? (IE. PW LENGTH OK?)
2592 004247 302 261 010 JNZ PW.ERR ; IF NOT - HANDLE PW ERROR
2593 004252 072 127 040 LDA PWNOK ; GET PW NOT OK FLAG
2594 004255 247 ANA A ; SET THE FLAGS
2595 004256 312 303 010 JZ PW.OK ; ZERO? - YES - PW OK - EXIT
2596
2597 ; FALL THRU TO ERROR IF CHARACTER COUNTS DON'T MATCH
2598
2599 004261 PW.ERR: KLINE CMDNG ; GIVE USER AN ERROR MESSAGE
(1) 004261 315 072 004 CALL KLINE ; PRINT LINE OF CHARS
(1) 004264 015 037 .ADDR CMDNG ; BUFF TO PRINT
2600 004266 041 277 040 LXI H,PWRTRY ; HAD ERROR. ONLY GET 3 CHANCES FOR ERRORS
2601 004271 064 INR M ; UPDATE ERROR COUNT
2602 004272 176 MOV A,M ; PLACE COUNT IN ACCUM FOR A TEST
2603 004273 376 003 CPI 3 ; SEE IF STRUCK OUT
2604 004275 312 316 010 JZ KLIRST ; GO RESET KLINIK LINE IF USER STRUCK OUT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 69-1
HCORE.M80 *TTY HANDLER FOR SPECIAL CHARACTERS*
2605
2606 004300 303 150 010 JMP MODE1 ; ELSE GIVE HIM "PW:" MESSAGE AGAIN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 70
HCORE.M80 *TTY HANDLER FOR SPECIAL CHARACTERS*
2608
2609 ; HERE IF EVERYTHING MATCHED
2610
2611 004303 315 070 034 PW.OK: CALL SETM2 ; CHANGE LINE TO MODE 2
2612 004306 KLINE POKMSG ; WHEN GOOD PW, SEND OUT AN "OK"
(1) 004306 315 072 004 CALL KLINE ; PRINT LINE OF CHARS
(1) 004311 353 037 .ADDR POKMSG ; BUFF TO PRINT
2613
2614 004313 PW.OUT: CLRB PWRTRY ; CLEAR ERROR COUNTER
2615 004315 311 RET ; EXIT
2616
2617 ; KLINIK LINE RESET CODE. FOR RESETING KLINIK LINE AND HANGING UP THE USER
2618
2619 004316 315 123 034 KLIRST: CALL HANGUP ; GO HANG UP THE KLINIK LINE
2620 004321 315 375 033 CALL SETM1 ; DROP BACK TO MODE 1
2621 004324 303 313 010 JMP PW.OUT ; ZAP ERROR FLAG THEN OUT
2622
2623 ; KLINIK LINE MODE 2. THIS IS STREAM INPUT/OUTPUT. ALL CHARACTERS FROM
2624 ; THE KLINIK UART ARE SENT TO THE SPECIAL KLINIK COMMUNICATION WORDS AND
2625 ; ALL WORDS FROM THE KLINIK COMM WORDS ARE OUTPUT TO THE KLINIK LINE.
2626
2627 004327 376 034 MODE2: CPI CNBCK ; FIRST SEE IF KLINIK USER WANTS A MODE CHANGE
2628 004331 302 357 010 JNZ KL3435 ; IF NOT, GO SEND INFO TO THE KLINIK COMM WORD
2629
2630 004334 072 251 040 LDA MMFLG ; BEFORE GOING TO MODE 3, SEE IF MM MODE
2631 004337 247 ANA A ; SET 8080 FLAGS
2632 004340 302 243 006 JNZ END.USR ; IF YES, MM MODE, ACT LIKE FROM A CTY
2633
2634 ; FALL THRU IF WANTS TO CHANGE MODES. BUT BEFORE CHANGING, CHECK IF HE'S
2635 ; ALLOWED TO CHANGE MODES.
2636
2637 004343 072 300 040 LDA KLLINE.ON ; CHECK IF KLINIK ON, & USER ALLOWED TO CHANGE
2638 004346 247 ANA A ; SET FLAGS
2639 004347 310 RZ ; IF NOT ENABLED TO CHANGE, IGNORE THIS INTRPT
2640
2641 ; WELL, HE IS ALLOWED TO CHANGE. SEE IF THE FRONT PANEL SWITCH IS UNLOCKED
2642
2643 004350 333 301 IN BOOTSW ; ***** I/O RD 301 *****
2644
2645 ; NOTE THAT BIT LO IS TRUTH, IF BIT HI IS FALSE(DISABLED)
2646
2647 004352 346 004 ANI 4 ; CHECK THE CONSOLE ENABLE BIT
2648 004354 312 027 034 JZ SETM3 ; GO MODE 3 ONLY IF PANEL NOT LOCKED.
2649 ; LET SETM3 DO "RET"
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 71
HCORE.M80 *TTY HANDLER FOR SPECIAL CHARACTERS*
2651
2652 ; THIS IS WHERE YOU ACTUALLY WRITE THE DESIRED CHARACTER INTO THE KLINIK
2653 ; LINE COMMUNICATION WORD.
2654
2655 004357 KL3435:
2656 004357 062 035 040 STA CHRBUF ; PUT CHARACTER IN A RAM BUFFER
2657 004362 076 034 MVI A,^O34 ; DESIRED ADDRESS FOR DEPOSTING CHARACTER
2658
2659 004364 323 103 OUT A2835 ; WRITE ONLY RELEVANT PIECE OF THE ADDRESS
2660 004366 257 XRA A ; THEN CLR ACCUM
2661 004367 323 105 OUT A2027 ; AND CLR THE REST OF THE HARDWARE ADDR REG
2662 004371 323 107 OUT A1219
2663 004373 323 106 OUT W1219 ; CLEAR PIECES OF DEPOSIT DATA WHICH MUST BE ZERO
2664 004375 323 110 OUT W0411
2665 004377 323 112 OUT W0003
2666
2667 004401 076 002 MVI A,02 ; BIT TO SAY "WRITE FUNCTION"
2668 004403 323 113 OUT A0003 ; ***** I/O WRT 113 *****
2669
2670 ; THE FOLLOWING "ADD A" WORKS BY LUCK..I.E. 2+2=4
2671
2672 004405 207 ADD A ; BIT INTO ACCUM FOR "COM/ADR CYCLE"
2673 004406 323 115 OUT BUSARB ; ***** I/O WRT 115/4 *****
2674
2675 004410 072 035 040 LDA CHRBUF ; NOW GET THE CHARACTER WE WANT
2676 004413 323 102 OUT W2835 ; PUT IT IN THE HARDWARE REGISTER
2677 004415 076 001 MVI A,1 ; AND GET THE VALID BIT TO GO WITH THE CHARACTER
2678 004417 323 104 OUT W2027 ; PUT IT IN THE HARDWARE REGISTER
2679
2680 ; AND BY LUCK, THE ACCUM HAS JUST WHAT WE NEED FOR THE NEXT STEP
2681
2682 004421 323 114 OUT DTARB ; ***** I/O WRT 114/1 *****
2683
2684 004423 076 360 MVI A,^O360 ; BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR
2685 ; COM/ADR", "T ENB FOR DATA CYCLE"
2686 004425 323 210 OUT BUSCTL ; *****I/O WRT 210/360 *****
2687
2688 ; DO THIS TWICE TO GUARANTEE THAT THE INTERRUPT HAPPENS
2689
2690 004427 076 001 MVI A,1 ; BIT FOR SETTING INTERRUPT TO THE KS10
2691 004431 323 116 OUT INT2KS ; SET THE INTERRUPT
2692 004433 323 116 OUT INT2KS ; SET THE INTERRUPT
2693
2694 004435 311 RET ; AND EXIT NORMALLY....
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 72
HCORE.M80 *TTY HANDLER FOR SPECIAL CHARACTERS*
2696
2697 ;>>;WCMDS.M80
2698 .SBTTL *CONSOLE COMMANDS AS IMPLEMENTED*
2699 .SBTTL *"EB" CMD*
2700
2701 ; THIS CODE PERFORMS THE "EXAMINE BUS" CONSOLE FUNCTION.
2702
2703 004436 076 001 EBCMD: MVI A,01 ; FIRST CLR "R CLK ENB"
2704 004440 323 210 OUT BUSCTL ; ***** I/O WRT 210/001 *****
2705 004442 315 070 033 CALL RDATT ; ***** I/O RD "0,1,2,3,103" (READ BITS 0-35) *****
2706 004445 012 040 .ADDR EMBUF ; PLACE BITS 0-35 INTO RAM BUFFER AREA "EMBUF"
2707
2708 ; READ THE REST OF THE I/O REGISTERS AND SAVE IN THE RAM
2709
2710 004447 041 172 040 LXI H,RM100 ; GET BEGINNING ADDRESS OF RAM BUFFER AREA
2711 004452 021 153 011 LXI D,IORGS ; D,E WILL POINT TO SOURCE OF REGS TO BE READ
2712 004455 006 010 MVI B,8 ; THERE ARE 8 REGISTERS TO BE READ
2713
2714 004457 032 EB.RDIN: LDAX D ; FETCH UP FIRST REGISTER TO BE READ
2715 004460 315 212 013 CALL ER.UTL ; CALL ER COMMAND
2716 004463 167 MOV M,A ; COPY RESULTS OF READ INTO THE RAM SPACE
2717 004464 023 INX D ; UPDATE SOURCE POINTER
2718 004465 043 INX H ; UPDATE DESTINATION POINTER
2719 004466 005 DCR B ; DOWN THE COUNTER
2720 004467 362 057 011 JP EB.RDIN ; CONTINUE LOOP
2721
2722 004472 257 XRA A ; CLR ACCUM MUST SET "R CLK ENB"
2723 004473 323 210 OUT BUSCTL ; ***** I/O WRT 210/0 *****
2724
2725 004475 PLINE EBHED ; EB CMD HEADER MSG
(1) 004475 337 RST 3 ; PRINT LINE OF CHARS
(1) 004476 030 037 .ADDR EBHED ; BUFF TO PRINT
2726 004500 315 174 034 CALL DECNET ; PRINT THE HEADING
2727 004503 315 333 030 CALL P36. ; GO PRINT IT
2728 004506 PCRLF ; AND A <CR><LF>
(2) 004506 347 RST 4
(2) 004507 002 .BYTE 2
2729 004510 315 174 034 CALL DECNET ; AND MAKE SURE THIS GETS SENT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 73
CMDS.M80 *"EB" CMD*
2731
2732 004513 041 153 011 LXI H,IORGS ; "H,L" NOW PNTS TO LIST OF I/O REGISTER NAMES
2733 004516 021 172 040 LXI D,RM100 ; "D,E" NOW PNTS TO CORRESPONDING LIST OF DATA FOR I/O REG
2734 004521 006 010 MVI B,8 ; ACCUM NOW CONTAINS A COUNT OF 8 (FOR 8 I/O REGS)
2735
2736 004523 315 240 030 EB1: CALL P8BIT ; PRINT FIRST REG NAME
2737 004526 043 INX H ; BUMP TO NEXT
2738 004527 PSLASH ; PRINT "1"
(2) 004527 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 004530 057 .BYTE SLASH ; CHAR TO PRINT
2739 004531 353 XCHG ; SWAP SO "H,L" POINTS TO DATA
2740
2741 004532 315 240 030 CALL P8BIT ; PRINT DATA FOR THAT REG
2742 004535 043 INX H ; BUMP TO NEXT
2743 004536 353 XCHG ; SWAP BACK-"H,L" POINTS TO NAME AGAIN
2744 004537 PSPACE ; SPACE OVER
(2) 004537 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 004540 040 .BYTE SPACE ; CHAR TO PRINT
2745 004541 005 DCR B ; DOWN COUNT
2746 004542 302 123 011 JNZ EB1 ; CONTINUE TILL DONE ALL EIGHT REGS
2747 004545 PCRLF
(2) 004545 347 RST 4
(2) 004546 002 .BYTE 2
2748 004547 315 174 034 CALL DECNET ; AND FINALLY MAKE SURE LAST THING GETS SENT
2749 004552 ENDCMD ; END-OF-COMMAND
(1) 004552 311 RET ; RETURN TO CALLER
2750
2751 ; END THIS CODE WITH A 6 BYTE BUFFER OF THE I/O REGS NAMES, IN BINARY
2752
2753 004553 100 IORGS: .BYTE ^O100 ; FIRST REG NAME IN BINARY
2754 004554 101 .BYTE ^O101 ; 2ND
2755 004555 102 .BYTE ^O102 ; 3RD
2756 004556 103 .BYTE ^O103 ; 4TH
2757 004557 300 .BYTE ^O300 ; 5TH
2758 004560 301 .BYTE ^O301 ; 6TH
2759 004561 302 .BYTE ^O302 ; 7TH
2760 004562 303 .BYTE ^O303 ; 8TH
2761
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 74
CMDS.M80 *** "DB" CMD ***
2763 .SBTTL *** "DB" CMD ***
2764
2765 ; THIS CODE PERFORMS THE "DEPOSIT BUS" CONSOLE FUNCTION
2766
2767 004563 DBCMD: RUN.. ; IS CPU RUNNING?
(1) 004563 347 RST 4
(1) 004564 006 .BYTE 6
2768 004565 332 174 011 JC DB1 ; SKIP CODE IF AT END OF COMMAND
2769 004570 ARG36 ; IF NOT, GO ASSEMBLE ARG.
(1) 004570 347 RST 4
(1) 004571 010 .BYTE 8
2770 004572 042 040 .ADDR BUSAD ; AND PUT INTO BUFFER "BUS AD"
2771
2772 004574 315 165 033 DB1: CALL ADATT ; ***** I/O WRT TO R DATA 0-35 DATA REG(ODDS) *****
2773 004577 042 040 .ADDR BUSAD ; BUFFER ADDRESS OF SOURCE OF DATA
2774
2775 004601 257 XRA A ; CLR ACCUM SO CAN CLR I/O REG 115
2776 004602 323 115 OUT BUSARB ; ***** I/O WRT 115/0 *****
2777
2778 004604 076 141 MVI A,^O141 ; BITS TO SET "CONSOLE REQ" & "T ENB FOR COM/ADR"
2779 004606 323 210 OUT BUSCTL ; ***** I/O WRT 210/141 *****
2780
2781 004610 BUSRESP ARBRESP ; ***** I/O READ 301 *****
(1) 004610 315 231 032 CALL BUSRESP ; DO A CALL TO EXECUTE THIS CODE
(1) 004613 020 .BYTE ARBRESP ; BITS TO BE CHECKED
2782 004614 302 011 036 JNZ NOARB ; IF NO ARB RESPONSE WITH "BUS REQ", ABORT
2783
2784 004617 315 276 011 CALL DBRDIN ; GO READ RESULTS, AND DO A 36-BIT COMPARE
2785 004622 302 313 011 JNZ DBERR ; IF "Z-BIT" NOT SET REPORT MISCOMPARE & ABORT
2786
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 75
CMDS.M80 *** "DB" CMD ***
2788
2789 ; SECOND HALF OF COMMAND
2790
2791 004625 315 165 033 CALL ADATT ; CLR OUT OLD CRUD
2792 004630 333 016 .ADDR MAD000 ; WITH ALL ZEROES
2793
2794 004632 315 132 033 CALL WDATT ; ***** I/O WRT DATA 0-35 ADDR REG(EVENS) *****
2795 004635 042 040 .ADDR BUSAD ; BUFFER ADDRESS OF SOURCE OF DATA
2796
2797 004637 076 001 MVI A,01 ; BITS TO SET "DATA CYCLE"
2798 004641 323 114 OUT ^O114 ; ***** I/O WRT 114/1 *****
2799
2800 004643 076 363 MVI A,^O363 ; BITS FOR "CONSOLE REQ", "TENB FOR COM/AD R"
2801 ; "T ENB FOR DATA CYCLE","LATCH DATA SENT"
2802 004645 323 210 OUT BUSCTL ; ***** I/O WRT 210/363 *****
2803
2804 004647 BUSRESP ARBRESP ; ***** I/O RD 301 *****
(1) 004647 315 231 032 CALL BUSRESP ; DO A CALL TO EXECUTE THIS CODE
(1) 004652 020 .BYTE ARBRESP ; BITS TO BE CHECKED
2805
2806 004653 302 011 036 JNZ NOARB ; IF NO ARB RESP, ABORT WITH 2ND HALF MESSAGE
2807
2808 004656 BUSRESP DATACK ; HOW ABOUT DATA ACKNOWLEDGE?
(1) 004656 315 231 032 CALL BUSRESP ; DO A CALL TO EXECUTE THIS CODE
(1) 004661 001 .BYTE DATACK ; BITS TO BE CHECKED
2809 004662 312 377 035 JZ NOACK ; JUMP IF NONE
2810
2811 004665 315 276 011 CALL DBRDIN ; GO READ IN RESULTS AND COMPARE RESULT
2812 004670 310 RZ ; IF Z-BIT, THEN OK TO EXIT
2813
2814 ; ELSE FALL INTO THIS CODE IF A MISCOMPARE
2815
2816 004671 PCHAR DCHR ; PRINT "D"
(1) 004671 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 004672 104 .BYTE DCHR ; CHAR TO PRINT
2817 004673 303 315 011 JMP DBCOM ; AND NOW THE ERR FINISHES UP LIKE THE 1ST HALF
2818
2819 ; COMMON SUBROUTINE TO READ IN THE CONTENTS OF THE KS10 BUS & COMPARE AGAINST
2820 ; THE DATA WHICH WAS PUT ONTO THE BUS.
2821
2822 004676 315 070 033 DBRDIN: CALL RDATT ; ***** I/O RD 0,1,2,3,103 *****
2823 004701 100 040 .ADDR TMPB2 ; PLACE TO PUT RDATA 0-35
2824
2825 004703 315 016 033 CALL CMP36 ; CHECK DATA JUST READ VS. DATA SENT
2826 004706 042 040 .ADDR BUSAD ; SENT DATA
2827 004710 100 040 .ADDR TMPB2 ; RECEIVED DATA
2828 004712 311 RET ; DONE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 76
CMDS.M80 *** "DB" CMD ***
2830
2831 ; "DB" COMMAND CODE FOR THE CASES WHERE DATA DEPOSITED ON THE BUS IS NOT
2832 ; THE SAME AS THE DATA READ BACK FROM THE BUS.. BY THE WAY...RIGHT NOW
2833 ; THIS IS PRETTY SLOPPY CODE....
2834
2835 004713 DBERR: PCHAR CCHR ; PRINT A "C"
(1) 004713 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 004714 103 .BYTE CCHR ; CHAR TO PRINT
2836 004715 DBCOM: PLINE MSG10 ; "?C CYC"
(1) 004715 337 RST 3 ; PRINT LINE OF CHARS
(1) 004716 051 037 .ADDR MSG10 ; BUFF TO PRINT
2837
2838 004720 041 042 040 LXI H,BUSAD ; ADDR OF 36-BIT DATA
2839 004723 315 336 030 CALL P36 ; NOW PRINT THAT DATA
2840
2841 004726 PLINE DRCVD ; "RECEIVED DATA"
(1) 004726 337 RST 3 ; PRINT LINE OF CHARS
(1) 004727 064 037 .ADDR DRCVD ; BUFF TO PRINT
2842
2843 004731 041 100 040 LXI H,TMPB2 ; THIS IS ADDR OF RECEIVED DATA
2844 004734 315 336 030 CALL P36 ; PRINT THAT 36-BIT DATA
2845 004737 PCRLF ; AND CR-LF
(2) 004737 347 RST 4
(2) 004740 002 .BYTE 2
2846 004741 041 004 000 LXI H,4 ; PASS ERROR CODE BEFORE EXIT
2847 004744 303 005 036 JMP ERRRTN ; GO FINISH WITH THE ERROR CODE
2848
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 77
CMDS.M80 *** "EM" CMD ***
2850 .SBTTL *** "EM" CMD ***
2851
2852 ; THIS IS THE ACTUAL "EM" COMMAND CODE
2853
2854 004747 332 355 011 EMCMD: JC EM1 ; SKIP CODE IF AT END OF COMMAND
2855 004752 315 043 013 CALL LACMD ; GO FETCH UP AN ADDRESS TO EXAMINE
2856
2857 004755 257 EM1: XRA A ; CLEAR ACCUM
2858 004756 062 031 040 STA ENEXT ; AND SET SO "EN " CMD WILL KNOW WHAT TO DO
2859
2860 004761 021 017 040 EM2: LXI D,MEMAD ; ADDRESS FOR MEMORY LOC.
2861
2862 004764 076 004 EMINT: MVI A,04 ; BIT TO SAY "READ FUNCTION"
2863
2864 004766 107 EN2ND: MOV B,A ; SAVE FUNCTION DATA
2865 004767 353 XCHG ; DATA POINTER TO "H,L"
2866 004770 042 205 040 SHLD AM.AI ; STORE FOR LATER USE BY COMMON CODE
2867 004773 353 XCHG ; RESTORE "D,E"
2868 004774 315 172 033 CALL ADATP ; ***** I/O WRT 103,105,107,111,113 *****
2869
2870 004777 170 MOV A,B ; GET FUNCTION
2871 005000 323 113 EM.CRM: OUT A0003 ; ***** I/O WRT 113/4 *****
2872
2873 ; NOW SET "COM/ADR" CYCLE
2874
2875 005002 076 004 MVI A,^O04 ; BIT TO SET COM/ADR CYC
2876 005004 323 115 OUT BUSARB ; ***** I/O WRT 115/4 *****
2877
2878 ; CHECK IF DOING EI OR EM
2879
2880 005006 072 163 040 LDA EIFLAG ; GET THE EI FLAG
2881 005011 247 ANA A ; SET CODES, IF .NE. 0, THEN IT IS AN EI CODE
2882 005012 302 017 012 JNZ EMCONT ; AND IF WAS EI, GO DO IT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 78
CMDS.M80 *** "EM" CMD ***
2884
2885 ; OTHERWISE JUST FALL THRU AND USE THE DM CODES
2886
2887 005015 076 343 MVI A,^O343 ; BITS FOR "CHECK NXM","CONSOLE REQ","T ENB FOR
2888 ; COM/ADR","LATCH DATA SENT"," R CLK DISABLE"
2889 005017 323 210 EMCONT: OUT BUSCTL ; ***** I/O WRT 210/343 *****
2890
2891 005021 257 XRA A ; CLEAR THE ACCUM
2892 005022 062 163 040 STA EIFLAG ; CLEAR FLAG ON THE WAY OUT
2893
2894 005025 BUSRESP ARBRESP ; ***** I/O RD 301 *****
(1) 005025 315 231 032 CALL BUSRESP ; DO A CALL TO EXECUTE THIS CODE
(1) 005030 020 .BYTE ARBRESP ; BITS TO BE CHECKED
2895 005031 302 011 036 JNZ NOARB ; IF GET NO "BUS REQ", ARB FAILED SO ABORT
2896
2897 005034 BUSRESP NONXMEM ; ***** I/O RD 301 *****
(1) 005034 315 231 032 CALL BUSRESP ; DO A CALL TO EXECUTE THIS CODE
(1) 005037 100 .BYTE NONXMEM ; BITS TO BE CHECKED
2898 005040 302 025 036 JNZ NIXOM ; JUMP IF NON-EXISTANT MEM FLAG IS SET
2899
2900 ; NOW MUST WAIT FOR "DATA ACKNOWLEDGE" FROM MEMORY
2901
2902 005043 BUSRESP DATACK ; ***** I/O RD 301 *****
(1) 005043 315 231 032 CALL BUSRESP ; DO A CALL TO EXECUTE THIS CODE
(1) 005046 001 .BYTE DATACK ; BITS TO BE CHECKED
2903 005047 312 377 035 JZ NOACK ; JMP IF NO "DATA ACK" (BUS HAS 15 USEC TO RESPOND)
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 79
CMDS.M80 *** "EM" CMD ***
2905
2906 ; HERE IF "DATA ACKNOWLEDGE" RECEIVED..GET RESULTS & PRINT
2907
2908 005052 021 012 040 LXI D,EMBUF ; PLACE TO PUT RECEIVED DATA
2909 005055 315 075 033 CALL RDATP ; ***** I/O RD 0,1,2,3,103 *****
2910
2911 005060 257 XRA A ; SET ACCUM .EQ. 0 FOR "R CLK ENABLE"
2912 005061 323 210 OUT BUSCTL ; ***** I/O WRT 210/0 *****
2913
2914 005063 072 120 040 LDA NOPNT ; GET THE PRINT FLAG
2915 005066 247 ANA A ; SET CONDITION CODES
2916 005067 300 RNZ ; AND DON'T WASTE TIME IF NOT PRINTING
2917
2918 005070 052 205 040 LHLD AM.AI ; GET POINTER TO MEM ADDR JUST EXAMINED
2919 005073 315 336 030 CALL P36 ; PRINT IT
2920
2921 005076 PSLASH ; PRINT "/"
(2) 005076 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 005077 057 .BYTE SLASH ; CHAR TO PRINT
2922 005100 315 333 030 CALL P36. ; AND PRINT IT
2923 005103 PCRLF ; CR-LF
(2) 005103 347 RST 4
(2) 005104 002 .BYTE 2
2924 005105 ENDCMD ; ALL DONE
(1) 005105 311 RET ; RETURN TO CALLER
2925
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 80
CMDS.M80 *** "EN" CMD ***
2927 .SBTTL *** "EN" CMD ***
2928
2929 ; ACTUAL CODE FOR "EN" CMD
2930
2931 005106 315 051 033 ENEM: CALL INC36 ; ADD 1 TO 36-BIT BUFFER
2932 005111 017 040 .ADDR MEMAD ; THIS IS THE BUFFER TO INCREMENT
2933 005113 303 355 011 JMP EM1 ; AND NO GO PROCESS JUST LIKE "EM" CMD
2934
2935 ; EXAMINE NEXT WILL DO THE NEXT, SAME AS THE LAST
2936
2937 005116 052 031 040 ENCMD: LHLD ENEXT ; GET INDEX FOR WHICH EXAMINE IS NEXT
2938 005121 021 132 012 LXI D,ENLST ; GET PNTR TO DISPATCH LIST
2939 005124 031 DAD D ; AND NOW ADD "WHICH" EXAMINE
2940 005125 136 MOV E,M ; GET LO ORDER PIECE
2941 005126 043 INX H ; UPDATE MEM PNTR
2942 005127 126 MOV D,M ; GET HI ORDER PIECE
2943 005130 353 XCHG ; PUT THIS NEW ADDR INTO "H,L"
2944 005131 351 PCHL ; AND TAKE THE DISPATCH
2945
2946 005132 106 012 ENLST: .ADDR ENEM ; DISPATCH FOR EXAM MEM CMD
2947 005134 324 012 .ADDR ENEI ; DISPATCH FOR EXAM I/O CMD
2948 005136 031 013 .ADDR ENEK ; DISPATCH FOR EXAM KONSOLE CMD
2949 005140 026 016 .ADDR ENEC ; DISPATCH FOR EXAM CRAM CMD
2950
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 81
CMDS.M80 *** "DM" CMD ***
2952 .SBTTL *** "DM" CMD ***
2953 .SBTTL *** "DN" CMD ***
2954
2955 ; DEPOSIT MEMORY ACTUAL COMMAND CODE
2956
2957 005142 315 051 033 DNDM: CALL INC36 ; INCREMENT MEMORY ADDRESS
2958 005145 017 040 .ADDR MEMAD ; HERE IS CURRENT MEMORY ADDRESS
2959 005147 DMCMD: ARG36 ; OTHERWISE, ASSEMBLE THE ARG
(1) 005147 347 RST 4
(1) 005150 010 .BYTE 8
2960 005151 047 040 .ADDR DMDAT ; PLACE TO PUT ASSEMBLED DATA
2961
2962 005153 257 DM1: XRA A ; 0 IS THE INDEX FOR MEM NEXT CMDS
2963 005154 062 033 040 STA DNEXT ; SAVE SO "NEXT" COMMAND WILL KNOW WHAT TO DO
2964
2965 005157 021 017 040 DM2: LXI D,MEMAD ; PNTR TO SM10 MEMORY ADDRESS
2966
2967 005162 076 002 DMINT: MVI A,02 ; BIT TO SAY "WRITE FUNCTION"
2968
2969 005164 107 DN2ND: MOV B,A ; SAVE FUNCTION STATUS
2970 005165 315 172 033 CALL ADATP ; ***** I/O WRT 103,105,107,111,113 *****
2971
2972 005170 170 MOV A,B ; GET FUNCTION DATA
2973 005171 323 113 OUT A0003 ; ***** I/O WRT 113 *****
2974
2975 005173 076 004 MVI A,04 ; BIT INTO ACCUM FOR "COM/ADR CYCLE"
2976 005175 323 115 OUT BUSARB ; ***** I/O WRT 115/4 *****
2977
2978 005177 315 132 033 CALL WDATT ; ***** I/O WRT 102,104,106,110,112 *****
2979 005202 047 040 .ADDR DMDAT ; PLACE TO GET DATA FOR DEPOSIT
2980
2981 005204 076 001 MVI A,01 ; BIT INTO ACCUM FOR "DATA CYCLE"
2982 005206 323 114 OUT DTARB ; ***** I/O WRT 114/1 *****
2983
2984 ; CHECK TO SEE IF DOING DI OR DM
2985
2986 005210 072 164 040 LDA DIFLAG ; GET THE FLAG
2987 005213 247 ANA A ; SET THE CONDITION CODES
2988 005214 302 221 012 JNZ DMCONT ; IF .NE. 0, THEN YOU GOT THE CODE FOR A DI
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 82
CMDS.M80 *** "DN" CMD ***
2990
2991 ; OTHERWISE, FALL THRU TO DO A DM
2992
2993 005217 076 362 DMGO: MVI A,^O362 ; BITS FOR "CHECK NXM","CONSOLE REQ","T ENB
2994 ; FOR COM/ADR","T ENB FOR DATA CYCLE"
2995 ; (LATCH DATA SENT PREVENTS FALSE PAR ERR)
2996 005221 323 210 DMCONT: OUT BUSCTL ; *****I/O WRT 210/362 *****
2997
2998 005223 257 XRA A ; CLEAR THE ACCUM
2999 005224 062 164 040 STA DIFLAG ; AND CLEAR THE FLAG
3000
3001 005227 BUSRESP ARBRESP ; ***** I/O RD 301 *****
(1) 005227 315 231 032 CALL BUSRESP ; DO A CALL TO EXECUTE THIS CODE
(1) 005232 020 .BYTE ARBRESP ; BITS TO BE CHECKED
3002 005233 302 011 036 JNZ NOARB ; IF NO "BUS REQ", ARB FAILED, SO ABORT
3003
3004 ; IF THAT WAS OK, CHECK FOR NON-EXISTANT MEMORY
3005
3006 005236 BUSRESP NONXMEM ; ***** I/O RD 301 *****
(1) 005236 315 231 032 CALL BUSRESP ; DO A CALL TO EXECUTE THIS CODE
(1) 005241 100 .BYTE NONXMEM ; BITS TO BE CHECKED
3007 005242 302 025 036 JNZ NIXOM ; IF FLAG SAYS NXM, THEN WE JUMP
3008
3009 ; ELSE ALL OK....
3010
3011 005245 ENDCMD
(1) 005245 311 RET ; RETURN TO CALLER
3012
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 83
CMDS.M80 *** "DN" CMD ***
3014 .SBTTL *** "DN" CMD ***
3015
3016 ; ROUTINE WILL DEPOSIT NEXT, JUST AS THE LAST
3017
3018 005246 052 033 040 DNCMD: LHLD DNEXT ; GET CODE FOR WHICH DEPOSIT IS NEXT
3019 005251 021 262 012 LXI D,DNLST ; PNTR TO DISPATCH LIST
3020 005254 031 DAD D ; ADD GIVES PNTR TO WHICH IS NEXT
3021
3022 005255 136 MOV E,M ; LO ORDER PIECE TO REG
3023 005256 043 INX H ; UPDATE MEM PNTR
3024 005257 126 MOV D,M ; HI ORDER PIECE TO REG
3025 005260 353 XCHG ; NOW THE DISPATCH GOES TO "H,L"
3026 005261 351 PCHL ; AND DISPATCH
3027
3028 005262 142 012 DNLST: .ADDR DNDM ; DISPATCH FOR DEP NEXT TO MEM
3029 005264 332 012 .ADDR DNDI ; FOR DEPOSIT NEXT TO I/O
3030 005266 062 013 .ADDR DNDK ; FOR DEPOSIT NEXT TO KONSOLE
3031 005270 040 016 .ADDR DNDC ; FOR DEPOSIT NEXT CRAM
3032
3033 .SBTTL *** "EI" CMD ***
3034
3035 005272 EICMD: RUN.. ; ILLEGAL COMMAND IF CPU RUNNING
(1) 005272 347 RST 4
(1) 005273 006 .BYTE 6
3036 005274 332 302 012 JC EI1 ; SKIP CODE IF AT END OF COMMAND
3037 005277 315 050 013 CALL LICMD ; FETCH UP THE DESIRED I/O ADDRESS
3038
3039 005302 076 002 EI1: MVI A,2 ; DISP CODE FOR EXAMINE NEXT..
3040 005304 062 031 040 STA ENEXT ; TELL EXAMINE NEXT TO COME HERE
3041
3042 005307 021 024 040 LXI D,IOAD ; "H,L" GETS PNTR TO ADDR BUFFER
3043
3044 005312 076 143 MVI A,^O143 ; SPECIAL CODE FOR WHEN DOING DI
3045 005314 062 163 040 STA EIFLAG ; PASS IT TO ROUTINE
3046
3047 005317 076 014 MVI A,^O14 ; BITS FOR "I/O FUNC" & "READ FUNC"
3048 005321 303 366 011 JMP EN2ND ; JUMP TO COMMON CODE
3049
3050
3051 ; EXAMINE I/O ENTRY PNT FOR EXAMINE NEXT SITUATION
3052
3053 005324 315 363 012 ENEI: CALL IO.INC ; GO INCREMENT I/O ADDRESS TWICE
3054 005327 303 302 012 JMP EI1 ; THEN ON TO COMMON CODE
3055
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 84
CMDS.M80 *** "DI" CMD ***
3057 .SBTTL *** "DI" CMD ***
3058 .SBTTL *** "DN" CMD ***
3059
3060 005332 315 363 012 DNDI: CALL IO.INC ; GO INCREMENT THE I/O ADDRESS TWICE
3061 005335 DICMD: ARG36 ; OTHERWISE GO ASSEMBLE THE ARG
(1) 005335 347 RST 4
(1) 005336 010 .BYTE 8
3062 005337 047 040 .ADDR DMDAT ; AND STORE IT HERE
3063
3064 005341 076 002 DI1: MVI A,02 ; SET WORD THAT SAYS DEP NEXT WILL BE DI
3065 005343 062 033 040 STA DNEXT ; AND SAVE FOR "DN" CMD
3066
3067 005346 021 024 040 LXI D,IOAD ; PNTR TO ADDRESS DATA TO USE
3068
3069 005351 076 160 MVI A,^O160 ; SET CODE FOR USE BY DI COMMAND
3070 005353 062 164 040 STA DIFLAG ; AND PASS IT TO ROUTINE
3071
3072 005356 076 012 MVI A,^O012 ; BITS TO SAY "I/O FUNC" & "WRITE FUNC"
3073 005360 303 164 012 JMP DN2ND ; AND JUMP TO COMMON CODE
3074
3075 005363 315 051 033 IO.INC: CALL INC36 ; NOW INCREMENT I/O ADDRESS
3076 005366 024 040 .ADDR IOAD ; ITS RIGHT HERE
3077 005370 315 051 033 CALL INC36 ; NOW INCREMENT I/O ADDRESS
3078 005373 024 040 .ADDR IOAD ; ITS RIGHT HERE
3079 005375 311 RET ; AND BACK
3080
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 85
CMDS.M80 *** "EK" CMD ***
3082 .SBTTL *** "EK" CMD ***
3083
3084 ; ROUTINE EXAMINES 8080 LOCATIONS
3085
3086 005376 332 005 013 EKCMD: JC EK1 ; IF NOT, NO ARG TO BE ASSEMBLED
3087
3088 ; OTHERWISE, MUST ASSEMBLE ARG
3089
3090 005401 ARG16 ; GO GET 16 BIT ADDR TO EXAMINE
(1) 005401 347 RST 4
(1) 005402 004 .BYTE 4
3091 005403 002 040 .ADDR C80AD ; AND PUT INTO CURRENT ADDR BUFFER
3092
3093 005405 076 004 EK1: MVI A,04 ; INDEX SAYS EK IS NEXT
3094 005407 062 031 040 STA ENEXT ; SAVE IN THE RAM
3095
3096 005412 041 002 040 LXI H,C80AD ; GET CURRENT ADDR
3097 005415 315 303 030 CALL P16 ; AND PRINT IT AS IS
3098
3099 005420 PSLASH ; NOW A "/"
(2) 005420 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 005421 057 .BYTE SLASH ; CHAR TO PRINT
3100
3101 005422 052 002 040 LHLD C80AD ; GET ADDR JUST PRINTED
3102 005425 176 MOV A,M ; PASS ARG TO PRINT IN THE ACCUM AND
3103 005426 303 000 017 JMP P8CRLF ; PRINT DATA PLUS CRLF, FOR FREE
3104
3105
3106
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 86
CMDS.M80 *** "EN" CMD ***
3108 .SBTTL *** "EN" CMD ***
3109
3110 005431 052 002 040 ENEK: LHLD C80AD ; GET CURRENT 8080 ADDRESS
3111 005434 043 INX H ; UPDATE
3112 005435 042 002 040 SHLD C80AD ; PUT IT BACK
3113 005440 303 005 013 JMP EK1 ; COMMON CODE
3114
3115 .SBTTL *** "LA" CMD ***
3116
3117 005443 LACMD: ARG36 ; OTHERWISE, GET ARG & PUT IN 36-BIT BUFFER
(1) 005443 347 RST 4
(1) 005444 010 .BYTE 8
3118 005445 017 040 .ADDR MEMAD ; PLACE TO PUT DATA
3119 005447 ENDCMD ; AND DONE
(1) 005447 311 RET ; RETURN TO CALLER
3120
3121
3122 .SBTTL *** "LI" CMD ***
3123
3124 005450 LICMD: ARG36 ; GET ARG AND PUT INTO A TEMP BUFFER
(1) 005450 347 RST 4
(1) 005451 010 .BYTE 8
3125 005452 024 040 .ADDR IOAD ; THIS TEMP BUFFER
3126 005454 ENDCMD ; AND DONE
(1) 005454 311 RET ; RETURN TO CALLER
3127
3128 .SBTTL *** "LK" CMD ***
3129
3130 ; ROUTINE SETS CURRENT 8080 ADDRESS INTO RAM..
3131 ; IF USER TRIES TO DEPOSIT PROM, TOO BAD. HE SHOULD KNOW BETTER
3132
3133 005455 LKCMD: ARG16 ; IF OK, GO ASSEMBLE 16 BIT ARG
(1) 005455 347 RST 4
(1) 005456 004 .BYTE 4
3134 005457 002 040 .ADDR C80AD ; THIS IS A GOOD PLACE TO KEEP IT
3135 005461 ENDCMD ; AND END
(1) 005461 311 RET ; RETURN TO CALLER
3136
3137 .SBTTL *** "DN" CMD ***
3138
3139 005462 052 002 040 DNDK: LHLD C80AD ; GET 8080 ADDRESS
3140 005465 043 INX H ; INCREMENT BY 1
3141 005466 042 002 040 SHLD C80AD ; PUT IT BACK
3142
3143 ; FALL INTO THE "DK" COMMAND
3144
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 87
CMDS.M80 *** "DK" CMD ***
3146 .SBTTL *** "DK" CMD ***
3147
3148 ; CODE TO DEPOSIT INTO 8080 RAM.. IF U TRY TO DEPOSIT PROM
3149 ; ITS YOUR OWN FAULT.
3150
3151 005471 315 230 030 DKCMD: CALL ARG16. ; OK, NOW GO ASSEMBLE 16 BITS OF DATA
3152
3153 005474 175 MOV A,L ; GET DATA FROM LOC
3154 005475 052 002 040 LHLD C80AD ; AND CURRENT ADDRESS TO "H,L"
3155 005500 167 MOV M,A ; WRITE THE 8-BIT DATA
3156 005501 076 004 MVI A,04 ; GET CODE THAT SAYS 'EN' SHOULD BE "KONSOLE"
3157 005503 062 033 040 STA DNEXT ; AND SAVE IN RAM
3158 005506 ENDCMD ; ALL DONE
(1) 005506 311 RET ; RETURN TO CALLER
3159
3160 .SBTTL *** "CP" CMD ***
3161
3162 ; COMMAND TO SINGLE PULSE THE SM10 CPU CLK
3163
3164 005507 332 127 013 CPCMD: JC CP1 ; IF NO ARG, ONLY GIVE SINGLE CPU CLK
3165 005512 315 230 030 CALL ARG16. ; ELSE GET ARG
3166
3167 ; NOW GIVE NUMBER OF CLKS REQUESTED
3168
3169 005515 175 CPMLT: MOV A,L ; LO ORDER PIECE INTO ACCUM
3170 005516 264 ORA H ; ADD THE HI ORDER PIECE
3171 005517 310 RZ ; ALL DONE IF DOWN TO ZERO
3172
3173 005520 315 127 013 CALL CP1 ; OTHERWISE, GIVE CLOCK
3174 005523 053 DCX H ; DECREMENT
3175 005524 303 115 013 JMP CPMLT ; AND CONTINUE TILL DONE ALL
3176
3177 005527 076 010 CP1: MVI A,^O010 ; SET BIT FOR "SS MODE"
3178 005531 323 204 OUT CRMCTL ; *****I/O WRT 204/010 *****
3179 005533 076 002 MVI A,2 ; SET BIT FOR "SINGLE CLK"
3180 005535 323 206 OUT CLKCTL ; ***** I/O WRT 206/2 *****
3181 005537 ENDCMD ; DONE..
(1) 005537 311 RET ; RETURN TO CALLER
3182
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 88
CMDS.M80 *** "ER" CMD ***
3184 .SBTTL *** "ER" CMD ***
3185
3186 ; COMMAND TO EXAMINE ONE OF THE 8080 INTERNAL REGISTER, AND DISPLAY
3187 ; THE CONTENTS OF THAT REGISTER.
3188
3189 005540 332 152 013 ERCMD: JC ER1 ; IF NO ARG, GO USE THE ONE ALREADY IN THE RAM
3190
3191 005543 315 230 030 CALL ARG16. ; ELSE, PICK UP THE ARG THAT WAS TYPED
3192
3193 ; FALL TO HERE IF ARG OK..
3194
3195 005546 175 MOV A,L ; GET ACTUAL ARG INTO THE ACCUM
3196 005547 062 123 040 STA ERADDR ; WELL, BEST SAVE THIS THING IN THE RAM
3197 005552 072 123 040 ER1: LDA ERADDR ; COMMON TYPE CODE.. A NO-OP IF ARG WAS TYPED
3198
3199 005555 365 PUSH PSW ; NOW SAVE ACCUM PLEASE
3200 005556 315 270 030 CALL P8BITA ; PRINT NAME OF 8080 REG THAT IS BEING EXAMINED
3201 005561 PSLASH ; AND SEPARATE FROM ITS CONTENTS WITH A SLASH
(2) 005561 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 005562 057 .BYTE SLASH ; CHAR TO PRINT
3202
3203 005563 361 POP PSW ; RESTORE ACCUM PLEASE
3204 005564 315 212 013 CALL ER.UTL ; EXECUTE THE INSTR PAIR FROM THE RAM SPACE
3205
3206 ; BACK HERE AND THE DATA IS IN THE ACCUM
3207
3208 005567 315 000 017 CALL P8CRLF ; PRINT THE RESULTS
3209 005572 311 RET ; AND DONE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 89
CMDS.M80 *** "ER" CMD ***
3211
3212 ; ROUTINE TO EXECUTE AN "IN" OR "OUT" FROM THE 8080 RAM SPACE
3213
3214 005573 042 070 040 RAMXCT: SHLD ER.LOC ; THE "IN/OUT" AND THE REG NUMBER INTO RAM SPACE
3215 005576 365 PUSH PSW ; SAVE ACCUM, IN CASE ROUTINE IS AN "OUT"
3216 005577 076 311 MVI A,.RET ; A "RETURN" INTO ACCUM
3217 005601 062 072 040 STA ER.LOC+2 ; AND THEN THE RETURN GETS PUT INTO RAM SPACE
3218 005604 361 POP PSW ; RESTORE ACCUM, ANYWAY
3219 005605 315 070 040 CALL ER.LOC ; GO EXECUTE THE RAM LOC
3220 005610 057 CMA ; FIX HARDWARE INVERSION
3221 005611 311 RET ; BACK TO CALLER
3222
3223 ; ROUTINE ER.UTL.. DOES AN EXAMINE REGISTER, INTERNAL TYPE FORMAT.
3224 ; NO PRINTING, JUST THE EXAMINE. PASS DESIRED I/O REG ADDRESS IN
3225 ; ACCUM. ACCUM GETS THE RESULTS OF THE READ.
3226
3227 005612 345 ER.UTL: PUSH H ; SAVE H,L PAIR
3228 005613 147 MOV H,A ; NOW, THE NUMBER TYPED IS PUT INTO HI HALF
3229 005614 056 333 MVI L,.IN ; AND AN "IN" INSTR GOES LO HALF
3230
3231 005616 315 173 013 CALL RAMXCT ; NOW ACTUALLY EXECUTE THE CODE TO DO THE READ
3232 005621 341 POP H ; FIX H,L
3233 005622 311 RET ; OUT
3234
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 90
CMDS.M80 *** "LR" CMD ***
3236 .SBTTL *** "LR" CMD ***
3237
3238 ; COMMAND TO SET INTO THE 8080 RAM, THE I/O REGISTER TO BE EITHER
3239 ; DEPOSITED OR EXAMINED.
3240
3241 005623 315 230 030 LRCMD: CALL ARG16. ; FETCH IN THE NUMBER TYPED
3242
3243 005626 175 MOV A,L ; DESIRED REG TO ACCUM
3244 005627 062 123 040 STA ERADDR ; PUT IN 8080 RAM
3245 005632 311 RET ; AND OUT
3246
3247
3248 .SBTTL *** "DR" CMD ***
3249
3250 ; COMMAND TO DEPOSIT A NUMBER INTO THE LAST SPECIFIED 8080 I/O REG.
3251
3252 005633 DRCMD: ARG16
(1) 005633 347 RST 4
(1) 005634 004 .BYTE 4
3253 005635 275 040 .ADDR T80DT ; TAKE ARG AND PUT INTO RAM SPACE
3254
3255 005637 056 323 MVI L,.OUT ; "L" GETS THE OPERATION TYPE WE WILL PERFORM
3256 005641 072 123 040 LDA ERADDR ; FETCH UP THE CURRENTLY SELECTED I/O REG
3257 005644 147 MOV H,A ; AND PUT IT INTO THE "H"
3258 005645 072 275 040 LDA T80DT ; NOW THE DATA TO BE WRITTEN GOES TO THE ACCUM
3259
3260 005650 315 173 013 CALL RAMXCT ; PERFORM THE OPERATION
3261 005653 311 RET ; THATS ALL
3262
3263 .SBTTL *** "LC" CMD ***
3264
3265 ; COMMAND TO LOAD THE 8080 RAM CURRENT CRAM ADDRESS
3266
3267 005654 LCCMD: ARG16 ; OK, ASSEMBLE THE 16 BITS
(1) 005654 347 RST 4
(1) 005655 004 .BYTE 4
3268 005656 004 040 .ADDR CRMAD ; TEMP PLACE TO KEEP BITS
3269 005660 ENDCMD ; DONE..
(1) 005660 311 RET ; RETURN TO CALLER
3270
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 91
CMDS.M80 *** "CE" CMD ***
3272 .SBTTL *** "CE" CMD ***
3273
3274 ; COMMAND TO SET CACHE ENABLE ON THE CSL BOARD
3275 ; OR PERHAPS CLR CACHE ENABLE IF DESIRED.
3276
3277 005661 332 312 013 CECMD: JC CEDIS ; IF NO ARG, DISPLAY "CACHE ENABLE"
3278
3279 005664 315 230 030 CALL ARG16. ; MUST ASSEMBLE ARG IF FALL THRU
3280
3281 005667 175 MOV A,L ; ARG TO ACCUM
3282 005670 027 RAL ; BIT 0 TO 1
3283 005671 027 RAL ; BIT TO 2
3284 005672 027 RAL ; BIT TO 3
3285 005673 346 010 ANI ^O10 ; OFF ALL BITS BUT THE CACHE BIT
3286 005675 107 MOV B,A ; SAVE RESULT IN "B" FOR A LITTLE WHILE
3287 005676 072 354 040 LDA PARBT ; GET CURRENT PARITY BIT STATUS
3288 005701 346 367 ANI ^O367 ; OFF THE CACHE BIT
3289
3290 ; HERE IS SOME COMMON CODE, USEFUL BY ROUTINES WHICH MUST ADJUST
3291 ; THE DATA IN THE PARBT LOCATION.
3292
3293 005703 260 ENACOM: ORA B ; ADD NEW DATA TO DEFAULTED "PARBT"
3294 005704 062 354 040 KS.PAR: STA PARBT ; NOW SAVE THE NEW DEFAULT
3295 005707 323 100 OUT RESET ; ***** I/O WRT 100/STUFF *****
3296 005711 ENDCMD ; AND ALL DONE
(1) 005711 311 RET ; RETURN TO CALLER
3297
3298 ; CODE ENTERED WHEN WE WANT TO DISPLAY THE CACHE ENABLE STATUS
3299
3300 005712 072 354 040 CEDIS: LDA PARBT ; GET CURRENT STATUS
3301 005715 346 010 ANI ^O10 ; IS THE CACHE BIT SET?
3302 005717 302 326 013 CHOOSE: JNZ PNT.ON ; HERE IF YES
3303 005722 PLINE OFFMSG ; OFF MESSAGE DEPENDING THINGS
(1) 005722 337 RST 3 ; PRINT LINE OF CHARS
(1) 005723 143 037 .ADDR OFFMSG ; BUFF TO PRINT
3304 005725 311 RET
3305 005726 PNT.ON: PCHAR 'O ; PRINTING "ON" A CHAR AT A TIME SAVES 1 BYTE
(1) 005726 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 005727 117 .BYTE 'O ; CHAR TO PRINT
3306 005730 PCHAR 'N ; OVER PRINTING IT AS A STRING..SPACE IS A LITTLE TIGHT
(1) 005730 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 005731 116 .BYTE 'N ; CHAR TO PRINT
3307 005732 PCRLF
(2) 005732 347 RST 4
(2) 005733 002 .BYTE 2
3308 005734 311 RET
3309
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 92
CMDS.M80 *** "TE" CMD ***
3311 .SBTTL *** "TE" CMD ***
3312
3313 ; CONSOLE COMMAND TO ENABLE OR DISABLE THE 1 MSEC CLOCK
3314
3315 005735 332 361 013 TECMD: JC TEDIS ; IF NO ARG, DISPLAY CURRENT STATE
3316
3317 005740 315 230 030 CALL ARG16. ; OTHERWISE, GO FETCH THE ARG
3318
3319 005743 175 MOV A,L ; GET INFO JUST TYPED
3320 005744 027 RAL ; BIT 0 TO 1
3321 005745 027 RAL ; BIT TO 2
3322 005746 346 004 ANI ^O4 ; OFF ALL BUT THE TIME BIT
3323 005750 107 MOV B,A ; SAVE STUFF IN B
3324 005751 072 354 040 LDA PARBT ; GET CURRENT DEFAULT
3325 005754 346 373 ANI ^O373 ; OFF THE 1 MSEC CLOCK SIGNAL
3326
3327 005756 303 303 013 JMP ENACOM ; GO DO COMMON CODE
3328
3329 ; THIS CODE ENTERED WHEN WE ONLY WANT TO DISPLAY CURRENT STATE OF 1 MSEC CLOCK
3330
3331 005761 072 354 040 TEDIS: LDA PARBT ; WE NEED TO REPORT STATE..GET DEFAULT
3332 005764 346 004 ANI ^O4 ; IS THE BIT SET??
3333 005766 303 317 013 JMP CHOOSE ; GO TO COMMON PLACE THAT CHOOSES "YES" OR "NO"
3334
3335 .SBTTL *** "SC" CMD ***
3336
3337 ; CODE TO TURN OFF OR ON, THE ABILITY TO RECOVER FROM SOFT CRAM ERRORS.
3338 ; FLAG AT 0, MEANS TRY AND RECOVER, THEREFORE ITS THE DEFAULT ON
3339 ; MACHINE POWER ON...
3340
3341 005771 332 017 014 SCCMD: JC SCDIS ; IF NO ARG TYPED, GO DISPLAY STATE OF SC
3342
3343 005774 315 230 030 CALL ARG16. ; ELSE GO GATHER UP AN ARGUMENT
3344 005777 175 MOV A,L ; ARG GOES INTO ACCUM
3345 006000 247 ANA A ; SET 8080 FLAGS
3346 006001 312 011 014 JZ SC.TOFF ; IF ZERO , TURN OFF SC SOFT CRAM RECOVERY
3347
3348 ; FALL THRU IF TURNING ON SCE
3349
3350 006004 257 XRA A ; ZERO ACCUM
3351 006005 062 326 042 STA SC.OFF ; SO THAT WE CAN SET THE APPROPRIATE FLAG
3352 006010 ENDCMD ; THAT'S IT
(1) 006010 311 RET ; RETURN TO CALLER
3353 006011 076 377 SC.TOFF: MVI A,-1 ; WANT TO TURN OFF SCE, NEED -1 TO DO IT
3354 006013 062 326 042 STA SC.OFF ; ZAP
3355 006016 ENDCMD ; AND OUT
(1) 006016 311 RET ; RETURN TO CALLER
3356
3357 006017 072 326 042 SCDIS: LDA SC.OFF ; GRAB THE FLAG
3358 006022 057 CMA ; SINCE 0 = ON, WE MUST INVERT FLAVOR OF FLAG
3359 006023 247 ANA A ; SET 8080 PROCESSOR FLAGS
3360 006024 303 317 013 JMP CHOOSE ; AND GO PRINT THE RIGHT THING
3361
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 93
CMDS.M80 *** "TP CMD" ***
3363 .SBTTL *** "TP CMD" ***
3364
3365 ; CONSOLE COMMAND TO ENABLE OR DISABLE THE TEN STYLE TRAPS
3366
3367 006027 332 047 014 TPCMD: JC TPDIS ; GO DISPLAY CURRENT STATE IF NOTHING TYPED
3368
3369 006032 315 230 030 CALL ARG16. ; OTHERWISE, GO ASSEMBLE A NUMBER TYPED IN
3370
3371 006035 175 MOV A,L ; GET INFO THAT WAS TYPED
3372 006036 027 RAL ; BIT 0 TO 1
3373 006037 027 RAL ; 1 TO 2
3374 006040 027 RAL ; 2 TO 3
3375 006041 027 RAL ; 3 TO 4
3376 006042 346 020 ANI ^O20 ; OFF ALL BUT TRAP BIT
3377 006044 303 351 021 JMP TP.SET ; JUMP TO PLACE THAT SETS TRAPS, AND SAVES DATA
3378
3379 ; CODE TO DISPLAY CURRENT STATE OF SIGNAL
3380
3381 006047 072 355 040 TPDIS: LDA TRAPEN ; GET CURRENT STATE OF TRAPS BIT
3382 006052 346 020 ANI ^O20 ; SET CONDITION CODES
3383 006054 303 317 013 JMP CHOOSE ; AND GO DO IT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 94
CMDS.M80 *** "TP CMD" ***
3385
3386 .SBTTL *** "LT" CMD ***
3387
3388 ; CONSOLE COMMAND TO TURN ON THE LIGHTS ON THE CONSOLE FRONT PANEL
3389
3390 006057 LTCMD: CLRB KLNKSW ; FORCE A FIXING OF THE LIGHTS
3391 006061 076 007 MVI A,7 ; LOAD ACCUM WITH A BIT FOR EACH OF 3 LIGHTS
3392 006063 323 101 OUT LIGHTS ; ***** I/O WRT 101/7 *****
3393 006065 315 073 014 CALL LTDLY ; LEAVE LIGHTS ON FOR ABOUT A SECOND
3394 006070 257 XRA A ; CLEAR ACCUM
3395 006071 323 101 OUT LIGHTS ; ***** I/O WRT 101/0 *****
3396
3397 ; FALL INTO CODE THAT WAITS A WHILE WITH THE LIGHTS OFF
3398
3399 006073 041 054 001 LTDLY: LXI H,300 ; DELAY ABOUT A SECOND AND A HALF
3400
3401 006076 315 261 033 LTLOOP: CALL DELAY. ; GO DO A LITTLE DELAY
3402 006101 377 .BYTE -1 ; MAX COUNT
3403
3404 006102 053 DCX H ; DOWN THE COUNT
3405 006103 175 MOV A,L ; GET PIECE OF THE COUNT
3406 006104 264 ORA H ; THROW IN THE REST OF THE COUNT
3407 006105 302 076 014 JNZ LTLOOP ; CONTINUE WAITING
3408 006110 072 360 040 LDA STATE ; (5.2A) MUST GUARANTEE DTR HAS BEEN RESTORED
3409 006113 323 101 OUT DTR ; (5.2A) DO IT
3410 006115 311 RET ; UNTIL ALL DONE
3411
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 95
CMDS.M80 *** "MM" CMD ***
3413 .SBTTL *** "MM" CMD ***
3414
3415 ; COMMAND TO PUT THE 8080 INTO MANUFACTURING MODE. SETS THE STATE FOR
3416 ; THE KLINIK LINE THEN SENDS A COMMUNICATIONS CLEAR TO WHATEVER IS AT
3417 ; THE OTHER END OF THE KLINIK LINE.
3418
3419 006116 315 037 034 MMCMD: CALL SETM4 ; SET KLINIK LINE TO MODE 4
3420 006121 076 041 MVI A,^O41 ; WE MUST ALWAYS RESET THE MESSAGE NUMBERS
3421 006123 062 361 040 STA LSTMSG ; THIS IS THE "RECEIVE" MESSAGE NUMBER
3422 006126 062 011 042 STA ENVMNO ; AND THIS IS THE "SEND" MESSAGE NUMBER
3423 006131 062 251 040 STA MMFLG ; SAY MANUFACTURING MODE HAS BEEN ENTERED
3424 006134 315 365 035 CALL Z.TBUF ; CLEAR SOME COMMUNICATION DEC10 BUFFERS
3425 006137 303 325 034 JMP DECEX2 ; CLEAR THE MAILING ENVELOPES
3426 ; **USING JMP USES OTHER GUY'S RETURN TO RETURN
3427
3428 .SBTTL *** "SI" CMD ***
3429
3430 ; COMMAND TO CAUSE SM10 TO EXECUTE A SINGLE INSTR.
3431
3432 006142 333 300 SICMD: IN RUNFP ; BEFORE CONTINUING,MUST READ MACHINE STATE
3433 006144 346 004 ANI 4 ; IS RUN FLOP SET (ALREADY RUNNING?)(TRUE LO)
3434 006146 312 013 027 JZ YSRUN ; IF YES, GO PRINT ?RUN MSG AND ABORT COMMAND
3435
3436 006151 076 001 MVI A,01 ; SET BIT FOR "CONTINUE"
3437 006153 323 212 OUT CPUCTL ; ***** I/O WRT 212/1 *****
3438 006155 315 036 017 CALL DNF ; CHECK THAT INSTR FINISHED
3439 006160 303 305 016 JMP PCCOM ; AND GO TO TYPE OUT THE PC
3440
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 96
CMDS.M80 *** "CS" CMD ***
3442 .SBTTL *** "CS" CMD ***
3443
3444 ; COMMAND TO START THE SM10 CPU CLK RUNNING.
3445
3446 006163 315 241 032 CSCMD: CALL SETRN ; SET CLK "RUNNING" FLAG
3447 006166 257 XRA A ; CLR ACCUM TO CLR "SS MODE"
3448 006167 323 204 OUT CRMCTL ; ***** I/O WRT 204/0 *****
3449 006171 076 003 MVI A,03 ; SET BITS FOR "CLK RUN" & "SINGLE CLK"
3450 006173 323 206 OUT CLKCTL ; ***** I/O WRT 206/3 *****
3451 006175 ENDCMD ; DONE..
(1) 006175 311 RET ; RETURN TO CALLER
3452
3453 .SBTTL *** "CH" CMD ***
3454
3455 ; COMMAND TO HALT THE SM10 CPU CLK
3456
3457 006176 315 255 032 CHCMD: CALL CLRRN ; CLEAR CLK "RUNNING" FLAG
3458 006201 076 010 MVI A,^O010 ; SET BIT FOR "SS MODE"
3459 006203 323 204 OUT CRMCTL ; ***** I/O WRT 204/010 *****
3460 006205 257 XRA A ; CLR BITS FOR "SINGLE CLK" & "CLK RUN"
3461 006206 323 206 OUT CLKCTL ; ***** I/O WRT 206/0 *****
3462 006210 ENDCMD ; DONE..
(1) 006210 311 RET ; RETURN TO CALLER
3463
3464
3465 .SBTTL *** "LF" CMD ***
3466
3467 ; COMMAND TO "LOAD FUNCTION". SPECIFIES WHICH DIAG FUNCTION WRITE
3468 ; TO DO ON THE NEXT "DF" COMMANDS.
3469
3470 006211 315 230 030 LFCMD: CALL ARG16. ; GO ASSEMBLE 16 BIT ARG(WE ONLY NEED 4 BITS)
3471
3472 006214 042 010 040 SHLD CRMFN ; PERMANENT HOME FOR DATA
3473 006217 ENDCMD ; DONE..
(1) 006217 311 RET ; RETURN TO CALLER
3474
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 97
CMDS.M80 *** "DF" CMD ***
3476 .SBTTL *** "DF" CMD ***
3477
3478 ; ROUTINE WRITES THE DATA TYPED USING THE DIAG FUNCTION
3479 ; PREVIOUSLY SPECIFIED BY LF COMMAND.
3480
3481 006220 DFCMD: RUN.. ; IS CPU RUNNING?
(1) 006220 347 RST 4
(1) 006221 006 .BYTE 6
3482
3483 006222 315 230 030 CALL ARG16. ; GO ASSEMBLE ARG
3484
3485 ; NEXT ROUTINE DOES LOTS OF I/O WRTS TO SM10 CPU ALL WHILE TRYING TO
3486 ; WRITE DIAGNOSTIC ADDRESS REG FOR CRAM LOADING OR READING..
3487
3488 006225 345 PUSH H ; SAVE DATA TO BE DEPOSITED
3489 006226 315 264 014 CALL CRM.AD ; WRITE THE CRAM ADDRESS
3490 006231 341 POP H ; GET DATA TO BE DEPOSITED
3491
3492 006232 175 WFUNC: MOV A,L ; GET DATA FOR BITS 28-35 INTO ACCUM
3493 006233 323 103 OUT A2835 ; ***** I/O WRT 103 *****
3494 006235 174 MOV A,H ; GET DATA FOR BITS 20-27
3495 006236 323 105 OUT A2027 ; ***** I/O WRT 105 *****
3496
3497 006240 257 WFNC1: XRA A ; CLR ACCUM
3498 006241 323 115 OUT BUSARB ; ***** I/O WRT 115/0 *****
3499
3500 006243 076 144 MVI A,^O144 ; BITS FOR "CONS REQ","T ENB FOR COM/ADR","CRA R CLK"
3501 006245 323 210 OUT BUSCTL ; ***** I/O WRT 210/144 *****
3502
3503 006247 072 010 040 LDA CRMFN ; GET DIAG FUNCTION
3504 006252 323 205 OUT DIAG ; ***** I/O WRT 205/FNC *****
3505
3506 ; NOTE THAT "TRAP EN" WAS JUST ZAPPED, BUT IT IS ONLY USEFUL IF THE
3507 ; MICRO-CODE IS RUNNING AND ANYTHING YOU DO TO GET THE MICRO-CODE
3508 ; RUNNING WILL RESTORE THE TRAP ENABLE. THIS KLUDGE SPEEDS UP
3509 ; MICRO-CODE LOAD.
3510
3511 006254 076 040 MVI A,^O40 ; BIT FOR "CRAM WRT"
3512 006256 323 204 OUT CRMCTL ; ***** I/O WRT 204/40
3513 006260 257 XRA A ; BIT TO CLR "CRAM WRT"
3514 006261 323 204 OUT CRMCTL ; ***** I/O WRT 204/0 *****
3515 006263 ENDCMD ; DONE..
(1) 006263 311 RET ; RETURN TO CALLER
3516
3517 ; SIMPLE LITTLE ROUTINE TO SAVE SOME SPACE..USED IN SEVERAL PLACES
3518
3519 006264 052 004 040 CRM.AD: LHLD CRMAD ; LOAD DIAG ADDR TO BE WRITTEN
3520
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 98
CMDS.M80 *** "DF" CMD ***
3522
3523 ; ROUTINE COUNTS ON DATA IN "H,L"..DESTROYS "H,L"...
3524
3525 006267 076 001 CADWR: MVI A,01 ; BIT FOR CRAM RESET
3526 006271 323 204 OUT CRMCTL ; ***** I/O WRT 204/1 *****
3527 006273 257 XRA A ; CLR BIT TO CLR CRAM RESET
3528 006274 323 204 OUT CRMCTL ; ***** I/O WRT 204/0 *****
3529
3530 ; ***** I/O WRT 103,105,107,111,113 *****
3531
3532 006276 175 MOV A,L ; LO ORDER 8 BITS TO ACCUM
3533 006277 323 103 OUT A2835 ; SET IN HARDWARE REG
3534 006301 174 MOV A,H ; HI ORDER 4 BITS TO ACCUM
3535 006302 323 105 OUT A2027 ; SET INTO HARDWARE REG
3536
3537 006304 257 XRA A ; CLR ACCUM
3538 006305 323 107 OUT A1219 ; CLR OTHER HARDWARE REGS
3539 006307 323 111 OUT A0411
3540 006311 323 113 OUT A0003
3541
3542 006313 323 115 OUT BUSARB ; ***** I/O WRT 115/0 *****
3543
3544 006315 076 144 MVI A,^O144 ; BITS FOR "CONS REQ", "T ENB FOR COM/ADR","CRA R CLK"
3545 006317 323 210 OUT BUSCTL ; ***** I/O WRT 210/144 *****
3546 006321 076 021 MVI A,^O21 ; BIT FOR "CRM ADDR LOAD"
3547 006323 323 204 OUT CRMCTL ; ***** I/O WRT 204/21
3548 006325 257 XRA A ; BIT TO CLR CRAM ADDR LOAD
3549 006326 323 204 OUT CRMCTL ; ***** I/O WRT 204/0 *****
3550 006330 311 RET ; AND RETURN
3551
3552
3553 ; ROUTINE TO READ A SINGLE DIAG FUNC WORTH OF STUFF FROM
3554 ; THE CRA/CRM PROCESSOR BOARDS.
3555
3556 006331 127 READC: MOV D,A ; SAVE DIAG FUNC FOR A SEC..
3557 006332 072 355 040 LDA TRAPEN ; GET CURRENT VALUE FOR TRAP ENABLES
3558 006335 262 ORA D ; MIX TOGETHER
3559 006336 323 205 OUT DIAG ; ***** I/O WRT 205/FNC *****
3560 006340 076 115 MVI A,^O115 ; BITS "CONS REQ","CRA T CLK","R CLK ENB","CRA R CLK"
3561 006342 323 210 OUT BUSCTL ; ***** I/O WRT 210/115 *****
3562
3563 006344 333 000 IN D2835 ; ***** I/O RD 0 *****
3564 006346 057 CMA ; FIX INVERSION
3565 006347 062 100 040 STA TMPB2 ; SAVE IN STANDARD BUFFER
3566
3567 006352 333 001 IN D2027 ; ***** I/O RD 1 *****
3568 006354 057 CMA ; FIX INVERSION
3569 006355 346 017 ANI ^O17 ; KEEP ONLY 12-8
3570 006357 062 101 040 STA TMPB2+1 ; SAVE IN STANDARD BUFFER
3571
3572 006362 257 XRA A ; CLR ACCUM
3573 006363 323 210 OUT BUSCTL ; ***** I/O WRT 210/0 *****
3574
3575 006365 311 RET ; RETURN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 99
CMDS.M80 *** "RC" ***
3577 .SBTTL *** "RC" ***
3578
3579 006366 RCCMD: RUN.. ; IS CPU RUNNING?
(1) 006366 347 RST 4
(1) 006367 006 .BYTE 6
3580
3581 006370 257 RCINT: XRA A ; CLEAR ACCUM FOR USE AS A COUNTER
3582 006371 001 341 040 LXI B,CRMBF+^D31 ; PNTR TO A BUFFER AREA TO SAVE "RC'S" AS READ
3583 006374 137 RCLP: MOV E,A ; SAVE IN "E" REG
3584 006375 315 331 014 CALL READC ; READ A DIAG FUNC FROM CRA/CRM BRD
3585
3586 ; NOW PRINT WHAT WAS READ
3587
3588 006400 072 120 040 LDA NOPNT ; WE WILL MAKE IT QUICKER IF NOT PRINTING RESULTS
3589 006403 247 ANA A ; SET FLAGS
3590 006404 302 031 015 JNZ RCNOP ; IF NO PRINT, AVOID TYPING CODE
3591
3592 006407 173 MOV A,E ; PUT IN MEM FOR PRINT ROUTINE
3593 006410 315 270 030 CALL P8BITA ; PRINT NAME OF THIS DIAG FUNC
3594 006413 PSLASH ; AND "/"
(2) 006413 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 006414 057 .BYTE SLASH ; CHAR TO PRINT
3595 006415 315 300 030 CALL P16. ; AND PRINT IT
3596 006420 PCRLF
(2) 006420 347 RST 4
(2) 006421 002 .BYTE 2
3597
3598 006422 305 PUSH B ; SAVE COUPLE REGS WHILE GO DECNET
3599 006423 325 PUSH D
3600 006424 315 174 034 CALL DECNET ; YES.. SEND THIS GROUP OF DATA DOWN THE KLINIK LINE
3601 006427 321 POP D ; RETRIEVE THOSE REGISTERS
3602 006430 301 POP B
3603
3604 ; CODE FOR SAVING THE RESULTS OF THESE FUNCTION READS IN THE 8080 RAM SPACE
3605 ; FOR NOW WE WILL SAVE THE RESULTS IN THE PLACE WHERE CRAM DATA IS KEPT.
3606
3607 006431 052 100 040 RCNOP: LHLD TMPB2 ; FETCH UP THE DATA THAT WAS ACTUALLY READ
3608 006434 174 MOV A,H ; GET LO ORDER PIECE TO ACCUM
3609 006435 002 STAX B ; STORE TO PLACE POINTED TO BY "D,E"
3610 006436 013 DCX B ; UPDATE THE STORAGE POINTER
3611 006437 175 MOV A,L ; GET HI ORDER PIECE OF CRAM DATA
3612 006440 002 STAX B ; SAVE IN STORAGE AREA
3613 006441 013 DCX B ; AGAIN DOWNDATE POINTER TO BEGINING OF ACTUAL
3614
3615 006442 034 INR E ; INCREMENT IT
3616 006443 173 MOV A,E ; COPY CURRENT COUNT TO ACCUM FOR THE COMPARE
3617 006444 376 020 CPI ^O20 ; REACHED MAX YET??
3618 006446 302 374 014 JNZ RCLP ; BACK IF NOT YET..
3619
3620 ; OTHERWISE
3621
3622 006451 ENDCMD ; DONE...
(1) 006451 311 RET ; RETURN TO CALLER
3623
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 100
CMDS.M80 *** "EJ" CMD ***
3625 .SBTTL *** "EJ" CMD ***
3626
3627 ; CONSOLE COMMAND TO DISPLAY THE FLOW OF THE CONTROL STORE BY PRINTING
3628 ; OUT THE CURRENT "J-FIELD", "NEXT LOC", "SUBROUTINE RET REG", & "CURRENT
3629 ; LOCATION"
3630
3631 006452 EJCMD: RUN.. ; IS CPU RUNNING?
(1) 006452 347 RST 4
(1) 006453 006 .BYTE 6
3632 006454 041 117 015 LXI H,EJLST ; FIRST GET A PNTR TO ASCII TEXT
3633 006457 001 207 004 LXI B,^B10010000111 ; SET B=4 & C="10,00,01,11"
3634
3635 006462 171 EJLP: MOV A,C ; COPY DIAG FUNC STRING TO ACCUM
3636 006463 346 003 ANI 3 ; STRIP ALL BUT LO ORDER 2 BITS
3637
3638 006465 315 331 014 EJ1: CALL READC ; GO READ DIAG FUNC AS GIVEN BY ACCUM
3639
3640 006470 315 113 004 CALL PLN1 ; PRINT ASCII IDENTIFIER FOR THIS FUNC
3641
3642 006473 345 PUSH H ; SAVE "H,L"
3643 006474 315 300 030 CALL P16. ; AND GO PRINT IT AS 16 BIT OCTAL
3644 006477 PCHAR SPACE
(1) 006477 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 006500 040 .BYTE SPACE ; CHAR TO PRINT
3645 006501 PCHAR SPACE
(1) 006501 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 006502 040 .BYTE SPACE ; CHAR TO PRINT
3646 006503 341 POP H ; GET "H,L" BACK
3647
3648 006504 171 MOV A,C ; GET FUNCTION PICKER
3649 006505 017 RRC ; SHIFT FUNCTION LIST
3650 006506 017 RRC ; 2 PLACES
3651 006507 117 MOV C,A ; PUT BACK FUNCTION
3652
3653 006510 005 DCR B ; NOW DOWN THE COUNTER
3654 006511 302 062 015 JNZ EJLP ; AND JUMP TO THE EXECUTING CODE
3655
3656 006514 PCRLF ; AND A CR-LF
(2) 006514 347 RST 4
(2) 006515 002 .BYTE 2
3657
3658 ; ELSE.. END OF COMMAND
3659
3660 006516 ENDCMD ; RETURN TO CALLER
(1) 006516 311 RET ; RETURN TO CALLER
3661
3662 006517 103 125 122 EJLST: .ASCIZ %CUR/% ; FUNC 03 IS CURRENT CRAM LOCATION
3663 006524 116 130 124 .ASCIZ %NXT/% ; FUNC 01 IS NEXT LOC
3664 006531 112 057 000 .ASCIZ %J/% ; FUNC 00 IS J-FIELD
3665 006534 123 125 102 .ASCIZ %SUB/% ; FUNC 02 IS SUBROUTINE RETURN REG
3666
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 101
CMDS.M80 *** "TR" CMD ***
3668 .SBTTL *** "TR" CMD ***
3669
3670 ; THIS CONSOLE COMMAND TRACES THE FLOW OF THE MICRO-CODE BY TYPING
3671 ; THE 4 KNOWN ADDRESSES FROM THE CONTROL RAM ADDRESS BRD, THEN ISSUING
3672 ; A SINGLE CPU PULSE AND CONTINUING THIS UNTIL THE USER TYPES CARRIAGE
3673 ; RETURN.
3674
3675 006541 332 155 015 TRCMD: JC TR1 ; IF NO ARG, GO LIKE NORMAL
3676 006544 ARG16 ; IF WAS ARG, GO GET IT
(1) 006544 347 RST 4
(1) 006545 004 .BYTE 4
3677 006546 152 040 .ADDR BRKDT ; PLACE TO PUT IT
3678
3679 006550 076 077 MVI A,^O77 ; NOW ANY ARBITRARY,NON-ZERO VALUE
3680 006552 062 151 040 STA BRKON ; TO SAY THAT BREAKING IS ON..
3681
3682 006555 TR1: RUN.. ; IS CPU RUNNING?
(1) 006555 347 RST 4
(1) 006556 006 .BYTE 6
3683 006557 CLRB RPEND ; SO CAN CLR CMD CNTR
3684 006561 072 151 040 TR: LDA BRKON ; CHECK IF BREAK IS ON
3685 006564 247 ANA A ; CHECK FLAG
3686 006565 312 177 015 JZ TRLP ; IF ZERO, DON'T LOOK AT BREAK STUFF
3687 006570 021 152 040 LXI D,BRKDT ; PASS PNTR TO THE DESIRED STOPPING ADDRESS
3688 006573 315 155 030 CALL BREAK ; IF FLAG SET, CALL TO CHECK ADDRESS
3689 006576 310 RZ ; IF RETURN WITH Z-SET, WE ARE AT BREAK PLACE
3690
3691 006577 315 220 015 TRLP: CALL PULSE ; GIVE PULSE
3692 006602 PCRLF ; CARRIAGE RETURN LINE FEED
(2) 006602 347 RST 4
(2) 006603 002 .BYTE 2
3693
3694 006604 072 157 040 LDA RPEND ; GET CMD CNTR
3695 006607 247 ANA A ; IS IT SET?
3696 006610 312 161 015 JZ TR ; WELL, CONT LOOP IF NOT YET
3697
3698 ; OTHERWISE, END THE COMMAND
3699
3700 006613 CLRB BRKON ; AND CLR THE FLAG
3701 006615 ENDCMD ; DONE..
(1) 006615 311 RET ; RETURN TO CALLER
3702
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 102
CMDS.M80 *** "PM" CMD ***
3704 .SBTTL *** "PM" CMD ***
3705
3706 ; CONSOLE COMMAND TO "PULSE" "MICRO-CODE". IE., GIVE A SINGLE PULSE AND
3707 ; THEN AN "EJ" COMMAND. COMMAND IS EQUIVALENT TO THE "TR" TRACE COMMAND,
3708 ; ONLY EXECUTING THE TRACE ONCE.
3709
3710 006616 PMCMD: RUN.. ; IS CLK RUNNING?
(1) 006616 347 RST 4
(1) 006617 006 .BYTE 6
3711
3712 006620 315 127 013 PULSE: CALL CP1 ; GO DO A SINGLE CLOCK
3713 006623 315 052 015 CALL EJCMD ; TYPE CONTROL STORE ADDRESSES & EXIT FROM THERE
3714 006626 ENDCMD ; AND OUT
(1) 006626 311 RET ; RETURN TO CALLER
3715
3716 .SBTTL *** "EC" CMD ***
3717
3718 ; ROUTINE TO READ THE C-RAM AND TYPE IT OUT
3719
3720 006627 ECCMD: RUN.. ; IS CPU RUNNING?
(1) 006627 347 RST 4
(1) 006630 006 .BYTE 6
3721 006631 332 251 015 JC EC2 ; IF NO ARG, DON'T GO ASSEMBLE ONE
3722 006634 315 254 013 CALL LCCMD ; FETCH UP DESIRED CRAM ADDRESS
3723
3724 006637 EC1: CLRRM TMPB2 ; ZAP A TEMPORARY BUFFER
(1) 006637 347 RST 4
(1) 006640 012 .BYTE 10.
(1) 006641 105 040 .ADDR TMPB2+5
3725
3726 006643 315 264 014 CALL CRM.AD ; NOW WRITE DESIRED CRAM ADDRESS
3727 006646 315 127 013 CALL CP1 ; AND GIVE A SINGLE CLK PULSE TO LOAD CNTRL REG
3728
3729 006651 076 006 EC2: MVI A,06 ; SET UP "EXAMINE NEXT" TYPE COMMANDS
3730 006653 062 031 040 STA ENEXT ; SAVE EXAMINE STUFF IN RAM
3731
3732 ; NOW READY TO READ THE CONTROL REG
3733
3734 006656 041 010 016 LXI H,RDLST ; GET PNTR TO DIAG FUNCTIONS TO BE READ
3735
3736 006661 176 ECLP: MOV A,M ; GET DIAG FUNCTION TO ACCUM
3737 006662 043 INX H ; UPDATE PNTR
3738 006663 247 ANA A ; WAS FNC END-OF-LIST(YES IF WAS MINUS)
3739 006664 372 313 015 JM ECBEE ; JMP IF WAS END OF LIST
3740
3741 ; OTHERWISE, WE MUST DO A DIAG FUNCTION
3742
3743 006667 315 331 014 CALL READC ; GO READ THIS DIAG FUNC,DATA RETURNED IN "TMPB2"
3744 006672 042 170 040 SHLD ECSAV ; NOW SAVE "H,L" FOR A MINUTE
3745
3746 006675 041 100 040 LXI H,TMPB2 ; POINTER TO DATA JUST READ
3747 006700 315 016 031 CALL OCTAL ; NOW TURN DATA INTO ASCII OCTAL CHARS
3748 006703 002 .BYTE 2 ; TWO BYTES RELEVANT DATA
3749 006704 004 .BYTE 4 ; WANT 4 OCTAL CHARS
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 102-1
CMDS.M80 *** "EC" CMD ***
3750
3751 006705 052 170 040 LHLD ECSAV ; RESTORE THE "H,L"
3752 006710 303 261 015 JMP ECLP ; AND CONTINUE TILL READ ALL DIAG FUNCS
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 103
CMDS.M80 *** "EC" CMD ***
3754
3755 ; WHEN YOU GET TO HERE, YOU'VE READ ALL FUNCS, NOW READ & CMP A & B COPIES
3756
3757 006713 176 ECBEE: MOV A,M ; GET DIAG FUNC FOR AN "A" COPY
3758 006714 043 INX H ; UPDATE MEM PNTR
3759 006715 247 ANA A ; DID DIAG FUNC HAVE MINUS SIGN?
3760 006716 372 361 015 JM PCRAM ; DONE LIST, JMP IF WAS MINUS
3761
3762 ; OTHERWISE, GO AND READ THE "A" COPY AGAIN
3763
3764 006721 315 331 014 CALL READC ; DATA RETURNED IN "TMPB2"
3765 006724 MOV5B ; MOVE THAT DATA TO 2ND TMP BUFF
(1) 006724 347 RST 4
(1) 006725 000 .BYTE 0
3766 006726 100 040 .ADDR TMPB2 ; SRC OF DATA
3767 006730 073 040 .ADDR TMPBF2 ; PLACE TO PUT IT
3768
3769 006732 176 MOV A,M ; GET DIAG FUNC FOR A "B" COPY
3770 006733 043 INX H ; UPDATE PNTR
3771 006734 315 331 014 CALL READC ; NOW READ A "B" COPY
3772
3773 006737 345 PUSH H ; SAVE "H,L"
3774 006740 315 016 033 CALL CMP36 ; NOW COMPARE THE "A" AND "B" COPIES
3775 006743 100 040 .ADDR TMPB2 ; "B" COPY
3776 006745 073 040 .ADDR TMPBF2 ; "A" COPY
3777 006747 341 POP H ; RESTORE "H,L"
3778 006750 312 313 015 JZ ECBEE ; IF CHECKED OK, BACK TO READ NEXT "A/B" COPIES
3779
3780 ; FALL THRU TO VERIFY ERROR IF "Z" NOT SET
3781
3782 006753 PLINE ECVER ; "?VERIFY ERR"
(1) 006753 337 RST 3 ; PRINT LINE OF CHARS
(1) 006754 073 037 .ADDR ECVER ; BUFF TO PRINT
3783 006756 303 370 014 JMP RCINT ; GO PRINT ALL CRAM REGS
3784
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 104
CMDS.M80 *** "EC" CMD ***
3786
3787 ; IF "A/B" COPIES VERIFIED, TIME TO PRINT C-RAM CONTENTS
3788
3789 006761 076 003 PCRAM: MVI A,03 ; DIAG FUNC TO READ "CURRENT CRAM LOCATION"
3790 006763 315 331 014 CALL READC ; GO READ CURRENT CRAM LOC..
3791 006766 315 300 030 CALL P16. ; PRINT IT
3792 006771 PSLASH ; AND "/"
(2) 006771 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 006772 057 .BYTE SLASH ; CHAR TO PRINT
3793
3794 ; NOW PRINT THE 32 OCTAL CHARS.......
3795
3796 006773 006 040 MVI B,32. ; NUM CHARS TO PRINT
3797 006775 361 PCRLP: POP PSW ; GET A CHAR
3798 006776 315 343 003 CALL PCHR ; PRINT IT
3799 007001 005 DCR B ; DOWN COUNT OF CHARS PRINTED
3800 007002 302 375 015 JNZ PCRLP ; LOOP TILL DONE
3801
3802 007005 PCRLF ; NEED CR-LF
(2) 007005 347 RST 4
(2) 007006 002 .BYTE 2
3803
3804 007007 ENDCMD ; THEN OUT
(1) 007007 311 RET ; RETURN TO CALLER
3805
3806 007010 017 RDLST: .BYTE ^O17 ; READ 84-95
3807 007011 016 .BYTE ^O16 ; READ 72-83
3808 007012 015 .BYTE ^O15 ; READ 60-71
3809 007013 014 .BYTE ^O14 ; READ 48-59
3810 007014 012 .BYTE ^O12 ; READ 36-47A
3811 007015 005 .BYTE ^O5 ; READ 24-35A
3812 007016 004 .BYTE ^O4 ; READ 12-23
3813 007017 000 .BYTE 0 ; READ 0-11
3814 007020 377 .BYTE ^O377 ; END BYTE
3815 007021 012 .BYTE ^O12 ; READ 36-47A
3816 007022 013 .BYTE ^O13 ; READ 36-47B
3817 007023 005 .BYTE ^O5 ; READ 24-35A
3818 007024 006 .BYTE ^O6 ; READ 24-35B
3819 007025 377 .BYTE ^O377 ; END BYTE
3820
3821 .SBTTL *** "EN" CMD ***
3822
3823 007026 052 004 040 ENEC: LHLD CRMAD ; GET CURRENT ADDRESS
3824 007031 043 INX H ; UPDATE IT
3825 007032 042 004 040 SHLD CRMAD ; PUT IT BACK
3826 007035 303 237 015 JMP EC1 ; GO TO COMMON CODE
3827
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 105
CMDS.M80 *** "DC" CMD ***
3829 .SBTTL *** "DC" CMD ***
3830 .SBTTL *** "DN TO DC" CMD ***
3831
3832 ; CODE USED IN DEPOSIT NEXT FOR THE CRAM
3833
3834 007040 052 004 040 DNDC: LHLD CRMAD ; GET CURRENT ADDRESS
3835 007043 043 INX H ; INCREMENT IT
3836 007044 042 004 040 SHLD CRMAD ; PUT IT BACK
3837
3838 007047 DCCMD: RUN.. ; IS CPU RUNNING?
(1) 007047 347 RST 4
(1) 007050 006 .BYTE 6
3839 007051 315 213 031 CALL ARG96 ; ASSEMBLE DATA TO DEPOSIT
3840 007054 322 040 .ADDR CRMTM ; PLACE TO PUT IT
3841
3842 007056 021 302 040 LXI D,CRMBF ; PLACE TO PUT THE RESULTS OF THE CRAM SHUFFLE
3843 007061 041 322 040 LXI H,CRMTM ; THE OLD 12-BYTE FORMAT WILL ALWAYS BE HERE
3844 007064 016 004 MVI C,4 ; LOAD "C" WITH A 4
3845
3846 ; BEGIN THE UNPACKING
3847
3848 007066 315 046 032 GENLP: CALL PLACE ; LOCAL ROUTINE THAT TAKES 12 BITS OF 24.
3849 007071 076 003 MVI A,3 ; A SHIFT 24 REQUIRES 3 BYTES OF DATA TO SHIFT
3850 007073 315 142 031 CALL SHR24 ; SHIFT 12 BITS JUST PACKED INTO OUTER SPACE
3851 007076 014 .BYTE 12. ; TELL ROUTINE 12 PLACES
3852 007077 315 046 032 CALL PLACE ; NOW ROUTINE WILL GET 12 MORE BITS..12+12=24
3853
3854 007102 043 INX H ; UPDATE PNTR 3-BYTES(IE 24 BITS)
3855 007103 043 INX H
3856 007104 043 INX H
3857
3858 007105 015 DCR C ; DOWN THE COUNTER (THERE ARE 4 GROUPS OF 24=96)
3859 007106 302 066 016 JNZ GENLP ; CONTINUE TILL DONE THE 4 GROUPS
3860
3861 007111 315 264 014 CALL CRM.AD ; WRITE THE CRAM ADDRESS
3862 007114 041 302 040 LXI H,CRMBF ; GET PLACE WHERE INFO WAS JUST PLACED
3863
3864 007117 076 006 MVI A,06 ; NUMBER FOR DEPOSIT NEXT TO USE
3865 007121 062 033 040 STA DNEXT ; STANDARD PLACE TO KEEP IT
3866 007124 074 INR A ; SET FUNCTION .EQ. 7 (INR WORKS BY LUCK)
3867 007125 001 010 040 LXI B,CRMFN ; SET AN ADDRESS INTO "B,C" REGISTER,TO USE AS A POINTER
3868 007130 002 DCLP: STAX B ; SAVE IT IN THE RAM AT LOC "CRMFN"
3869
3870 007131 136 MOV E,M ; GET 8 BITS OF DATA
3871 007132 043 INX H ; UPDATE PNTR
3872 007133 126 MOV D,M ; GET 4 MORE BITS OF DATA
3873 007134 043 INX H ; AND UPDATE PNTR AGAIN
3874
3875 007135 353 XCHG ; NOW "H,L" CONTAINS THE DATA & "D,E" THE PNTR
3876 007136 315 232 014 CALL WFUNC ; AND DIAG FUNCTION WRT
3877 007141 353 XCHG ; POINTER BACK TO "H,L"
3878
3879 007142 012 LDAX B ; GET PARTICULAR DIAG FUNC FROM RAM LOC
3880 007143 075 DCR A ; DOWN TO NEXT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 105-1
CMDS.M80 *** "DN TO DC" CMD ***
3881 007144 362 130 016 JP DCLP ; AS LONG AS 0-7, KEEP GOING
3882 007147 ENDCMD ; NOW ALL DONE
(1) 007147 311 RET ; RETURN TO CALLER
3883
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 106
CMDS.M80 *** "SM" CMD ***
3885 .SBTTL *** "SM" CMD ***
3886
3887 ; CODE TO START THE MICRO-CODE AT THE ADDRESS SPECIFIED. DEFAULTS TO
3888 ; STARTING AT C-RAM LOC 0 IF NO ADDRESS IS GIVEN.
3889
3890 007150 332 161 016 SMCMD: JC SM1 ; IF NO ARG, SUPPLY ADDRESS OF 0000
3891
3892 ; OTHERWISE MUST ASSEMBLE THE GIVEN ADDRESS
3893
3894 007153 315 230 030 CALL ARG16. ; ASSEMBLE 16-BITS OF ARGUMENT
3895
3896 007156 303 164 016 JMP SM1.5 ; OTHERWISE, CONTINUE NORMALLY
3897
3898 007161 041 000 000 SM1: LXI H,00 ; IF HERE, DESIRE ADDRESS OF 0000
3899 007164 042 275 040 SM1.5: SHLD T80DT ; SET ADDR
3900
3901 007167 315 164 005 CALL MRCMD ; RESET THE MACHINE
3902
3903 007172 MOV5B ; SET UP INITIAL DATA
(1) 007172 347 RST 4
(1) 007173 000 .BYTE 0
3904 007174 242 022 .ADDR ONES ; DATA TO BE IS ALL ONES
3905 007176 047 040 .ADDR DMDAT ; PLACE WHERE IT GOES
3906
3907 007200 021 333 016 LXI D,MAD000 ; GET ADDRESS OF MEM LOC 0
3908 007203 315 162 012 CALL DMINT ; "DEPOSIT MEMORY" INTERNAL FORMAT
3909
3910 007206 072 354 040 LDA PARBT ; GET PARITY STUFF
3911 007211 346 140 ANI ^O140 ; ONLY KEEP A LITTLE BIT
3912 007213 323 100 OUT RESET ; AND TURN OF ALL PARITY STUFF WHILE WE DO THIS
3913
3914 007215 052 275 040 LHLD T80DT ; GET START ADDRESS OF MICRO-CODE TO "H,L"
3915 007220 315 267 014 CALL CADWR ; WRITE THE DIAG ADDRESS REG
3916
3917 007223 315 163 014 CALL CSCMD ; START THE CPU CLK FREE RUN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 107
CMDS.M80 *** "SM" CMD ***
3919
3920 007226 315 261 033 HLTCM: CALL DELAY. ; NOW WAIT FOR MICRO-CODE TO REACH HALT LOOP
3921 007231 377 .BYTE -1
3922 007232 315 305 006 CALL CLRUSE ; EXIT FROM USER MODE
3923 007235 333 300 IN RUNFP ; ***** I/O RD 300 *****
3924 007237 057 CMA ; AND FIX INVERSION
3925 007240 346 010 ANI ^O10 ; IS CPU IN THE HALT LOOP?
3926 007242 302 254 016 JNZ SMVER ; JUMP IF YES..APPEARED TO START OK
3927
3928 ; FALL TO HERE IF SM10 DID NOT SET HALT LOOP FLAG
3929
3930 007245 PLINE SMERR ; PRINT ERR MESSAGE
(1) 007245 337 RST 3 ; PRINT LINE OF CHARS
(1) 007246 135 037 .ADDR SMERR ; BUFF TO PRINT
3931 007250 067 STC ; SET C-BIT TO INDICATE AN ERROR EXIT
3932 007251 303 325 016 JMP SMFINI ; AND EXIT VIA RESTORE PARITY PATH
3933
3934 007254 SMVER: INTON ; SET INTERAL STATUS FOR THE EXAMINE
(1) 007254 327 RST 2 ; GO SET INTERNAL MODE
3935 007255 EXAM 0 ; EXAMINE MEM LOC 0(MICRO-CODE STOP CODE)
(1) 007255 315 202 030 CALL EXAMSH ; AND DO EXAM ASSUMING SHORT ADDRESS
(1) 007260 000 000 .ADDR 0 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
3936 007262 INTOFF ; TURN OFF INTERNAL STATUS
(1) 007262 367 RST 6 ; GO EXIT FROM INTERNAL MODE
3937
3938 ; IT DID SUCCEED IN SETTING HALT LOOP FLAG, SO MERELY PRINT HALTED
3939 ; AND THE DATA IN LOCATION 0..
3940 ; ****SUBROUTINE "STOP CODE" ****
3941
3942 007263 315 241 032 CALL SETRN ; JUST A LITTLE KLUDGE - CHEAP WAY TO FIX STATE
3943 ; LIGHT IF PROGRAM EXECUTED A "HALT" WHILE
3944 ; LITES WERE BLINKY
3945
3946 007266 PLINE HLTMS ; PRINT "HALTED" MESSAGE
(1) 007266 337 RST 3 ; PRINT LINE OF CHARS
(1) 007267 105 037 .ADDR HLTMS ; BUFF TO PRINT
3947 007271 041 012 040 LXI H,EMBUF ; PNTR TO DATA IN LOC 0
3948 007274 315 002 031 CALL P18 ; PRINT RIGHT HALF OF 36-BIT DATA
3949 007277 CLRB CHKHLT ; SET FLAG TO SAY WEVE TYPED HALTED ALREADY
3950
3951 007301 PSPACE ; PRINT A SPACE
(2) 007301 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 007302 040 .BYTE SPACE ; CHAR TO PRINT
3952 007303 PSPACE ; AND ANOTHER
(2) 007303 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 007304 040 .BYTE SPACE ; CHAR TO PRINT
3953 007305 PCCOM: INTON ; SET INTERNAL MODE
(1) 007305 327 RST 2 ; GO SET INTERNAL MODE
3954 007306 EXAM 1 ; EXAMINE WORD WHICH HOLDS THE PC
(1) 007306 315 202 030 CALL EXAMSH ; AND DO EXAM ASSUMING SHORT ADDRESS
(1) 007311 001 000 .ADDR 1 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
3955 007313 INTOFF ; CLR INTERNAL MODE
(1) 007313 367 RST 6 ; GO EXIT FROM INTERNAL MODE
3956 007314 PLINE PCMSG ; PRINT "PC/"
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 107-1
CMDS.M80 *** "SM" CMD ***
(1) 007314 337 RST 3 ; PRINT LINE OF CHARS
(1) 007315 101 037 .ADDR PCMSG ; BUFF TO PRINT
3957 007317 315 333 030 CALL P36. ; AND PRINT THE PC
3958 007322 PCRLF ; PRINT CARRIAGE RETURN LINE-FEED
(2) 007322 347 RST 4
(2) 007323 002 .BYTE 2
3959 007324 247 ANA A ; CLEAR THE C-BIT 'CAUSE ALL OK
3960
3961 ; AND BEFORE WE LEAVE,RESTORE THE PARITY STUFF
3962
3963 007325 072 354 040 SMFINI: LDA PARBT ; GET CURRENT PARITY DEFAULTS
3964 007330 323 100 OUT RESET ; RESTORE THE PARITY DETECTS
3965 007332 311 RET ; AND OUT
3966 007333 ZEROES:
3967 007333 MAD000: D 0,0,,0,0 ; MEMORY ADDRESS 0
3968 ; FROM MEMORY LOCATION 0
3969
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 108
CMDS.M80 *** "PE" CMD ***
3971 .SBTTL *** "PE" CMD ***
3972
3973 ; COMMAND TO ENABLE VARIOUS PARITY CHECKS NORMALLY MADE BY THE 8080..
3974 ; ACCEPTABLE PARITY COMMANDS ARE:
3975 ; PE 0 ; "DISABLE" ALL PARITY DETECTION
3976 ; PE 1 ; "ENABLE" "DP" PARITY DETECT
3977 ; PE 2 ; "ENABLE" "CRM" PARITY DETECTION
3978 ; PE 4 ; "ENABLE" "PE" PARITY DET (CLK FREEZE ON PAR ERR)
3979 ; PE 7 ; "ENABLE" ALL
3980 ; BITS ARE WEIGHTED FOR THE THREE TYPES OF PARITY ERRORS
3981
3982 007340 332 367 016 PECMD: JC PARDIS ; COMMAND REQUIRES ARG
3983
3984 007343 315 230 030 CALL ARG16. ; ASSEMBLE TYPED ARG
3985
3986 007346 175 MOV A,L ; GET NUMBER TYPED INTO THE ACCUM
3987 007347 346 007 ANI ^O7 ; KEEP ONLY APPROPRIATE BITS
3988 007351 027 RAL ; BIT 0 INTO BIT 1
3989 007352 027 RAL ; BIT 0 INTO BIT 2
3990 007353 027 RAL ; INTO BIT 3
3991 007354 027 RAL ; INTO BIT 4
3992
3993 007355 157 MOV L,A ; SAVE IN L
3994 007356 072 354 040 LDA PARBT ; NOW GET CURRENT STATUS
3995 007361 346 217 ANI ^O217 ; OFF THE OLD CRUMMY PARITY
3996 007363 265 ORA L ; THROW IN THESE NEW BITS
3997
3998 007364 303 304 013 JMP KS.PAR ; SAVE IN RAM PLACE & WRITE TO KS
3999
4000
4001 ; THIS IS THE CODE FOR IF WE WANT TO DISPLAY THE PARITY
4002
4003 007367 072 354 040 PARDIS: LDA PARBT ; GET THE CURRENT PARITY STATUS
4004 007372 346 160 ANI ^O160 ; CLR CRUD, JUST SAVING PARITY BITS
4005 007374 037 RAR ; ROTATE TO JUSTIFY THE BITS AT BIT 0
4006 007375 037 RAR
4007 007376 037 RAR
4008 007377 037 RAR
4009
4010 007400 315 270 030 P8CRLF: CALL P8BITA ; AND GO PRINT THOSE 8 BITS
4011 007403 PCRLF ; TERMINATE ALL WITH A CR-LF
(2) 007403 347 RST 4
(2) 007404 002 .BYTE 2
4012 007405 ENDCMD ; ALL DONE
(1) 007405 311 RET ; RETURN TO CALLER
4013
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 109
CMDS.M80 *** "EX" CMD ***
4015 .SBTTL *** "EX" CMD ***
4016
4017 ; CONSOLE COMMAND TO EXECUTE A SINGLE SM10 "TEN ORDER" INSTRUCTION
4018
4019 007406 EXCMD: ARG36 ; GO ASSEMBLE THE INSTR TO BE EXECUTED
(1) 007406 347 RST 4
(1) 007407 010 .BYTE 8
4020 007410 012 040 .ADDR EMBUF ; PLACE TO PUT IT
4021
4022 007412 021 012 040 EXINTM: LXI D,EMBUF ; POINTER TO INSTR INTO "D,E"
4023
4024 007415 315 137 033 EXINT: CALL WDATP ; ***** I/O WRT 102,104,106,101,112 *****
4025
4026 007420 076 002 MVI A,2 ; SET BIT FOR "I/O DATA CYCLE"
4027 007422 323 114 OUT DTARB ; ***** I/O WRT 114/2 *****
4028
4029 007424 076 003 MVI A,3 ; BITS FOR "EXECUTE" & "CONTINUE"
4030 007426 041 272 040 LXI H,HSBFL1 ; (5.2F) SET "H,L" REGISTER TO SPECIAL HSB FLAG
4031 007431 206 ADD M ; (5.2F) ADD IT IN (FOR FRC WILL ADD IN "RUN")
4032 007432 323 212 OUT CPUCTL ; ***** I/O WRT 212/3 *****
4033 007434 066 000 MVI M,0 ; (5.2F) CLEAR HSB FLAG
4034
4035 007436 000 DNF: NOP
4036 007437 000 NOP ; WAIT
4037
4038 007440 333 300 IN RUNFP ; ***** I/O RD 300 *****
4039 007442 057 CMA ; FIX INVERSION
4040 007443 346 001 ANI 1 ; IS CONTINUE STILL SET?
4041 007445 310 RZ ; IF CLR, WE ARE OK...
4042
4043 ; IF CONT STILL SET, WE HAVE AN ERROR
4044
4045 007446 PLINE EXMS ; ERR MESSAGE "?DNF-DID NOT FINISH"
(1) 007446 337 RST 3 ; PRINT LINE OF CHARS
(1) 007447 114 037 .ADDR EXMS ; BUFF TO PRINT
4046 007451 315 305 006 CALL CLRUSE ; EXIT FROM USER MODE
4047 007454 057 CMA ; ACCUM NOW .EQ. -1
4048 007455 247 ANA A ; SET FLAGS, SO "JNZ" WILL JUMP
4049 007456 311 RET ; AND RETURN
4050
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 110
CMDS.M80 *** "ST" CMD ***
4052 .SBTTL *** "ST" CMD ***
4053
4054 ; CONSOLE COMMAND TO ISSUE A START TO THE CPU
4055
4056 007457 315 043 013 STCMD: CALL LACMD ; FIRST GO ASSEMBLE A LEGAL ADDRESS TO START AT
4057 007462 MOV5B ; MOVE TO TMP BUFF SO DON'T KILL "MEMAD"
(1) 007462 347 RST 4
(1) 007463 000 .BYTE 0
4058 007464 017 040 .ADDR MEMAD ; SRC
4059 007466 073 040 .ADDR TMPBF2 ; TEMP PLACE TO KEEP IT
4060
4061
4062 007470 STINT: CLRRM DMDAT ; MUST CLR COMM WORDS BEFORE WE START
(1) 007470 347 RST 4
(1) 007471 012 .BYTE 10.
(1) 007472 054 040 .ADDR DMDAT+5
4063 007474 DEPOS 32 ; CLEAR LOC 32 (THE TTY INPUT WORD)
(1) 007474 247 ANA A ; CLR "C-BIT" FOR USE BY COMMON CODE
(1) 007475 315 203 030 CALL DEPSHT ; AND DO THE DEPOSIT ASSUMING SHORT ADDR
(1) 007500 032 000 .ADDR 32 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
4064 007502 DEPOS 33 ; CLEAR 33 (THE TTY OUTPUT WORD)
(1) 007502 247 ANA A ; CLR "C-BIT" FOR USE BY COMMON CODE
(1) 007503 315 203 030 CALL DEPSHT ; AND DO THE DEPOSIT ASSUMING SHORT ADDR
(1) 007506 033 000 .ADDR 33 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
4065
4066 007510 072 255 040 LDA GOCODE ; (5.2F) BYTE 28-35 GETS THE REASON FOR RELOAD
4067 007513 041 047 040 LXI H,DMDAT ; (5.2F) MAKE H,L POINT TO THE DESIRED BUFFER
4068 007516 167 MOV M,A ; (5.2F) SET GOCODE BITS INTO THE BYTE "DMDAT"
4069
4070 007517 DEPOS 31 ; CLEAR LOC 31 (KEEP ALIVE WORD)
(1) 007517 247 ANA A ; CLR "C-BIT" FOR USE BY COMMON CODE
(1) 007520 315 203 030 CALL DEPSHT ; AND DO THE DEPOSIT ASSUMING SHORT ADDR
(1) 007523 031 000 .ADDR 31 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
4071
4072 007525 041 140 005 LXI H,^O2540 ; LOAD "H,L" WITH "JRST" OPCODE
4073 007530 042 076 040 SHLD TMPBF2+3 ; AND PUT INTO THE BUFFER WHERE THE ADDR IS
4074
4075 007533 021 073 040 LXI D,TMPBF2 ; NOW SET POINTER TO THE INSTR
4076 007536 315 015 017 CALL EXINT ; AND GO HANDLE JUST LIKE AN EXECUTE
4077 007541 300 RNZ ; IF NON ZERO, THE EXECUTE FAILED
4078
4079 ; AND NOW FALL INTO THE "CONTINUE" COMMAND
4080
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 111
CMDS.M80 *** "CO" CMD ***
4082 .SBTTL *** "CO" CMD ***
4083
4084 ; CONSOLE COMMAND TO ISSUE CONTINUE TO CPU
4085
4086 007542 315 354 006 COCMD: CALL SETUSE ; ENTER USER MODE
4087 007545 076 005 MVI A,5 ; SET BITS FOR "CONTINUE" & "RUN"
4088 007547 041 273 040 LXI H,HSBFL2 ; (5.2F) SET "H,L" REGISTER TO SPECIAL HSB FLAG
4089 007552 226 SUB M ; (5.2F) SUBTRACT (FOR FRC REMOVE "CONTINUE")
4090 007553 066 000 MVI M,0 ; (5.2F) CLEAR HSB FLAG
4091 007555 323 212 OUT CPUCTL ; ***** I/O WRT 212/5 *****
4092 007557 062 231 040 COINT: STA CHKHLT ; AND GUARANTEE THAT ANY FAST HALTS WILL GET REPORTED
4093
4094 007562 PLINE KSPRMT ; WANT TO TELL USER WHEN WE SWITCH MODES
(1) 007562 337 RST 3 ; PRINT LINE OF CHARS
(1) 007563 042 037 .ADDR KSPRMT ; BUFF TO PRINT
4095 007565 PLINE U ; SAY "USER MODE"
(1) 007565 337 RST 3 ; PRINT LINE OF CHARS
(1) 007566 343 006 .ADDR U ; BUFF TO PRINT
4096
4097 ; AND JUMP OFF TO COMMON CODE THAT CHECKS THE CONTINUE BIT
4098 ; AND ERRS IF CONTINUE HAS NOT BEEN CLEARED BY THE CPU.
4099
4100 007570 303 036 017 JMP DNF ; GO....
4101
4102 .SBTTL *** "HA" CMD ***
4103
4104 ; CONSOLE COMMAND TO HALT THE SM10 CPU. CPU MICRO-CODE SHOULD ENTER
4105 ; THE HALT LOOP.
4106
4107 007573 257 HACMD: XRA A ; CLR ACCUM FOR "RUN","EXECUTE" & "CONTINUE"
4108 007574 323 212 OUT CPUCTL ; *****I/O WRT 212/0 *****
4109 007576 303 226 016 JMP HLTCM ; AND FINISHES UP JUST LIKE "SM" COMMAND
4110
4111 .SBTTL *** "SH" CMD ***
4112
4113 ; COMMAND TO CAUSE THE TOPS20 MONITOR TO BEGIN AN ORDERLY SYSTEM SHUTDOWN
4114
4115 007601 SHCMD: MOV5B ; MOVE US SOME DATA
(1) 007601 347 RST 4
(1) 007602 000 .BYTE 0
4116 007603 052 001 .ADDR .DSBASE ; FROM HERE (0,,776700)
4117 007605 047 040 .ADDR DMDAT ; TO HERE. PLACE FOR DEPOSIT TO FIND IT
4118
4119 007607 DEPOS 30 ; AND DO IT
(1) 007607 247 ANA A ; CLR "C-BIT" FOR USE BY COMMON CODE
(1) 007610 315 203 030 CALL DEPSHT ; AND DO THE DEPOSIT ASSUMING SHORT ADDR
(1) 007613 030 000 .ADDR 30 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
4120 007615 315 354 006 CALL SETUSE ; NOW BE SURE WE ENTER THE USER MODE AGAIN
4121 007620 006 200 MVI B,^O200 ; SET SIGN BIT SO AS TO IGNORE "KEEP-ALIVE"
4122 007622 315 312 032 CALL STATEM ; GO DO THE STUFF WITHOUT
4123 007625 377 .BYTE ^O377 ; CHANGING THINGS
4124 007626 303 157 017 JMP COINT ; RETURN TO USER MODE TO WATCH MONTR "SHUTDOWN"
4125
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 112
CMDS.M80 *** "KL" CMD ***
4127 .SBTTL *** "KL" CMD ***
4128
4129 ; KLINIK COMMAND
4130
4131 007631 332 264 017 KLCMD: JC KLDIS ; DISPLAY CURRENT STATE IF NOTHING TYPED
4132
4133 ; ELSE ASSEMBLE THE TYPED IN ARG
4134
4135 007634 315 230 030 CALL ARG16. ; PERMIT 16 BIT WIDE TYPE IN
4136
4137 ; NOW VERIFY THAT LOWER HALF IS A LEGAL NUMBER
4138
4139 007637 175 MOV A,L ; LO HALF TO ACCUM
4140 007640 247 ANA A ; SET CONDITION CODES
4141 007641 312 250 017 JZ KLOFF ; IF TYPED ZERO, GO TURN OFF KLINIK
4142
4143 ; NOW FALL THRU HERE IF .EQ. 1, MUST TURN ON THE KLINIK
4144
4145 007644 062 300 040 STA KLLINE.ON ; SET BIT TO SAY THAT KLINIK IS ON
4146 007647 311 RET ; AND OUT
4147 007650 062 300 040 KLOFF: STA KLLINE.ON ; GET HERE IF ACCUM WAS ZERO.. ZAP KLINIK FLAG
4148
4149 ; AND FALL INTO CODE TO SEE IF THE END OF KLINIK MUST FORCE A CHANGE IN THE
4150 ; STATE OF THE KLINIK LINE AND USER. IE., IF IN MODE 3, WE MUST FORCE USER
4151 ; INTO MODE 2.
4152
4153 007653 072 247 040 LDA CSLMODE ; GET CURRENT MODE
4154 007656 376 010 CPI .MODE3 ; IS IT MODE 3?
4155 007660 314 070 034 CZ SETM2 ; SET MODE 2 IF NOT IN THERE
4156 007663 311 RET ; AND OUT
4157
4158 ; HERE IF JUST WANT TO DISPLAY CURRENT KLINIK STATE
4159
4160 007664 072 300 040 KLDIS: LDA KLLINE.ON ; GET CURRENT VALUE
4161 007667 247 ANA A ; SET FLAGS
4162 007670 303 317 013 JMP CHOOSE ; GO DISPLAY THE APPROPRIATE MESSAGE
4163
4164
4165 .SBTTL *** "TT" CMD ***
4166
4167 007673 315 354 006 TTCMD: CALL SETUSE ; ON THIS COMMAND WE DESIRE THAT CTY ENTER USER MODE
4168 007676 PLINE KSPRMT ; "KS10>"
(1) 007676 337 RST 3 ; PRINT LINE OF CHARS
(1) 007677 042 037 .ADDR KSPRMT ; BUFF TO PRINT
4169 007701 PLINE U ; "USR MOD"
(1) 007701 337 RST 3 ; PRINT LINE OF CHARS
(1) 007702 343 006 .ADDR U ; BUFF TO PRINT
4170 007704 072 247 040 LDA CSLMODE ; (5.2A) CHECK KLINIK STATUS - PUT INTO MODE 2?
4171 007707 326 004 SUI .MODE2 ; (5.2A) IS MODE LESS THAN MODE 2?
4172 007711 362 070 034 JP SETM2 ; (5.2A) NO - OK TO SET MODE 2 - SO GO DO IT
4173 007714 CLRB KLNKSW ; (5.2A) CLEAR KLINIK STATUS WORD - FORCE
4174 ; REEXAMINATION OF THE SWITCHES ...
4175 007716 311 RET ; NOW RETURN
4176
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 112-1
CMDS.M80 *** "TT" CMD ***
4177
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 113
CMDS.M80 *** "PW" CMD ***
4179 .SBTTL *** "PW" CMD ***
4180
4181 ; COMMAND FOR SETTING A PASSWORD INTO THE 8080, SO THAT THE KLINIK LINE
4182 ; USER WILL HAVE SOMETHING TO MATCH AGAINST WHEN HE TRIES TO GET INTO
4183 ; THE SYSTEM.
4184
4185 007717 PWCMD: CLRB KLNKSW ; ON ANY PASSWORD COMMAND, FORCE RE-EXAMINATION
4186 ; OF THE KLINIK MODE
4187
4188 ; NOW DO THE NORMAL STUFF U NEED TO DO WITH THIS COMMAND
4189
4190 007721 332 361 017 JC PW.CLR ; IF NO PW TYPED, GO CLR PASSWORD
4191
4192 ; FALL THRU ELSE.. IE MUST SET THE PASSWORD
4193
4194 007724 052 223 040 PW.SET: LHLD .ARG1 ; GET POINTER TO THE TYPE-IN BUFFER
4195 007727 021 262 040 LXI D,PASSWORD ; POINT TO BUFFER AREA WHERE PASSWORD WILL BE
4196 007732 006 372 MVI B,-6 ; SET A MAX COUNT FOR LENGTH OF THE PASSWORD
4197
4198 007734 176 PW.LOOP: MOV A,M ; COPY A PASSWORD CHARACTER TO THE ACCUM
4199 007735 376 377 CPI EOLCH ; IS IT END OF LINE?
4200 007737 310 RZ ; IF YES, SIMPLE RETURN
4201
4202 ; FALL TO HERE IF MORE TO BE MOVED
4203
4204 007740 315 153 006 CALL UP.LO ; UPPER CASE ONLY
4205 007743 022 STAX D ; MOVE A CHARACTER TO THE SAVE BUFFER
4206 007744 023 INX D ; UPDATE DESTINATION POINTER
4207 007745 043 INX H ; UPDATE SOURCE POINTER
4208 007746 004 INR B ; UPDATE CHARACTER COUNT
4209 007747 302 334 017 JNZ PW.LOOP ; STAY IN THE LOOP
4210
4211 ; FALL THRU WHEN DONE 6 CHRACTERS.. THAT HAD BETTER BE ALL, ELSE ERROR
4212
4213 007752 176 MOV A,M ; GET 7TH CHARACTER
4214 007753 376 377 CPI EOLCH ; IT BETTER BE END
4215 007755 310 RZ ; IF YES, WAS END OF LINE, THEN OK TO RETURN
4216
4217 ; FALL THRU WHEN USER TYPED TOO MANY CHARACTERS
4218
4219 007756 PLINE PWLEN ; ERR MESSAGE
(1) 007756 337 RST 3 ; PRINT LINE OF CHARS
(1) 007757 332 037 .ADDR PWLEN ; BUFF TO PRINT
4220 007761 PW.CLR: CLRRM PASSWORD+1 ; CLEAR 5 BYTES OF THE 6 BYTE BUFFER
(1) 007761 347 RST 4
(1) 007762 012 .BYTE 10.
(1) 007763 270 040 .ADDR PASSWORD+1+5
4221 007765 053 DCX H ; POINTER CAME OUT GOOD
4222 007766 066 000 MVI M,0 ; CLR THE 6TH BYTE OF THE BUFFER
4223 007770 311 RET ; THAT'S ALL
4224
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 114
CMDS.M80 *** "MK" & "UM" CMD ***
4226 .SBTTL *** "MK" & "UM" CMD ***
4227
4228 ; CONSOLE COMMAND TO MARK AND UMARK SPECIFIED MICRO-CODE LOCATIONS
4229
4230 007771 016 000 UMCMD: MVI C,0 ; WE ARE CLEARING THE MARK BIT..
4231 007773 303 000 020 JMP MRKCM ; AND GO SAVE IT AS A FLAG FOR WHAT WE'RE DOING
4232
4233 007776 016 001 MKCMD: MVI C,1 ; A BIT SAYS WE ARE SETTING THE MARK BIT
4234 010000 305 MRKCM: PUSH B ; SAVE "B,C", IT HAS DATA FOR SET OR CLEAR
4235 010001 RUN.. ; IS CPU RUNNING?
(1) 010001 347 RST 4
(1) 010002 006 .BYTE 6
4236 010003 315 254 013 CALL LCCMD ; "C-BIT" IS CLR..GO ASSEMBLE A LEGAL RAM-ADDR
4237 010006 315 264 014 CALL CRM.AD ; SET DIAGNOSTIC ADDRESS REG
4238 010011 315 127 013 CALL CP1 ; GIVE SINGLE PULSE TO GET DATA WHERE I CAN READ
4239
4240 010014 076 017 MVI A,^O17 ; GET FUNCTION READ FOR CRAM DATA THAT INCLUDES MRK
4241 010016 315 331 014 CALL READC ; DO THE DIAGNOSTIC FUNCTION READ
4242 010021 315 264 014 CALL CRM.AD ; SET DIAGNOSTIC ADDRESS REG
4243 010024 021 100 040 LXI D,TMPB2 ; GET PNTR TO DATA THAT HAS THE MARK BIT
4244 010027 301 POP B ; GET INSTR TYPE
4245
4246 010030 032 LDAX D ; GET THE ACTUAL DATA
4247 010031 346 376 ANI ^O376 ; CLEAR BIT 0
4248 010033 261 ORA C ; NOW EITHER SET OR CLEAR THE BIT
4249
4250 010034 022 MRKRT: STAX D ; BUT DATA BACK, NEW MARK BIT STATUS
4251
4252 010035 315 172 033 CALL ADATP ; WRITE DATA TO BUS REG
4253
4254 010040 076 007 MVI A,7 ; NOW WISH TO DO FUNCTION WRITE 7
4255 010042 062 010 040 STA CRMFN ; SET INTO FUNC WORD
4256
4257 010045 303 240 014 JMP WFNC1 ; AND FINISH UP BY WRITING DATA BACK
4258
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 115
CMDS.M80 *** "ZM" CMD ***
4260 .SBTTL *** "ZM" CMD ***
4261
4262 ; CONSOLE COMMAND TO ZERO THE SM10 MOS MEMORY..
4263
4264 010050 ZMCMD: CLRRM MEMAD ; CLEAR MEMORY ADDRESS BUFFER(TO START AT 0)
(1) 010050 347 RST 4
(1) 010051 012 .BYTE 10.
(1) 010052 024 040 .ADDR MEMAD+5
4265 010054 076 002 MVI A,2 ; BITS TO SAY WRITE TYPE FUNCTION
4266 010056 062 023 040 STA MEMAD+4 ; WRITE INTO THE BUFFER
4267
4268 010061 CLRRM DMDAT ; DATA TO DEPOSIT IS ALL ZEROES
(1) 010061 347 RST 4
(1) 010062 012 .BYTE 10.
(1) 010063 054 040 .ADDR DMDAT+5
4269
4270 010065 INTON ; INTERNAL MODE ON
(1) 010065 327 RST 2 ; GO SET INTERNAL MODE
4271 010066 315 153 012 CALL DM1 ; DEPOSIT ZEROES INTO FIRST LOCATION
4272 010071 315 051 033 ZM1: CALL INC36 ; TO NEXT ADDRESS
4273 010074 017 040 .ADDR MEMAD ; HERE IT IS
4274
4275 010076 021 017 040 LXI D,MEMAD ; DO PART OF THE DEPOSIT HERE, FOR SPEED SAKE
4276 010101 315 172 033 CALL ADATP ; LOAD UP BUS REGS WITH THE DESIRED DATA
4277 010104 076 004 MVI A,4 ; NOW FUNCTION TYPE BIT INTO ACCUM
4278 010106 323 115 OUT BUSARB ; ***** I/O WRT *****
4279
4280 010110 315 217 012 CALL DMGO ; NOW GO DO THE DEPOSIT
4281
4282 ; AND CHECK TO SEE IF GOT A NXM
4283
4284 010113 072 154 040 LDA ERRCD ; GET ERROR CODE..
4285 010116 247 ANA A ; CHECK IF SET
4286 010117 312 071 020 JZ ZM1 ; IF NO ERRORS YET, KEEP GOING
4287
4288 ; FALL THRU WHEN HAD "NO DATA ACNOWLEDGE" ERROR
4289
4290 010122 INTOFF ; CLEAR INTERNAL MODE
(1) 010122 367 RST 6 ; GO EXIT FROM INTERNAL MODE
4291 010123 ENDCMD ; AND DONE
(1) 010123 311 RET ; RETURN TO CALLER
4292
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 116
CMDS.M80 *** "RP" CMD ***
4294 .SBTTL *** "RP" CMD ***
4295
4296 ; NOTE: THE LIST OF SAVED COMMAND DISPATCHES IS NOT IN THE NORMAL 8080
4297 ; ADDRESS FORMAT..IE THE COMMAND LIST IS SAVED IN PAIRS OF BYTES AS:
4298 ; HI ORDER PIECE FIRST..
4299 ; LO ORDER PIECE SECOND..
4300
4301 010124 322 151 020 RPCMD: JNC RP1 ; IF ARG, BEGIN AT A SPECIAL PLACE
4302 010127 257 XRA A ; CLR ACCUM
4303 010130 062 160 040 RP0: STA RPCNTR ; THERE IS NO REPEAT COUNT
4304 010133 315 273 020 CALL RPFOO ; IN THE BEGINNING YOU MUST RESET THE POINTERS
4305 010136 257 XRA A ; CLR ACCUM
4306 010137 062 157 040 STA RPEND ; CLR THE REPEAT KILLER
4307 010142 057 CMA ; MAKE ACCUM .EQ. -1
4308 010143 062 213 040 STA RPTON ; THAT REPEAT FUNCTION IS TURNED ON
4309 010146 303 175 020 JMP RP2 ; CONTINUE...
4310
4311 010151 315 230 030 RP1: CALL ARG16. ; FETCH THE ARG THAT WAS TYPED
4312
4313 010154 174 MOV A,H ; IT MUST ONLY BE 256 OR LESS
4314 010155 247 ANA A ; SET PROCESSOR FLAGS
4315 010156 302 134 032 JNZ KILNM ; IF .GT. 256, THEN BAD NUMBER
4316
4317 ; FALL THRU IF ACCUM 0
4318
4319 010161 175 MOV A,L ; GET REAL ARG INTO ACCUM
4320 010162 074 INR A ; SET ACCUM 1 GREATER THAN ACTUAL
4321 010163 303 130 020 JMP RP0 ; CONTINUE BY INITING FLAGS
4322
4323 010166 072 157 040 RPTRTN: LDA RPEND ; NEXT THING IS TO SEE IF TIME TO STOP REPEAT
4324 010171 247 ANA A ; TEST DATA
4325 010172 302 233 020 JNZ RP.OUT ; AND END THE REPEAT IF "END" FLAG IS SET
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 117
CMDS.M80 *** "RP" CMD ***
4327
4328 010175 052 211 040 RP2: LHLD RPLST ; GET POINTER TO COMMAND DISPATCH LIST
4329 010200 176 MOV A,M ; CHECK BYTE..MAKE SURE ITS NOT THE END-OF-LIST
4330 010201 074 INR A ; IF IT WAS -1, NOW ITS A ZERO
4331 010202 302 240 020 JNZ RP4 ; AND GO BACK TOO
4332
4333 010205 072 160 040 LDA RPCNTR ; CHECK IF THIS IS A COUNTED REPEAT
4334 010210 314 273 020 CZ RPFOO ; IT WAS END OF LIST IF U GOT HERE, SO FIX POINTERS
4335 010213 247 ANA A ; SET FLAGS
4336 010214 312 166 020 JZ RPTRTN ; IF .EQ. 0 NO COUNT ON THE REPEAT
4337
4338 010217 075 DCR A ; THERE IS A COUNTER, DOWN IT
4339 010220 062 160 040 STA RPCNTR ; SAVE NEW COUNT
4340 010223 376 001 CPI 1 ; SEE IF AT BOTTOM LINE
4341 010225 304 273 020 CNZ RPFOO ; IF A COUNTED REPEAT, FIX END OF LIST ONLY IF MORE TO DO
4342 010230 302 166 020 JNZ RPTRTN ; JUMP IF NO
4343
4344 010233 257 RP.OUT: XRA A ; CLEAR ACCUM PRIOR TO LEAVING
4345 010234 062 213 040 STA RPTON ; TURN OFF THE "ON" FLAG
4346 010237 311 RET ; AND HERE IF YES
4347
4348 010240 126 RP4: MOV D,M ; IF IT WAS OK.. START ASSEMBLING THE DISPATCH
4349 010241 043 INX H ; UPDATE TO LO ORDER PIECE
4350 010242 136 MOV E,M ; AND DISPATCH IS NOW IN "D,E"
4351 010243 043 INX H ; UPDATE POINTER
4352 010244 042 211 040 SHLD RPLST ; SAVE POINTER TO WHERE WE ARE IN CMD LIST
4353
4354 010247 041 263 001 LXI H,NULLW ; "H,L" GETS PLACE WE WANT TO RETURN TO
4355 010252 345 PUSH H ; PLACE ON STACK SO THAT "RET" INS COMES HERE
4356 010253 353 XCHG ; DISPATCH ADDRESS INTO "H,L"
4357
4358 010254 174 MOV A,H ; GET HI ORDER PIECE OF ADDR TO SEE IF ARG
4359 010255 247 ANA A ; WAS TYPED WITH THIS COMMAND..SET FLAGS
4360 010256 362 265 020 JP RPGO ; IF SIGN BIT CLR, CMD GOT NO ARG
4361
4362 ; OTHERWISE MUST SET THE C-BIT TO TELL CMD TO LOOK FOR ARG
4363
4364 010261 346 177 ANI ^O177 ; CLR SIGN BIT
4365 010263 147 MOV H,A ; PUT IT BACK FOR CORRECT DISPATH
4366 010264 067 STC ; SET C-BIT IF NECCESSARY
4367 010265 077 RPGO: CMC ; SET C-BIT FOR THIS COMMAND TO SEE
4368 010266 351 PCHL ; AND GO DO IT..
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 118
CMDS.M80 *** "RP" CMD ***
4370
4371 ; IF REACHED END OF THE DISPATCH LIST, THEN THIS CODE RESETS
4372 ; THE POINTER BACK TO THE BEGINNING OF THE LIST
4373
4374 010267 057 RPNEW: CMA ; RPFOO DOESNT TOUCH ACCUM, SET ACCUM TO -1
4375 010270 062 131 040 STA CMDS.. ; NOW ZAP THE FIRST IN LINE FLAG
4376 010273 041 001 041 RPFOO: LXI H,RPINI ; BUFFER BEGINNING ADDRESS
4377 010276 042 211 040 SHLD RPLST ; PUT BACK INTO RAM
4378 010301 041 032 041 LXI H,RPTBFI ; POINTER TO DATA BUFFER
4379 010304 042 207 040 SHLD RPBUFS ; RESET INTO HOLDING LOCATION
4380 010307 311 RET ; AND RETURN
4381
4382 .SBTTL *** "DS" CMD ***
4383
4384 ; COMMAND TO SELECT NON DEFAULT DISK UNIT AND UNIBUS ADAPTERS FOR BOOTING
4385 ; FROM DISK
4386
4387 010310 DSCMD: PLINE Q.UBA ; MESSAGE TO ASK FOR "UNIBUS ADAPTER" TO BE USED
(1) 010310 337 RST 3 ; PRINT LINE OF CHARS
(1) 010311 241 037 .ADDR Q.UBA ; BUFF TO PRINT
4388 010313 315 144 021 CALL PICKUP ; GO FETCH THE RESPONSE THAT WAS TYPED
4389 010316 332 331 020 JC DS1 ; IF NOTHING TYPED, LEAVE UBA AS CURRENTLY SELECTED
4390
4391 ; FALL INTO HERE IF A NEW UBA NUMBER WAS TYPED
4392
4393 010321 072 100 040 LDA TMPB2 ; GRAB THE NEW UBA NUMBER AS TYPED
4394 010324 007 RLC ; THE UBA NUMBER IS JUSTIFIED "*4" IN A BYTE
4395 010325 007 RLC ; TAKES 2 ROTATES TO GET IT JUSTIFIED
4396 010326 062 357 040 STA DSKUBA ; AND SAVE THE NEW VALUE IN THE RAM
4397
4398 010331 DS1: PLINE Q.RH ; ASK FOR AN RH11 TO USE
(1) 010331 337 RST 3 ; PRINT LINE OF CHARS
(1) 010332 250 037 .ADDR Q.RH ; BUFF TO PRINT
4399 010334 315 144 021 CALL PICKUP ; GET WHAT WAS TYPED
4400 010337 332 350 020 JC DS2 ; IF NOTHING TYPED, DO NOTHING
4401
4402 010342 MOV5B ; NOW SAVE THIS NEW DISK BASE
(1) 010342 347 RST 4
(1) 010343 000 .BYTE 0
4403 010344 100 040 .ADDR TMPB2 ; THIS IS WHERE THE DATA SHOULD BE SITTING
4404 010346 374 040 .ADDR DSBASE ; THIS IS WHERE WE WILL KEEP IT
4405
4406 010350 DS2: PLINE Q.UNIT ; ASK FOR A UNIT NUMBER TO BOOT FROM
(1) 010350 337 RST 3 ; PRINT LINE OF CHARS
(1) 010351 262 037 .ADDR Q.UNIT ; BUFF TO PRINT
4407 010353 315 144 021 CALL PICKUP ; GO FETCH WHAT WAS TYPED
4408 010356 330 RC ; IF NOTHING TYPED, THEN ALL DONE. RETURN FROM THIS CMD
4409
4410 ; FALL TO HERE IF A UNIT WAS TYPED..GO SET THE UNIT TO BE USED
4411
4412 010357 072 100 040 LDA TMPB2 ; GET NUMBER TYPED FOR THE NEW UNIT
4413 010362 062 132 040 STA UNITNM ; SET IT INTO RAM AS THE NEW VALUE
4414 010365 311 RET ; ALL DONE THIS COMMAND....
4415
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 119
CMDS.M80 *** "MS" CMD ***
4417 .SBTTL *** "MS" CMD ***
4418
4419 ; COMMAND TO SELECT WHAT MAGTAPE TO BOOT FROM
4420
4421 010366 MSCMD: PLINE Q.UBA ; ASK FOR A UNIBUS ADAPTER TO LOAD FROM
(1) 010366 337 RST 3 ; PRINT LINE OF CHARS
(1) 010367 241 037 .ADDR Q.UBA ; BUFF TO PRINT
4422 010371 315 144 021 CALL PICKUP ; GET WHAT WAS TYPED
4423 010374 332 007 021 JC MS1 ; IF NOTHING, LEAVE UBA ALONE.. GO GET THE NEXT THING
4424
4425 ; FALL INTO HERE IF A NEW UBA WAS SELECTED
4426
4427 010377 072 100 040 LDA TMPB2 ; GET THE NEW UBA TYPED
4428 010402 007 RLC ; UBA NUMBERS MUST BE JUSTIFIED ON BYTE BOUNDARY *4
4429 010403 007 RLC ; TAKES TWO SHIFTS TO SET THE UBA NUMBER
4430 010404 062 356 040 STA MTAUBA ; SAVE THE NEW UBA VALUE IN THE RAM
4431
4432 010407 MS1: PLINE Q.RH ; ASK FOR A NEW RH11 TO USE
(1) 010407 337 RST 3 ; PRINT LINE OF CHARS
(1) 010410 250 037 .ADDR Q.RH ; BUFF TO PRINT
4433 010412 315 144 021 CALL PICKUP ; FETCH WHAT WAS TYPED
4434 010415 332 026 021 JC MS1.5 ; IF NOTHING TYPED, THEN DO NOTHING
4435
4436 010420 MOV5B ; IF SOMETHING TYPED, GET IT FROM THE BUFFER
(1) 010420 347 RST 4
(1) 010421 000 .BYTE 0
4437 010422 100 040 .ADDR TMPB2 ; PLACE WHERE THE STUFF WAS PUT
4438 010424 367 040 .ADDR MTBASE ; PLACE WHERE WE KEEP THE MAGTAPE BASE REG
4439 010426 MS1.5: PLINE Q.TCU ; GO ASK FOR A UNIT NUMBER
(1) 010426 337 RST 3 ; PRINT LINE OF CHARS
(1) 010427 272 037 .ADDR Q.TCU ; BUFF TO PRINT
4440 010431 315 144 021 CALL PICKUP ; GO SEE WHAT WAS TYPED
4441 010434 332 045 021 JC MS2 ; IF NOTHING TYPE, LEAVE VALUE ALONE.. GO AROUND THIS.
4442
4443 ; FALL TO HERE IF NEED TO SET A NEW UNIT NUMBER
4444
4445 010437 072 100 040 LDA TMPB2 ; GET WHAT WAS TYPED
4446 010442 062 137 040 STA TAPEUNIT ; SET IN THE NEW UNIT NUMBER
4447
4448 010445 MS2: PLINE Q.DEN ; NOW GO SEE WHAT DENSITY TO SET FOR THE MAGTAPE
(1) 010445 337 RST 3 ; PRINT LINE OF CHARS
(1) 010446 301 037 .ADDR Q.DEN ; BUFF TO PRINT
4449 010450 315 156 021 CALL INBUF ; UPDATE BUFFER PNTR. THIS CASE DIFFERENT FROM
4450 ; THE OTHERS. WE MUST EXAMINE ASCII, NOT OCTAL
4451 010453 332 115 021 JC MS3 ; BUT IF NOTHING TYPED, GO ASK FOR A NEW SLAVE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 120
CMDS.M80 *** "MS" CMD ***
4453
4454 ; FALL THRU IF NEED TO SET A DENSITY....
4455 ; NOW H,L REG POINTS TO THE STRING JUST TYPED IN
4456
4457 010456 345 PUSH H ; SAVE POINTER TO THE TYPED IN BUFFER
4458 010457 021 133 021 LXI D,EIGHT0 ; GET POINTER TO THE "800" LIST
4459 010462 315 276 033 CALL STRCMP ; NOW DO A STRING COMPARE
4460 010465 302 076 021 JNZ S16CHK ; IF WAS NOT AN "800", SEE IF ITS A "1600"
4461
4462 ; OK, IT WAS 800..NOW SET UP THE CHANNEL DATA TO SAY 800 BPI TAPE
4463
4464 010470 076 002 MVI A,2 ; A 2 IS THE CORRECT CODE FOR 800 BPI
4465 010472 341 POP H ; IF "800" MATCHED, THEN CLEAN UP THE STACK
4466 010473 303 112 021 JMP MS2.5 ; GO TO NEXT CHECK
4467
4468 010476 341 S16CHK: POP H ; GET POINTER TO THE TYPED IN STUFF
4469 010477 021 137 021 LXI D,SIXTN ; MATCH AGAINST "1600"
4470 010502 315 276 033 CALL STRCMP ; DO THE STRING COMPARE
4471 010505 302 134 032 JNZ KILNM ; IF WAS NOT 1600, THEN IT WAS BAD
4472
4473 ; IT WAS 1600, SO SET THE RIGHT THING FOR TAPE BPI
4474
4475 010510 076 004 MVI A,4 ; THIS IS THE CODE FOR 1600 BPI
4476 010512 062 363 040 MS2.5: STA DEN.SLV+1 ; SET THE BYTE IN THE CHANNEL DATA WORD
4477
4478 010515 MS3: PLINE Q.SLV ; ASK FOR A NEW SLAVE DEVICE
(1) 010515 337 RST 3 ; PRINT LINE OF CHARS
(1) 010516 310 037 .ADDR Q.SLV ; BUFF TO PRINT
4479 010520 315 144 021 CALL PICKUP ; FETCH WHAT WAS TYPED
4480 010523 330 RC ; IF NOTHING TYPED, THEN WE ARE ALL DONE
4481
4482 ; ELSE FALL TO HERE TO GET THE SLAVE
4483
4484 010524 072 100 040 LDA TMPB2 ; GET THE NUMBER
4485 010527 062 362 040 STA DEN.SLV ; SET THE BYTE AS REQUIRED
4486 010532 311 RET ; AND ALL DONE
4487 010533 070 060 060 EIGHT0: .ASCIZ /800/ ; FOR 800 BPI TAPES
4488 010537 061 066 060 SIXTN: .ASCIZ /1600/ ; STRING FOR 1600 BPI TAPES
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 121
CMDS.M80 *** "MS" CMD ***
4490
4491 ; SOME SUBROUTINES FOR USE BY THE DEVICE SELECT COMMANDS.
4492 ; FIRST A ROUTINE TO READ IN A NUMBER TYPED IN ANSWER TO AN 8080 QUESTION
4493 ; AND SAVE THE NUMBER TYPED IN THE 36 BIT BUFFER "TMPB2". RETURNS C-BIT
4494 ; CLEAR IF A NUMBER WAS GATHERED AND STORED IN "TMPB2". RETURNS C-BIT SET
4495 ; IF NOTHING WAS TYPED.
4496
4497 010544 315 156 021 PICKUP: CALL INBUF ; SET UP THE INPUT BUFFER TO THE CURRENT TYPEIN
4498 010547 330 RC ; RETURNS HERE WITH C-BIT SET IF NOTHING TYPED
4499
4500 ; GET HERE IF SOMETHING WAS TYPED.. GO GET IT AND PUT IT IN "TMPB2"
4501
4502 010550 ARG36 ; GATHER A 36-BIT ARGUMENT
(1) 010550 347 RST 4
(1) 010551 010 .BYTE 8
4503 010552 100 040 .ADDR TMPB2 ; PUT IT IN THIS BUFFER
4504 010554 257 XRA A ; CLEAR C-BIT BECAUSE ALL WAS OK.
4505 010555 311 RET ; ALL DONE
4506
4507 ; SUBROUTINE TO FIX UP THE BUFFER POINTERS IN THE INPUT BUFFER
4508
4509 010556 041 204 040 INBUF: LXI H,EOL ; GET POINTER TO END-OF-LINE COUNTER
4510 010561 065 DCR M ; SO CAN DECREMENT
4511 010562 315 115 010 CALL BFRST ; RESET TTY INPUT POINTERS
4512 010565 052 215 040 LHLD BUF. ; FIND THE BEGINNING OF BUFFER
4513 010570 042 223 040 SHLD .ARG1 ; AND SET IT AS THE POINTER TO THE FIRST ARG
4514
4515 010573 041 201 021 LXI H,INRDY ; PASS A RETURN ADDRESS IN H,L
4516 010576 303 263 001 JMP NULLW ; ENTER TTY INPUT WAIT
4517
4518 010601 052 223 040 INRDY: LHLD .ARG1 ; GET POINTER TO THE START OF THE NEW DATA
4519 010604 315 241 033 FNDARG: CALL SEPCHR ; EAT UP ANY NO-OP SEPARATORS
4520 010607 042 223 040 SHLD .ARG1 ; REPLACE THE POINTER
4521 010612 303 330 032 JMP EOCML ; CHECK IF AT EOL. C-SET IF YES (IE NO ARG)
4522
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 122
CMDS.M80 *** "BT" CMD ***
4524 .SBTTL *** "BT" CMD ***
4525
4526 000077 INDIRECT=^O77
4527 010615 BOOT: PLINE BTMSG1 ; INCLUDE A MSG SO USERS KNOW YOU ARE BOOTING
(1) 010615 337 RST 3 ; PRINT LINE OF CHARS
(1) 010616 127 037 .ADDR BTMSG1 ; BUFF TO PRINT
4528 010620 BTAUT: PCRLF ; AND KEEP IT ON ONE LINE
(2) 010620 347 RST 4
(2) 010621 002 .BYTE 2
4529 010622 076 010 MVI A,^O10 ; BIT 32 IN TENLAND FOR BOOT BUTTON LOAD
4530 010624 062 255 040 STA GOCODE ; SAVE IN THE "GO CODE" PLACE
4531 010627 067 STC ; FALL THRU TO A "BT"
4532
4533 010630 315 312 021 BTCMD: CALL BTCHOICE ; GO SELECT MONITOR OR DIAG PRE-BOOT
4534 010633 315 247 022 BT.SRC: CALL MICROP ; READ PAGE OF FILE POINTERS INTO MEMORY @1000
4535
4536 ; WHEN GET TO HERE, THE PAGE HAS BEEN READ IN.
4537
4538 010636 332 161 032 JC C.BTERR ; ERROR IN BOOT PROCESS DURING MICRO-CODE LOAD
4539
4540 010641 315 027 023 CALL DMEM2CRAM ; LOAD DATA FROM MEMORY INTO CRAM
4541
4542
4543 ; FALL THRU IF DONE THE CRAM LOADING PORTION.
4544 ; NOW MUST READ IN THE BOOT CODE ITSELF, START THE SM10 MICRO-CODE AND
4545 ; THEN START THE BOOT PROGRAM AT ADDRESS 1000. NOW SET UP DISK POINTERS
4546 ; TO POINT TO BOOT BLOCK OF DISK, IN ORDER THAT WE LOAD THE MONITOR BOOT.
4547
4548 010644 315 263 021 LB.GO: CALL LBINT ; GO READ-IN THE APPROPRIATE BOOTSTRAP
4549 010647 LB.GO1: MOV5B ; SET UP A START ADDRESS
(1) 010647 347 RST 4
(1) 010650 000 .BYTE 0
4550 010651 230 022 .ADDR MA1000 ; MEMORY ADDRESS 1000 FOR STARTING PROGRAM
4551 010653 073 040 .ADDR TMPBF2 ; SET UP SO START COMMAND CAN FIND THE ADDRESS
4552
4553 ; TEMP CODE FOR FIGURING OUT HOW TO MAKE THE INTERNAL START CODE WORK
4554
4555 010655 303 070 017 JMP STINT ; GO START THE MACHINE WITH MONITOR BOOT
4556
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 123
CMDS.M80 *** "LB" CMD ***
4558 .SBTTL *** "LB" CMD ***
4559
4560 010660 315 312 021 LBCMD: CALL BTCHOICE ; IF ARG GIVEN, GO SET UP A CHOICE FOR THE BOOTING
4561 010663 021 000 002 LBINT: LXI D,^O1000 ; ALL POINTERS START AT 1000
4562 010666 072 172 040 LDA RM100 ; GET THE OFFSET AS SELECTED (MON OR DIAG PRE-BOOT)
4563 010671 203 ADD E ; ADD LO ORDER TO THE OFFSET
4564 010672 137 MOV E,A ; PUT IT BACK
4565 010673 315 252 022 CALL FILEINIT ; READ IN POINTERS TO THE "PRE-BOOTS"
4566
4567 010676 332 215 032 JC L.BTERR ; ERROR IN LOADING THE PRE-BOOT
4568
4569 010701 315 333 021 CALL BT.GO ; START UP THE MICRO-CODE & INTERNAL OFF
4570
4571 ; NOW PASS ADDRESSES OF RH BASE & DRIVE # TO THE PRE-BOOT PROGRAMS
4572
4573 010704 052 132 040 INFOBT: LHLD UNITNM ; UNIT NUMBER INTO HL REGISTER
4574 010707 303 060 022 JMP PASSSRC ; ROUTINE WHICH WRITES LOCS 36,37 & 40
4575
4576 ; CUTE LITTLE ROUTINE FOR SELECTING WHICH BOOT TO LOAD
4577
4578 010712 332 326 021 BTCHOICE: JC LOAD4 ; IF NO ARG, SET FOR "BOOT>" INPUT
4579
4580 010715 315 230 030 CALL ARG16. ; ASSEMBLE THE ARG
4581
4582 ; AS LONG AS IT WAS A NUMBER, WE WILL LOAD THE DIAG BOOT
4583
4584 010720 076 006 MVI A,6 ; A 6 IS THE OFFSET FOR THE DIAG PRE-BOOT
4585 010722 062 172 040 EXIT4: STA RM100 ; SAVE IT
4586 010725 311 RET
4587 010726 076 004 LOAD4: MVI A,4 ; PASS A 4.. TO SAY LOAD MONITOR BOOT
4588 010730 303 322 021 JMP EXIT4 ; AND COMMON EXIT
4589
4590 ; ROUTINE TO START UP THE MACHINE(KS10), AND RE-ESTABLISH THE PARITY DEFAULT
4591
4592 010733 315 161 016 BT.GO: CALL SM1 ; START THE MICRO-CODE
4593 010736 332 157 032 JC D.BTERR ; IF MICRO-CODE DOES NOT START
4594 010741 BT.GO1: INTOFF ; INTERNAL MODE OFF
(1) 010741 367 RST 6 ; GO EXIT FROM INTERNAL MODE
4595
4596 010742 076 174 MVI A,DEFLTE ; GET MACHINE DEFAULT VALUE FOR ENABLES
4597 010744 315 304 013 CALL KS.PAR ; SET THEM INTO THE RAM & WRITE INTO KS
4598 010747 076 020 MVI A,TRPDEF ; GET MACHINE DEFAULT FOR TRAP ENABLES
4599 010751 062 355 040 TP.SET: STA TRAPEN ; SET DEFAULT INTO THE RAM
4600 010754 323 205 OUT DIAG ; ***** I/O WRT 205/TRAPS ENABLE *****
4601 010756 311 RET ; AND OUT
4602
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 124
CMDS.M80 *** "MT" CMD ***
4604 .SBTTL *** "MT" CMD ***
4605
4606 010757 042 221 040 MTCMD: SHLD CMD.. ; SAVE WHAT COMMAND THIS IS, SO RETRYS WILL WORK
4607 010762 315 210 022 CALL MTSETUP ; GO TO SOME COMMON CODE
4608 010765 076 071 MVI A,READ.TAPE ; GET THE COMMAND EXECUTION CODE FOR THE TAPE CMD
4609 010767 315 362 024 CALL MTXFR ; AND READ-IN THE MICRO-CODE FROM TAPE
4610 010772 322 003 022 JNC MT.1 ; NO NEED TO CHECK IF FATAL ERR IF ALL OK
4611
4612 010775 315 140 022 CALL NONFATAL ; WAS AN ERROR, GO SEE WHAT KIND
4613 011000 302 165 032 JNZ A.BTERR ; ERR TYPE "A" IF INITIAL READ FAILS
4614
4615 011003 076 002 MT.1: MVI A,MT.BIT ; SET ACCUM .EQ. MAGTAPE BIT
4616 011005 315 031 023 CALL MEM2CRAM ; LOAD MICRO-CODE FROM MEMORY TO "CRAM" SPACE
4617
4618 011010 315 021 022 CALL MBINT ; NOW LOAD IN THE PRE-BOOT PROGRAM
4619 011013 315 333 021 CALL BT.GO ; START THE MICRO-CODE,REPLACE PARITY & TRAP DEFAULTS
4620 011016 303 247 021 JMP LB.GO1 ; AND PROCEED TO START THINGS
4621
4622 ; NOW MUST DO A RE-WIND.. SKIP FIRST FILE(MICRO-CODE), THEN READ-IN THE
4623 ; SECOND FILE (THE PRE-BOOT).
4624
4625 011021 076 031 MBINT: MVI A,SKP.TAPE ; GRAB A SKIP COMMAND
4626 011023 315 362 024 CALL MTXFR ; ISSUE A REWIND. AND A FILE-SKIP
4627
4628 ; NOW WE EXPECT THERE TO BE A FRAME COUNT ERROR FROM THE SPACE FORWARD
4629 ; AND WE WILL DO WHAT WE CAN TO IGNORE IT
4630
4631 011026 322 037 022 JNC MTSKOK ; IF NO ERROR AT ALL, THATS OK TOO
4632
4633 011031 315 140 022 CALL NONFATAL ; CHECK ERROR TYPE IF FALL INTO HERE
4634 011034 302 215 032 JNZ L.BTERR ; IF WAS NOT A FRAME COUNT ERROR, WAS MORE SERIOUS
4635
4636 ; IF COMPARE RESULT WAS ZERO, THEN THE ERROR WAS A FRAME COUNT ERROR
4637 ; AND WE WILL IGNORE IT BY FALLING INTO THE CONTINUE CODE
4638
4639 011037 076 071 MTSKOK: MVI A,READ.TAPE ; GET A TAPE READ COMMAND
4640 011041 315 373 024 CALL QMXFR ; EXECUTE TAP COMMAND LIST WITH NO REWIND IN IT
4641 011044 322 055 022 JNC PASSME ; NO ERROR IF NO "C" BIT
4642
4643 011047 315 140 022 CALL NONFATAL ; SEE WHAT KIND OF ERROR
4644 011052 302 215 032 JNZ L.BTERR ; BOOT ERROR IF NO Z
4645
4646 011055 052 137 040 PASSME: LHLD TAPEUNIT ; GET TAPE UNIT FOR CURRENT MAGTAPE SELECTION
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 125
CMDS.M80 *** "MT" CMD ***
4648
4649 ; NOW PASS INFO IN LO MEMORY ADDRESS SPOTS
4650
4651 011060 345 PASSSRC: PUSH H ; SAVE THE PASSED UNIT NUMBER ON TOP OF STACK
4652 011061 MOV5B ; PASS RH BASE ADDRESS TO INTERNAL BUFFER
(1) 011061 347 RST 4
(1) 011062 000 .BYTE 0
4653 011063 242 040 .ADDR RHBASE ; FROM HERE
4654 011065 047 040 .ADDR DMDAT ; TO HERE
4655 011067 041 051 040 LXI H,DMDAT+2 ; GET POINTER TO PIECE FOR UBA
4656 011072 072 254 040 LDA UBANUM ; GET CURRENT UBA
4657 011075 266 ORA M ; PUT IT INTO MEMORY
4658 011076 167 MOV M,A
4659
4660 011077 345 PUSH H ; SAVE THE POINTER TO "DMDAT" AREA
4661 011100 DEPOS 36 ; DEPOSIT IN MEMORY
(1) 011100 247 ANA A ; CLR "C-BIT" FOR USE BY COMMON CODE
(1) 011101 315 203 030 CALL DEPSHT ; AND DO THE DEPOSIT ASSUMING SHORT ADDR
(1) 011104 036 000 .ADDR 36 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
4662 011106 341 POP H ; GET BACK THE POINTER TO "DMDAT" AREA
4663 011107 066 000 MVI M,0 ; CLEAR BYTE WITH BITS 12-19
4664 011111 341 POP H ; GET THE UNIT NUMBER THAT WAS SAVED ON STACK
4665 011112 042 047 040 SHLD DMDAT ; AND PUT IT INTO THE DEPOSIT MEMORY DATA AREA
4666 011115 DEPOS 37 ; DEPOSIT IN MEMORY HERE
(1) 011115 247 ANA A ; CLR "C-BIT" FOR USE BY COMMON CODE
(1) 011116 315 203 030 CALL DEPSHT ; AND DO THE DEPOSIT ASSUMING SHORT ADDR
(1) 011121 037 000 .ADDR 37 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
4667
4668 011123 MOV5B ; FINALLY PASS DENSITY SLAVE INFORMATION
(1) 011123 347 RST 4
(1) 011124 000 .BYTE 0
4669 011125 362 040 .ADDR DEN.SLV ; GET IT FROM HERE
4670 011127 047 040 .ADDR DMDAT ; PUT IT HERE
4671 011131 DEPOS 40 ; AND MOS MEMORY HERE
(1) 011131 247 ANA A ; CLR "C-BIT" FOR USE BY COMMON CODE
(1) 011132 315 203 030 CALL DEPSHT ; AND DO THE DEPOSIT ASSUMING SHORT ADDR
(1) 011135 040 000 .ADDR 40 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
4672 011137 311 RET ; BACK TO CALLER
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 126
CMDS.M80 *** "MT" CMD ***
4674
4675 ; ROUTINE THAT CHECKS TO SEE WHAT KIND OF ERROR WE HAVE SUFFERED UNDER
4676 ; THE MAGTAPE TRANSFER
4677
4678 011140 076 332 NONFAT: MVI A,<^O377&FRMERR+2> ; CHK ERROR CODE FOR FATAL OR NON FATAL TYPES
4679 011142 041 154 040 LXI H,ERRCD ; NOW POINT TO ACTUAL ERROR TYPE THAT WE GOT
4680 011145 276 CMP M ; COMPARE THE TWO
4681 011146 365 PUSH PSW ; SAVE FLAGS WHILE WE RESET THE TAPE DRIVE
4682 011147 314 001 025 CZ MTRESET ; GO RESET ANY ERRORS ENCOUNTERED IN THE SKIP OP
4683 011152 361 POP PSW ; GET BACK THE FLAGS
4684 011153 310 RZ ; ONLY RETURN IF ERROR WAS NON FATAL
4685
4686 ; FALL TO HERE IF ERR WAS FATAL TYPE..SEE IF WE CAN RETRY IT
4687
4688 011154 076 327 MVI A,<^O377&RETRY.+2> ; "RETRYABLE" ERROR?
4689 011156 276 CMP M ; COMPARE
4690 011157 300 RNZ ; OUT IF CAN'T EVEN RETRY..DIE
4691
4692 ; AND HERE IF IT WAS RETRYABLE
4693
4694 011160 061 000 044 LXI SP,RAMST+^O2000 ; FIRST CLEAR THE STACK
4695 011163 041 277 003 LXI H,NORML ; PUT A RETURN ADDRESS ONTO THE STACK
4696 011166 345 PUSH H
4697
4698 011167 052 221 040 LHLD CMD.. ; NOW GET "WHICH" COMMAND TO RETRY
4699 011172 351 PCHL ; GIVE IT A GO
4700
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 127
CMDS.M80 *** "MB" CMD ***
4702 .SBTTL *** "MB" CMD ***
4703
4704 ; COMMAND TO LOAD ONLY THE BOOTSTRAP OFF OF THE CURRENTLY SELECTED MAGTAPE
4705
4706 011173 042 221 040 MBCMD: SHLD CMD.. ; SAVE WHICH COMMAND THIS IS
4707 011176 315 210 022 CALL MTSETUP ; GO TO SOME COMMON CODE TO SET UP FOR MAGTAPE XFER
4708 011201 315 021 022 CALL MBINT ; AND GO
4709 011204 315 333 021 CALL BT.GO ; START UP THE MICRO-CODE & INTERNAL OFF
4710 011207 311 RET ; BACK TO NULL JOB LOOP
4711
4712 ; SOME COMMON CODE THAT SETS UP PARAMETERS FOR MAGTAPE XFER'S..SAVES A FEW
4713 ; BYTES OF 8080 SPACE.
4714
4715 011210 315 001 023 MTSETUP: CALL BTINT ; FIRST SET UP FOR THE BOOTING PROCESS
4716 011213 072 356 040 LDA MTAUBA ; GET SELECTED UBA FOR MAGTAPE
4717 011216 062 254 040 STA UBANUM ; PASS TO COMMON SPOT FOR CHANNEL CMD LIST TO FIND
4718
4719 011221 MOV5B ; AND MOVE SELECTED MT BASE FOR RH BASE TO FIND
(1) 011221 347 RST 4
(1) 011222 000 .BYTE 0
4720 011223 367 040 .ADDR MTBASE ; SELECTED MAGTAPE RH BASE ADDRESS
4721 011225 242 040 .ADDR RHBASE ; COMMON RH BASE REGISTER LOCATION
4722 011227 311 RET ; BACK TO MAILINE
4723
4724 011230 MA1000: D 0,0,,1,000
4725 011235 HOMEWD: D 505,755,,000,000 ; "HOM" MEANS HOME BLOCK
4726 011242 ONES: D 777,777,,777,777 ; ALL ONES...
4727
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 128
CMDS.M80 FILE SYSTEM
4729 .SBTTL FILE SYSTEM
4730
4731 ; --PAGE OF POINTERS FORMAT--
4732 ; +0 POINTER TO FREE
4733 ; +1 LENGTH OF FREE
4734
4735 ; +2 POINTER TO MICRO-CODE
4736 ; +3 LENGTH OF MICRO-CODE
4737
4738 ; +4 POINTER TO MONITOR PRE-BOOT
4739 ; +5 LENGTH OF PRE-BOOT
4740
4741 ; +6 POINTER TO DIAG PRE-BOOT
4742 ; +7 LENGTH OF SAME
4743
4744 ; +10 POINTER TO BC1 MICRO-CODE
4745 ; +11 LENGTH OF SAME
4746
4747 ; +12 POINTER TO BC2 PRE-BOOT
4748 ; +13 LENGTH
4749
4750 ; +14 POINTER TO MONITOR BOOT PROGRAM
4751 ; +15 LENGTH OF SAME
4752
4753 ; +16 POINTER TO DIAGNOSTIC BOOT
4754 ; +17 LENGTH OF SAME
4755
4756 ; +20 POINTER TO BC2 ITSELF
4757 ; +21 LENGTH OF SAME
4758
4759 ; +22 POINTER TO FI-ABLE 0
4760 ; +23 LENGTH OF SAME
4761 ; .
4762 ; .
4763 ; .
4764 ; +776 POINTER TO FI-ABLE 366(8)
4765 ; +777 LENGTH OF SAME
4766
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 129
CMDS.M80 FILE SYSTEM
4768
4769 ; ROUTINE TO "FIND THE 8080 FILE SYSTEM", WHICH IS REALLY JUST A PAGE
4770 ; OF PHYSICAL POINTERS, TO PHYSICAL DISK LOCATIONS.
4771
4772 011247 021 002 002 MICROP: LXI D,^O1002 ; FOR MICROCODE, ALWAYS GO TO 2ND POINTER
4773 011252 325 FILEINIT: PUSH D ; SAVE POINTER INTO THE FILE PAGE
4774 011253 315 001 023 CALL BTINT ; AND SET UP TO DO A READIN
4775 011256 321 POP D ; RESTORE "D,E"..KLUDGY WAY TO MAKE SUBROUTINE
4776 011257 325 FILESH: PUSH D ; HAVE MULTIPLE ENTRY POINTS
4777 011260 315 012 023 CALL DSKDFT ; FETCH CURRENT DISK DEFAULTS
4778
4779 011263 041 000 000 LXI H,00 ; CLR "H,L"
4780 011266 042 112 040 SHLD BLKADR ; AND SET THE DESIRED CYLINDER TO 00
4781 011271 043 INX H ; BUMP H,L TO MAKE IT .EQ. 01
4782 011272 042 105 040 SHLD BLKNUM ; NOW SET THIS INTO THE BLOCK NUMBER(HOME BLOCK)
4783
4784 011275 315 356 022 CALL CHKHOM ; GO SEE IF THIS PAGE HAS THE "HOM" BLK I.D.
4785 011300 312 316 022 JZ GOODPK ; IF YES, JUMP TO CONTINUE READ-IN
4786
4787 ; FALL THRU IF FIRST HOME BLOCK NO GOOD
4788
4789 011303 076 010 MVI A,^O10 ; TRY ALTERNATE HOME BLOCK
4790 011305 062 105 040 STA BLKNUM ; SET BLOCK NUMBER TO ALTERNATE
4791
4792 011310 315 356 022 CALL CHKHOM ; TRY ALTERNATE
4793 011313 302 165 032 JNZ A.BTERR ; IF THIS ONES BAD, THEN GIVE UP
4794 011316 GOODPK: EXAM 1103 ; EXAMINE WORD WITH HOME BLOCK IN IT
(1) 011316 315 202 030 CALL EXAMSH ; AND DO EXAM ASSUMING SHORT ADDRESS
(1) 011321 103 002 .ADDR 1103 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
4795
4796 ; NOW THAT YOUVE READ HOME BLOCK, FIND POINTER FILE AND TRANSFER THE ENTIRE
4797 ; MICRO-CODE INTO MOS MEMORY. SHORT ROUTINE TO MOVE DATA FROM THE EMBUF
4798 ; INTO THE CHANNEL COMMAND LIST.
4799
4800 011323 315 336 022 CALL BLKRDR ; READ IN THE PAGE OF POINTERS FROM THE DISK
4801 011326 332 163 032 JC B.BTERR ; ERROR IN BOOT PROCESS DURING POINTER PAGE READ-IN
4802
4803 ; NOW EXAM THE REAL DESIRED DATA
4804
4805 011331 341 POP H ; FETCH UP THE FILE POINTER ADDRESS
4806 011332 067 STC ; SET SIGN WHICH INDICATES AND EXAMINE
4807 011333 315 211 030 CALL EXMHL ; AND READ IT IN TO MEM
4808
4809 ; SHORT ROUTINE TO MOVE DATA FROM THE EMBUF INTO THE CHANNEL COMMAND LIST
4810
4811 011336 052 015 040 BLKRDR: LHLD EMBUF+3 ; GET CYLINDER FROM SPECIAL HOME BLK PNTR
4812 011341 042 112 040 SHLD BLKADR ; SET CYLINDER IN CHANNEL COMMAND LIST
4813 011344 052 012 040 LHLD EMBUF ; GET TRACK SECTOR BYTE
4814 011347 042 105 040 SHLD BLKNUM ; SET INFO INTO THE TRCK/SECTOR WORD
4815
4816 011352 315 353 024 CALL DSXFR ; FINALLY READ THE FIRST PAGE OF THE DESIRED
4817 011355 311 RET
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 130
CMDS.M80 FILE SYSTEM
4819
4820 ; LITTLE ROUTINE TO READ IN THE HOME BLOCK, CHECK THAT IT IS A HOME BLOCK
4821 ; VIA THE "HOM" ID, AND RETURN Z-BIT SET IF IT IS.
4822
4823 011356 315 353 024 CHKHOM: CALL DSXFR ; EXECUTE DISK TRANSFER
4824 011361 332 165 032 JC A.BTERR ; BOOT ERROR "A", IF OOPS
4825
4826 011364 EXAM 1000 ; NOW EXAMINE THE HOME BLOCK ID
(1) 011364 315 202 030 CALL EXAMSH ; AND DO EXAM ASSUMING SHORT ADDRESS
(1) 011367 000 002 .ADDR 1000 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
4827 011371 315 016 033 CALL CMP36 ; AND TRY OUT A COMPARE
4828 011374 235 022 .ADDR HOMEWD ; EXPECTED ID
4829 011376 012 040 .ADDR EMBUF ; AGAINST WHAT WAS JUST READ IN
4830 011400 311 RET ; AND OUT
4831
4832 011401 BTINT: INTON ; SET INTERNAL MODE ON
(1) 011401 327 RST 2 ; GO SET INTERNAL MODE
4833 011402 CLRB PARBT ; NO PARITYS
4834 011404 CLRB TRAPEN ; AND NO TRAPS WHILE BOOTING
4835 011406 315 164 005 CALL MRCMD ; AND DON'T FORGET MR RESET
4836 011411 311 RET
4837
4838 ; LITTLE ROUTINE TO SET UP DISK DEFAULTS
4839
4840 011412 072 357 040 DSKDFT: LDA DSKUBA ; GET CURRENTLY SELECTED DISK UBA NUMBER
4841 011415 062 254 040 STA UBANUM ; SET INTO COMMAND LIST PLACE
4842
4843 011420 MOV5B ; AND SEND CURRENTLY SELECTED RHBASE
(1) 011420 347 RST 4
(1) 011421 000 .BYTE 0
4844 011422 374 040 .ADDR DSBASE ; CURRENT DISK RH BASE
4845 011424 242 040 .ADDR RHBASE ; TO PLACE FOR COMMAND LIST TO FIND IT
4846 011426 311 RET ; OUT
4847
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 131
CMDS.M80 CRAM LOADER CODE
4849 .SBTTL CRAM LOADER CODE
4850
4851 011427 076 001 DMEM2CR: MVI A,BT.BIT ; DO COUPLE ROUTINES A FAVOR, LOAD BIT
4852 011431 062 121 040 MEM2CR: STA BT.TYPE ; ACCUM HAD THE BOOTING TYPE..SAVE IT
4853 011434 041 000 000 LXI H,00 ; ZEROES TO "H,L"
4854 011437 345 PUSH H ; SAVE CURRENT CRAM ADDRESS
4855 011440 315 267 014 CALL CADWR ; AND THEN WRITE IT TO THE CRAM
4856 011443 076 007 MVI A,7 ; START WITH FUNCTION 7
4857 011445 062 010 040 STA CRMFN
4858 011450 NEWPAG: MOV5B ; INITIALIZE MEM ADDRESS
(1) 011450 347 RST 4
(1) 011451 000 .BYTE 0
4859 011452 230 022 .ADDR MA1000 ; WITH 1000 OCTAL
4860 011454 017 040 .ADDR MEMAD ; STANDARD MEM ADDRESS
4861
4862 ; CODE TO DECIDE IF WE NEED TO READ AN ADDITIONAL DISK SECTOR
4863
4864 011456 052 017 040 LHLD MEMAD ; GET CURRENT MOS MEM ADDRESS
4865 011461 175 RD.EXM: MOV A,L ; GET 8 BITS OF ADDRESS TO BE EXAMINED
4866 011462 323 103 OUT A2835 ; SET PIECE OF ADDRESS INTO ADDRESS REGISTER
4867 011464 174 MOV A,H ; GET COUPLE MORE BITS
4868 011465 323 105 OUT A2027 ; SET INTO CSL BOARD ADDRESS REGISTER
4869 011467 076 004 MVI A,4 ; SPECIAL KEY TO MAKE "EXAMINE" WORK CORRECTLY
4870 011471 315 000 012 CALL EM.CRM ; GO DO A MEMORY EXAMINE, OF THE SHORT FLAVOR
4871
4872 011474 052 012 040 LHLD EMBUF ; GET 16 BITS OF THE MEMORY DATA
4873 011477 174 MOV A,H ; COPY TO ACCUM, SO THAT WE CAN MAKE IT 12 BITS
4874 011500 346 017 ANI ^O17 ; CLR THE BITS
4875 011502 147 MOV H,A ; PUT BACK INTO THE HI ORDER REG
4876
4877 011503 315 232 014 CALL WFUNC ; WRITE THE PIECE
4878 011506 041 010 040 LXI H,CRMFN ; GET CURRENT DIAG FUNCTION
4879 011511 065 DCR M ; DOWN COUNT
4880
4881 011512 052 013 040 LHLD EMBUF+1 ; GET 16 BITS OF THE MEMORY READ
4882
4883 011515 016 004 MVI C,4 ; NOW A QUICK LITTLE LOOP
4884 011517 257 XRA A ; CLR ACCUM TEMP
4885 011520 174 QQLOOP: MOV A,H ; COPY TO ACCUM
4886 011521 037 RAR ; ROTATE INTO THE C-BIT
4887 011522 147 MOV H,A ; PUT IT BACK
4888
4889 011523 175 MOV A,L ; TRY BOTTOM PIECE
4890 011524 037 RAR ; ROTATE C-BIT INTO THE TOP
4891 011525 157 MOV L,A ; PUT IT BACK
4892 011526 015 DCR C ; DOWN THE LITTLE COUNTER
4893 011527 302 120 023 JNZ QQLOOP ; CONTINUE
4894
4895 011532 315 232 014 CALL WFUNC ; WRITE THIS PIECE
4896 011535 041 010 040 LXI H,CRMFN ; DOWN THE FUNCTION COUNTER
4897 011540 065 DCR M ; DECREMENT
4898 011541 362 167 023 JP BBLOOP ; JUMP AROUND THIS STUFF IF NOT AT FUNCTION 0
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 132
CMDS.M80 CRAM LOADER CODE
4900
4901 ; IF DONE FUNCTIONS 0-7, TRY A LITTLE RESET
4902
4903 011544 076 007 MVI A,7 ; RESTART AT FUNCTION 7
4904 011546 062 010 040 STA CRMFN ; SAVE IT
4905
4906 ; HERE IF FINSHED A CRAM WORD & NEED TO DO RESET.
4907
4908 011551 341 POP H ; GET CRAM ADDRESS
4909 011552 043 INX H ; UPDATE
4910 011553 345 PUSH H
4911 011554 315 267 014 CALL CADWR ; NOW WRITE THIS, THE NEXT CRAM ADDRESS
4912 011557 174 MOV A,H ; NOW GET HI ORDER PIECE OF CRAM ADDR
4913 011560 346 010 ANI ^O10 ; IS IT .EQ. 4000 OCTAL YET?
4914 011562 312 205 023 JZ SEEPAGE ; IF NOT 4000 OCTAL YET, CHECK FOR A NXT WORD
4915 011565 341 POP H ; AND RESTORE STACK BEFORE LEAVING
4916 011566 311 RET ; OTHERWISE ALL DONE
4917
4918 011567 052 015 040 BBLOOP: LHLD EMBUF+3 ; GRAB 16 BITS OF THE MEMORY DATA
4919 011572 174 MOV A,H ; PASS 8 BITS TO ACCUM, SO WE CAN MAKE IT 4 BITS
4920 011573 346 017 ANI ^O17 ; OFF UNNEEDED BITS
4921 011575 147 MOV H,A ; PUT IT BACK
4922 011576 315 232 014 CALL WFUNC ; WRITE THIS DATUM
4923 011601 041 010 040 LXI H,CRMFN ; GET FUNCTION
4924 011604 065 DCR M ; DOWN TO NEXT FUNCTION
4925
4926 011605 052 017 040 SEEPAGE: LHLD MEMAD ; GET THE CURRENT MEMORY ADDRESS
4927 011610 043 INX H ; GO TO NEXT ADDRESS
4928 011611 042 017 040 SHLD MEMAD ; SAVE THIS NEXT ADDRESS
4929 011614 174 MOV A,H ; TEST H FOR AT "2000"
4930 011615 346 004 ANI ^O4 ; IF "2000" WEIGHT BIT SET, TIME FOR NEW PAGE OF DATA
4931 011617 312 061 023 JZ RD.EXM ; IF MEM ADDRESS .EQ. 2000, THEN FALL THRU TO NEXT READIN
4932 011622 315 230 023 CALL NEXTCR ; ROUTINE TO FETCH NEXT PAGE OF CRAM DATA
4933 011625 303 050 023 JMP NEWPAG ; AND BACK TO BEGINNING
4934
4935 ; ELSE, MUST READ IN ANOTHER PAGE'S WORTH FROM CURRENT BOOT DEVICE
4936
4937 011630 072 121 040 NEXTCR: LDA BT.TYPE ; FIND OUT WHAT KIND OF DEVICE WE ARE BOOTING FROM
4938 011633 376 001 CPI BT.BIT ; SEE IF DOING BOOT FROM THE DISK
4939 011635 302 252 023 JNZ TAPDEV ; IF FLAG .NE. BT.BIT, THEN BOOTING FROM MAGTAPE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 133
CMDS.M80 CRAM LOADER CODE
4941
4942 ; FALL THRU TO DO BOOT FROM DISK
4943
4944 011640 041 135 036 LXI H,QXFR ; SET UP FOR THE QUICK XFR COMMAND LIST
4945 011643 315 007 025 CALL CHNXCT ; READ IN, SHORT FORMAT(TRK/SEC/CYL IS PRESET)
4946 011646 332 161 032 JC C.BTERR ; ERROR IN READING CRAM
4947 011651 311 RET ; BACK TO CALLER
4948
4949 ; JUMP TO HERE TO DO BOOT FROM TAPE
4950
4951 011652 076 071 TAPDEV: MVI A,READ.TYPE ; PASS TO CHANNEL CMD LIST EXECUTOR THE XFR TYPE
4952 011654 315 373 024 CALL QMXFR ; READ IN A SINGLE PAGE FROM MAGTAPE
4953 011657 320 RNC ; IF NOTHING BAD, RETURN
4954 011660 315 140 022 CALL NONFATAL ; IF BADNESS, SEE IF FATAL KIND OR NOT
4955 011663 302 161 032 JNZ C.BTERR ; ERROR IN READING THE CRAM
4956 011666 311 RET ; BACK TO CALLER
4957
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 134
CMDS.M80 *** "FI" CMD ***
4959 .SBTTL *** "FI" CMD ***
4960
4961 ; COMMAND TO READ IN A PARTICULAR PAGE OF THE FILESYSTEM AND TO EXECUTE ITS
4962 ; CONTENTS AS IF THEY WERE TYPED IN 8080 COMMANDS.
4963
4964 011667 315 230 030 FICMD: CALL ARG16. ; COLLECT IT WHEN ITS THERE
4965
4966 ; BEWARE..IF YOU TYPE FI WITH A BOGUS ARGUMENT, THEN YOU LOSE..
4967 ; HE WHO USES THE FI CMD BEST KNOW WHAT HE'S DOING.
4968
4969 011672 021 022 002 LXI D,^O1022 ; START WITH OFFSET "0" INTO THE "FI" FILES
4970 011675 031 DAD D ; ADD THIS TO NUMBER TYPED TO GET THE DESIRED
4971 011676 315 252 022 CALL FILEINIT ; READ IN THE DESIRED PAGE
4972 011701 332 215 032 JC L.BTERR ; IF ERR
4973
4974 ; NOW DO SOMETHING WITH THE STUFF TYPED...
4975
4976 011704 MOV5B ; FIRST MUST GET INFO FROM MOS MEM TO 8080 RAM
(1) 011704 347 RST 4
(1) 011705 000 .BYTE 0
4977 011706 230 022 .ADDR MA1000 ; INFO STARTS AT MOS MEM LOC 1000
4978 011710 017 040 .ADDR MEMAD ; AND WE WILL TELL INTERNAL READER TO START THERE
4979
4980 011712 021 253 041 LXI D,E.BEG+2 ; A PLACE TO STORE ASCII BYTES FROM MEMORY
4981 011715 FI.GET: INTON ; NO PRINTING
(1) 011715 327 RST 2 ; GO SET INTERNAL MODE
4982 011716 315 216 024 CALL GATHER ; GO READ IN A WORD FROM MOS MEM
4983 011721 INTOFF ; OK TO PRINT NOW
(1) 011721 367 RST 6 ; GO EXIT FROM INTERNAL MODE
4984 011722 056 004 MVI L,4 ; NOW ONLY 4 BYTES PER WORD ARE USEFUL
4985 011724 001 012 040 LXI B,EMBUF ; AND THIS IS WHERE IN 8080 RAM THE BYTES ARE
4986 011727 012 FI.MOV: LDAX B ; FETCH UP A BYTE
4987 011730 022 STAX D ; PUT IT IN PLACE
4988 011731 376 377 CPI ^O377 ; IS IT END OF STRING?
4989 011733 302 344 023 JNZ FI.NXT ; IF NO, GO MOVE SOME MORE
4990
4991 011736 315 340 034 CALL MV.ALL ; GOT HERE, MOVE TO EXECUTE BUFFER
4992 011741 303 145 002 JMP DCODE ; AND GO DO IT
4993
4994 ; NOPE.. MOVE SOME MORE
4995
4996 011744 003 FI.NXT: INX B ; UPDATE THE POINTERS
4997 011745 023 INX D
4998 011746 055 DCR L ; CHECK COUNT TO SEE IF WE'VE DONE 4 YET
4999 011747 302 327 023 JNZ FI.MOV ; IF NOT, GO MOVE NEXT BYTE FROM CURRENT WORD
5000 011752 303 315 023 JMP FI.GET ; YES, READ NEXT MEM WORD AND TRY IT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 135
CMDS.M80 *** "FI" CMD ***
5002
5003 ;;**********PROPOSED INSTRUCTION ********************
5004 ;
5005 ; .SBTTL *** "B1" CMD ***
5006 ;
5007 ;; COMMAND TO READ IN A SECOND TYPE OF MICRO-CODE AND EXECUTE IT..
5008 ;; I.E. BOOTCHECK 1 MICRO-CODE
5009 ;
5010 ;B1CMD: LXI D,^O1010 ; GET THE CORRECT OFFSET
5011 ; CALL FILEINIT ; READ IN THE FIRST PAGE
5012 ; JC C.BTERR ; IF ERR
5013 ;
5014 ; MVI A,BT.BIT ; SAY THAT THIS IS A LOAD FROM DISK
5015 ; CALL MEM2CRAM ; READ IT IN AS MICRO-CODE
5016 ; CALL BT.GO ; START IT UP
5017 ; RET ; THAT IT
5018 ;
5019
5020 .SBTTL *** "B2" CMD ***
5021
5022 ; BOOTCHECK 2.. THIS LOADS IN A SEPARATE "PRE-BOOT", WHICH
5023 ; LOADS IN THE BOOT CHECK 2.
5024
5025 011755 076 012 B2CMD: MVI A,^O12 ; GET THE OFFSET
5026 011757 062 172 040 STA RM100 ; SAVE IT SO WE CAN USE SOME SUPER COMMON CODE
5027 011762 303 233 021 JMP BT.SRC ; THAT'S IT!!!!
5028
5029 .SBTTL *** "VD" CMD ***
5030
5031 ; COMMAND TO VERIFY THE CONTENTS OF THE C-RAM AGAINST THE MICRO-CODE
5032 ; AS IT SITS ON DISK.
5033
5034 011765 315 247 022 VDCMD: CALL MICROP ; NOW READ IN HOME BLOCKS, THEN 1ST PAGE OF U-CODE
5035 011770 332 161 032 JC C.BTERR ; IF ERROR, GO TELL WORLD ABOUT IT
5036
5037 011773 076 001 MVI A,BT.BIT ; WENT OK.. SPECIFY A DISK TYPE OPERATION
5038 011775 303 015 024 JMP VERCRAM ; AND GO IN TO VERIFY THE CRAM
5039
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 136
CMDS.M80 *** "VT" CMD ***
5041 .SBTTL *** "VT" CMD ***
5042
5043 ; COMMAND TO VERIFY THE CONTENTS OF THE C-RAM AGAINST THE MICRO-CODE
5044 ; AS IT SITS ON MAG TAPE.
5045
5046 012000 315 210 022 VTCMD: CALL MTSETUP ; GO TO SOME COMMON CODE TO LOOK AT MAGTAPES
5047 012003 076 071 MVI A,READ.TAPE ; TELL CHANNEL LISTER TO DO A READ IN
5048 012005 315 362 024 CALL MTXFR ; READ IN FIRST PAGE OF U-CODE OFF THE TAPE
5049 012010 332 165 032 JC A.BTERR ; IF ERROR, GO REPORT IT
5050
5051 012013 076 002 MVI A,MT.BIT ; WENT OK.. SPECIFY A TAPE OPERATION
5052
5053 ; FALL STRAIGHT INTO THE CODE TO VERIFY THE CRAM
5054
5055 .SBTTL VERIFY CRAM CODE
5056
5057 ; ROUTINES THAT DO READ INS FROM THE CURRENTLY SELECTED DEVICE AND COMPARES
5058 ; THAT HARD MICRO-CODE DATA AGAINST THE CURRENT CONTENTS OF THE CONTROL-STORE.
5059
5060 012015 VERCRAM:
5061 012015 062 121 040 STA BT.TYPE ; BEGIN BY SAVING DEVICE AGAINST WHICH WE WILL VERIFY
5062
5063 012020 MOV5B ; START BY SETTING MEMORY ADDRESS AT 1000
(1) 012020 347 RST 4
(1) 012021 000 .BYTE 0
5064 012022 230 022 .ADDR MA1000 ; A "1000"
5065 012024 017 040 .ADDR MEMAD ; PLACE WHERE MEM ADDRESS IS KEPT
5066 012026 041 000 000 LXI H,00 ; BEGIN WITH CRAM ADDRESS 00
5067 012031 042 004 040 SHLD CRMAD ; SET CRAM ADDRESS TO ZEROES
5068 012034 303 047 024 JMP V.GO ; ENTER LOOP AT THE PROPER PLACE
5069
5070 012037 052 004 040 V.DONWD: LHLD CRMAD ; GET CURRENT CRAM ADDRESS
5071 012042 043 INX H ; AND UPDATE FOR NEXT TIME AROUND
5072 012043 174 MOV A,H ; PUT HI ORDER PIECE OF IT INTO ACCUM
5073 012044 346 010 ANI ^O10 ; SEE IF AT END OF CRAM YET
5074 012046 300 RNZ ; IF IT IS, ALL DONE, GO OUT
5075
5076 ; HERE IF REALLY READY TO DO A CRAM LOC
5077
5078 012047 315 267 014 V.GO: CALL CADWR ; WRITE IT TO CRAM, BE IT GOOD OR BAD
5079 012052 042 004 040 SHLD CRMAD ; NOW SAVE ADDRESS WHILE WE DO SOME STUFF
5080 012055 315 127 013 CALL CP1 ; SINGLE CLOCK GETS CRAM CONTENTS TO CONTROL REG
5081 012060 315 370 014 CALL RCINT ; READ IN CONTENTS OF C-RAM AND SAVE IN 8080 RAM
5082
5083 ; HERE WHEN CRAM DATA IS SAFELY TUCKED AWAY IN THE 8080 RAM
5084
5085 012063 001 171 024 LXI B,VERLST ; B,C PAIR POINTS TO LIST OF DATA OFFSETS
5086 012066 021 302 040 LXI D,CRMBF ; D,E PAIR POINTS TO ACTUAL DATA LIST (H,L PNTS EXPECTED)
5087
5088 012071 315 216 024 V.NXMEM: CALL GATHER ; HERE TO CALL ROUTINE THAT READS IN THE NEXT MEM WORD
5089 012074 076 003 MVI A,3 ; AND TAKE TIME OUT TO RESET THE 3 COUNTER
5090 012076 062 253 040 STA VERCNT ; SET UP A CLEAN COUNT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 137
CMDS.M80 VERIFY CRAM CODE
5092
5093 ; AND HERE BELOW BEGINS THE ACTUAL DATA COMPARES
5094
5095 012101 012 V.BLP: LDAX B ; GET THE FIRST INDEX BYTE FROM THE LIST OF BYTES
5096 012102 346 077 ANI ^O77 ; OFF THE SIGNALS, AND CONTINUE
5097 012104 052 012 040 V.BLP1: LHLD EMBUF ; GET EXPECTED DATA INTO H,L REGISTER
5098 012107 003 INX B ; UPDATE B,C TO POINT AT FUNCTION READ
5099 012110 203 ADD E ; ADD AS AN OFFSET TO THE D,E PAIR
5100 012111 137 MOV E,A ; PUT THE GOOD ADDR BACK INTO "E"
5101 012112 172 MOV A,D ; AND GRAB THE HI ORDER FOR A SEC
5102 012113 316 000 ACI 0 ; ADD IN THE CARRY IF REQUIRED
5103 012115 127 MOV D,A ; PUT THE HI ORDER BACK AGAIN
5104
5105 012116 032 LDAX D ; NOW LOAD IN THE FIRST "ACTUAL" DATUM
5106 012117 023 INX D ; UPDATE POINTER TO ACTUAL
5107 012120 275 CMP L ; COMPARE AGAINST EXPECTED
5108 012121 302 132 024 JNZ V.ERR ; REPORT IF BADNESS
5109
5110 012124 174 MOV A,H ; GET UPPER 12 BITS OF THE EXPECTED
5111 012125 346 017 ANI ^O17 ; IF DATA WAS EQUAL, ONLY DISCREPENCY CAN BE IN B7-B4
5112
5113 012127 147 MOV H,A ; GET THE 4 BITS OF DATA LEFT AFTER THE "AND"
5114 012130 032 LDAX D ; GET THE ACTUAL DATA TO ACCUM
5115 012131 274 CMP H ; SEE IF SAME AND B3-B0 SHOULD BE
5116 012132 304 260 024 V.ERR: CNZ VERRPT ; ZERO. IF NOT REPORT AS ERROR
5117 012135 033 DCX D ; FIX D TO LOOK AT BEGINNING OF "ACTUAL" 2 BYTES
5118
5119 ; NOW NEED TO CHOOSE IF NEED CHECK TWICE(FOR DOUBLE COPIES), OR IF END
5120 ; OF LIST FOR THIS CRAM WORD
5121
5122 012136 003 INX B ; UPDATE POINTER INTO THE INDEXER LIST
5123 012137 012 LDAX B ; GET THE NEXT INDEX BYTE
5124 012140 027 RAL ; COPY SIGN INTO C-BIT
5125 012141 332 037 024 JC V.DONWD ; IF SET, END OF LIST.. GO DO NEXT CRAM WORD
5126
5127 012144 027 RAL ; WASN'T END OF LIST.. SEE IF A DOUBLE CHECKER
5128 012145 332 101 024 JC V.BLP ; JUMP BACK TO MAIN LOOP WITHOUT UPDATING IF YES
5129
5130 ; IF NOT A DOUBLE, MUST FALL THROUGH TO UPDATE EXPECTED
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 138
CMDS.M80 VERIFY CRAM CODE
5132
5133 ; HERE WHEN MUST UPDATE EXPECTED..NOT A DOUBLE COPY
5134
5135 012150 041 253 040 V.NXT: LXI H,VERCNT ; LOAD CURRENT COUNT FOR HOW MANY COMPARE PER MEM WORD
5136 012153 065 DCR M ; DECREMENT THAT COUNT
5137 012154 312 071 024 JZ V.NXMEM ; IF DOWN TO ZERO, GO READ IN THE NEXT MEMORY WORD
5138
5139 012157 041 012 040 LXI H,EMBUF ; TELL SHR36 WHERE IT SHOULD SHIFT
5140 012162 315 140 031 CALL SHR36 ; IF NOT DOWN, SHIFT WHAT WE HAVE TO NEXT 12 BIT GRP
5141 012165 014 .BYTE 12. ; SPECIFY THE NEXT 12 BIT GROUP IS WHAT WE WANT
5142 012166 303 101 024 JMP V.BLP ; AND CONTINUE IN THE BIG LOOP
5143
5144 ; LIST OF INDEXER BYTES
5145
5146 .RADIX 8
5147 012171 000 017 VERLST: .BYTE 0,17 ; READ FCN 17 (BITS 84-95)
5148 012173 002 016 .BYTE 2,16 ; READ FCN 16 (BITS 72-83)
5149 012175 002 015 .BYTE 2,15 ; READ FCN 15 (BITS 60-71)
5150 012177 002 014 .BYTE 2,14 ; READ FCN 14 (BITS 48-59)
5151 012201 002 013 .BYTE 2,13 ; READ FCN 13 (BITS 36-47)
5152 012203 102 012 .BYTE 102,12 ; READ FCN 12 (BITS 36-47) SECOND COPY
5153 012205 010 006 .BYTE 10,6 ; READ FCN 6 (BITS 24-35)
5154 012207 102 005 .BYTE 102,5 ; READ FCN 5 (BITS 24-35) SECOND COPY
5155 012211 002 004 .BYTE 2,4 ; READ FCN 4 (BITS 12-23)
5156 012213 010 000 .BYTE 10,0 ; READ FCN 0 (BITS 00-11)
5157 012215 200 .BYTE 200 ; END OF LIST MARKER
5158 .RADIX 10
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 139
CMDS.M80 VERIFY CRAM CODE
5160
5161 ; SUBROUTINE TO READ IN THE NEXT WORD FROM MEMORY.
5162 ; ALSO CHECKS TO SEE IF AT THE END OF THE MEMORY PAGE(ADDR 1777), AND IF SO
5163 ; TO GO AND READ IN THE NEXT PAGE OF MICRO-CODE FROM THE DEVICE AGAINST
5164 ; WHICH WE ARE VERIFYING THE MICRO-CODE.
5165
5166 012216 325 GATHER: PUSH D
5167 012217 305 PUSH B
5168
5169 012220 052 017 040 LHLD MEMAD ; GET CURRENT MEMORY ADDRESS
5170 012223 345 PUSH H ; SAVE CURRENT MEM ADDRESS
5171
5172 012224 174 MOV A,H ; GET THE HI ORDER PIECE OF THE MEM ADDRESS
5173 012225 346 004 ANI ^O4 ; SEE IF ADDRESS AT "2000" YET
5174 012227 312 245 024 JZ G.SKP ; IF NOT, SIMPLY GO READ IN THE NEXT WORD
5175
5176 ; ELSE MUST READ IN THE NEXT PAGE OF MICRO-CODE
5177
5178 012232 315 230 023 CALL NEXTCR ; DO THE READ IN
5179
5180 012235 341 POP H ; GET OLD CRUMMY H,L OFF THE STACK
5181 012236 041 000 002 LXI H,^O1000 ; WANT TO RESET MEM ADDRESS TO BEGINNING OF PAGE
5182 012241 345 PUSH H ; PUT BACK ON STACK
5183 012242 042 017 040 SHLD MEMAD ; AND PASS NEW ADDRESS IN RAM
5184 012245 315 361 011 G.SKP: CALL EM2 ; EXAMINE THE NEXT MEMORY WORD
5185 012250 341 POP H ; GRAB THE ADDRESS WE WANT TO READ NEXT TIME
5186 012251 043 INX H ; UPDATE TO NEXT
5187 012252 042 017 040 SHLD MEMAD ; PUT IT BACK
5188 012255 301 POP B ; RESTORE THE REGS NOW
5189 012256 321 POP D
5190 012257 311 RET ; AND OUT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 140
CMDS.M80 VERIFY CRAM CODE
5192
5193 ; VERIFY ERROR REPORTER SUBROUTINE. REPORTS VERIFY ERRORS AS THEY HAPPEN
5194 ; AND THEN PERMITS THE VERIFIER TO CONTINUE VERIFYING THE REST OF THE CRAM.
5195
5196 012260 345 VERRPT: PUSH H ; SAVE CONTENTS OF H,L PAIR
5197 012261 325 PUSH D ; MUST ALSO SAVE D,E
5198 012262 INTOFF ; PRINT ALL THIS GOOD STUFF
(1) 012262 367 RST 6 ; GO EXIT FROM INTERNAL MODE
5199
5200 012263 041 004 040 LXI H,CRMAD ; THEN PRINT CRAM ADDRESS OF THE FAILING CRAM WORD
5201 012266 315 303 030 CALL P16 ; AND PRINT OUT THE ADDRESS
5202
5203 012271 PSLASH ; THROW OUT A "/"
(2) 012271 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 012272 057 .BYTE SLASH ; CHAR TO PRINT
5204
5205 012273 012 LDAX B ; FETCH UP THE DIAG FUNC OF THE READ FAILURE
5206 012274 315 270 030 CALL P8BITA ; AND PRINT IT
5207
5208 012277 PCHAR ': ; SIMPLE CHARACTERS ARE ": A "
(1) 012277 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 012300 072 .BYTE ': ; CHAR TO PRINT
5209 012301 PSPACE
(2) 012301 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 012302 040 .BYTE SPACE ; CHAR TO PRINT
5210 012303 PCHAR 'A
(1) 012303 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 012304 101 .BYTE 'A ; CHAR TO PRINT
5211 012305 PSPACE
(2) 012305 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 012306 040 .BYTE SPACE ; CHAR TO PRINT
5212
5213 012307 353 XCHG ; AND NOW H,L POINTS AT THE ACTUAL
5214 012310 053 DCX H ; NOW D,E POINTS TO THE ACTUAL
5215 012311 315 303 030 CALL P16 ; PRINT THE ACTUAL DATA
5216 012314 353 XCHG ; FIX SO H,L POINTS AT TEMP LOC ONCE AGAIN
5217
5218 012315 PSPACE ; ANOTHER SPACE
(2) 012315 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 012316 040 .BYTE SPACE ; CHAR TO PRINT
5219 012317 PCHAR 'E ; A "W" STANDS FOR "WAS"
(1) 012317 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 012320 105 .BYTE 'E ; CHAR TO PRINT
5220 012321 PSPACE
(2) 012321 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 012322 040 .BYTE SPACE ; CHAR TO PRINT
5221
5222 012323 052 012 040 LHLD EMBUF ; GET THE EXPECTED DATA INTO H,L PAIR
5223 012326 174 MOV A,H ; WANT TO STRIP ANY BITS ABOVE 12 BITS
5224 012327 346 017 ANI ^O17 ; KEEP ONLY RELEVANT BITS
5225 012331 147 MOV H,A ; PUT IT BACK
5226 012332 042 100 040 SHLD TMPB2 ; PUT IT IN THE TEMP PLACE
5227 012335 315 300 030 CALL P16. ; PRINT THE EXPECTED
5228 012340 PCRLF
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 140-1
CMDS.M80 VERIFY CRAM CODE
(2) 012340 347 RST 4
(2) 012341 002 .BYTE 2
5229
5230 012342 305 PUSH B ; SAVE B REG TOO
5231 012343 315 174 034 CALL DECNET ; IF THERE IS A HOST, TELL HIM TOO
5232 012346 301 POP B
5233 012347 INTON ; AND BACK TO INTERNAL MODE
(1) 012347 327 RST 2 ; GO SET INTERNAL MODE
5234 012350 321 POP D
5235 012351 341 POP H
5236 012352 311 RET
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 141
CMDS.M80 VERIFY CRAM CODE
5238
5239 ; EXECUTE CHANNEL COMMANDS....
5240
5241 012353 041 041 036 DSXFR: LXI H,DSKSEQ ; PNTR TO COMMAND LIST
5242 012356 315 007 025 XCTNOW: CALL CHNXCT ; EXECUTE CHANNEL LIST
5243 012361 311 RET
5244
5245 012362 041 204 036 MTXFR: LXI H,MTASEQ ; PNTR TO COMMAND LIST
5246 012365 062 144 040 XCTMTA: STA SKP.GO ; ACCUM HAD XFR TYPE..SAVE IT
5247 012370 303 356 024 JMP XCTNOW ; GO EXECUTE THE CHANNEL COMMAND LIST
5248
5249 012373 041 264 036 QMXFR: LXI H,QTXFR ; PNTR TO COMMAND LIST
5250 012376 303 365 024 JMP XCTMTA ; GO EXECUTE THE CHANNEL COMMAND LIST
5251
5252 012401 041 352 036 MTRESET: LXI H,MTARST ; CHANNEL CMD LIST TO CLEAR ERROR FROM MAGTAPE
5253 012404 303 356 024 JMP XCTNOW ; GO EXECUTE THE CHANNEL COMMAND LIST
5254
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 142
CMDS.M80 CHANNEL COMMAND LIST EXECUTOR
5256 .SBTTL CHANNEL COMMAND LIST EXECUTOR
5257
5258 ; ROUTINE TO A CHANNEL COMMAND LIST TYPE OPERATION, FOR DATA TRANSFERS FROM
5259 ; OUR SELECTED BOOT DEVICE. COMMAND LIST IS CODED AS FOLLOWS:
5260 ;
5261 ; THE LIST IS A SERIES OF 36-BIT COMMANDS.
5262 ; WE HAVE FREE USE OF BITS 0-17 AS COMMAND TYPES
5263 ;
5264 ; BITS 15,16,17 .EQ. 0 MEAN "DI" COMMAND
5265 ; BITS 15,16,17 .EQ. 1 MEAN "LI" COMMAND
5266 ; BITS 15,16,17 .EQ. 2 MEAN "EI" COMMAND
5267 ; BITS 15,16,17 .EQ. 3 MEAN "WAIT" COMMAND
5268 ; BITS 15,16,17 .EQ. 4 MEAN "ERRTST" COMMAND
5269 ; BITS 15,16,17 .EQ. 5 MEAN "END" OF COMMAND LIST
5270 ; BITS 15,16,17 .EQ. 6 MEAN "TWAIT" COMMAND
5271 ; BITS 15,16,17 .EQ. 7 MEAN "UBA" COMMAND
5272
5273 ; POINTER TO THE CURRENT COMMAND LIST IS ALWAYS STORED IN H,L
5274
5275 012407 CHNXCT: INTON ; SET UP FOR INTERNAL MODE
(1) 012407 327 RST 2 ; GO SET INTERNAL MODE
5276 012410 305 PUSH B
5277 012411 325 PUSH D
5278 012412 345 PUSH H
5279
5280 012413 021 002 000 DSCON: LXI D,2 ; "D,E" GETS THE CONSTANT "2"
5281 012416 031 DAD D ; NOW "H,L" POINTS TO "DATA+2"(BITS 12-19)
5282
5283 012417 104 MOV B,H ; COPY "H,L" INTO "B,C"
5284 012420 115 MOV C,L
5285 012421 345 PUSH H ; SAVE "H,L"
5286 012422 176 MOV A,M ; GET BITS 12-19 INTO ACCUM
5287
5288 012423 037 RAR ; NOW JUSTIFY ACCUM AT BITS 16,17
5289 012424 037 RAR ; TAKES 2 SHIFTS
5290 012425 346 017 ANI ^O17 ; OFF ALL BUT BITS 14,15,16,17
5291 012427 137 MOV E,A ; NOW PUT INTO LO-ORDER HALF OF DOUBLE REG
5292 012430 041 052 025 LXI H,DSLST ; GET A PNTR TO THE DISPATCHING LIST
5293 012433 031 DAD D ; CREAT PNTR TO THE COMMAND
5294
5295 012434 136 MOV E,M ; GET LO ORDER PIECE OF CMD DISPATCH
5296 012435 043 INX H
5297 012436 126 MOV D,M ; GET HI ORDER PIECE OF CMD DISPATCH
5298 012437 353 XCHG ; ASSEMBLED ADDRESS TO "H,L"
5299 012440 021 045 025 LXI D,XFRRT ; NOW GET A PSEUDO RETURN PC TO PUT ON STACK
5300 012443 325 PUSH D ; AND PUT IT THERE
5301
5302 012444 351 PCHL ; DISPATCH TO THAT ASSEMBLED ADDRESS
5303
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 143
CMDS.M80 CHANNEL COMMAND LIST EXECUTOR
5305
5306 ; UPON COMPLETION OF THE COMMAND LIST COMMANDS, YOU GENERALLY
5307 ; RETURN HERE IN THE CODE.
5308
5309 012445 341 XFRRT: POP H ; GET POINTER TO CURRENT LOCATION IN CMD LIST
5310 012446 043 INX H ; MAKE IT POINT TO NEXT WORD IN THE LIST
5311 012447 303 013 025 JMP DSCON ; AND CONTINUE IN COMMAND LIST EXECUTOR
5312
5313 ; COMMAND LIST DISPATCH SELECTION
5314
5315 012452 150 025 DSLST: .ADDR CMDDI ; DI CMD .EQ. 0
5316 012454 076 025 .ADDR CMDLI ; LI CMD .EQ. 2
5317 012456 072 025 .ADDR CMDEI ; EI CMD .EQ. 4
5318 012460 177 025 .ADDR CMDWAIT ; WAIT CMD .EQ. 6
5319 012462 246 025 .ADDR CMDERCHK ; ERRTST CMD .EQ. 10
5320 012464 266 025 .ADDR CMDEN ; END CMD .EQ. 12
5321 012466 230 025 .ADDR CMDTWAIT ; WAIT CMD WITH NO TIMEOUT. CHECKS FOR BIT TRUE .EQ. 14
5322 012470 132 025 .ADDR CMDUBA ; LI TYPE CMD. NO OFFSETS, GOOD FOR UBA STUFF .EQ. 16
5323
5324 ; CODE FOR "EI" COMMAND
5325
5326 012472 247 CMDEI: ANA A ; CLR THE "C-BIT"
5327 012473 303 077 025 JMP CMDLI1 ; GO TO COMMON CODE FOR LI AND EI COMMAND
5328
5329 ; CODE FOR "LI" COMMAND
5330
5331 012476 067 CMDLI: STC ; SET THE "C-BIT"
5332 012477 365 CMDLI1: PUSH PSW ; AND SAVE IT
5333 012500 MOV5B ; PASS THE COMMAND LIST EXECUTOR THE RHBASE ADDRESS
(1) 012500 347 RST 4
(1) 012501 000 .BYTE 0
5334 012502 242 040 .ADDR RHBASE ; KEPT IN HERE
5335 012504 024 040 .ADDR IOAD ; USED IN HERE
5336
5337 012506 041 026 040 LXI H,IOAD+2 ; "H,L" PNTS TO DEST+2
5338 012511 072 254 040 LDA UBANUM ; CURRENT UBA NUMBER INTO ACCUM
5339 012514 266 ORA M ; THROW IN THE CURRENT BITS
5340 012515 167 MOV M,A ; PUT IT ALL BACK
5341
5342 012516 053 DCX H ; NOW MAKE "H,L" POINT TO ADDR +0
5343 012517 053 DCX H
5344 012520 013 DCX B ; MAKE "B,C" PAIR POINT TO SELECTED OFFSET FROM BASE
5345 012521 012 LDAX B ; GET SELECTED OFFSET
5346 012522 206 ADD M ; ADD OFFSET TO THE BASE
5347 012523 167 MOV M,A ; AND PUT THE WHOLE MESS BACK
5348 012524 361 POP PSW ; NOW GET STATE OF PROCESSOR FLAGS
5349 012525 330 RC ; IF "C" SET, IT WAS AN LI AND WE ARE DONE
5350
5351 ; CALL THRU IF "C" CLR..IT WAS EI AND WE MUST FINISH IT
5352
5353 012526 315 302 012 CALL EI1 ; EXECUTE "EI" CMD
5354 012531 311 RET ; ALL DONE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 144
CMDS.M80 CHANNEL COMMAND LIST EXECUTOR
5356
5357 ; CODE FOR LI TYPE COMMAND ONLY USING NO OFFSETS, TAKING THE ADDRESSES
5358 ; EXACTLY AS PRESENTED.. GOOD FOR UBA OPERATIONS, WHICH REQUIRE NO OFFSETS.
5359
5360 012532 021 026 040 CMDUBA: LXI D,IOAD+2 ; "D,E" PNTS TO DEST+2
5361 012535 325 PUSH D ; SAVE THE ADDRESS OF UBA/RH ADDRESS
5362 012536 315 307 025 CALL MOV18B ; MOVE SOME DATA
5363 012541 341 POP H ; ADDR OF UBA/RH INTO H,L
5364 012542 072 254 040 LDA UBANUM ; CURRENT UBA NUMBER INTO ACCUM
5365 012545 266 ORA M ; THROW IN THE CURRENT BITS
5366 012546 167 MOV M,A ; PUT IT ALL BACK
5367 012547 311 RET ; WE ARE DONE
5368
5369 ; CODE FOR DI COMMAND
5370
5371 012550 012 CMDDI: LDAX B ; GET DISP CODE TO SEE IF INDIRECT
5372 012551 247 ANA A ; CHECK THE SIGN BIT
5373 012552 362 165 025 JP DILOCL ; AND JUMP IF NO INDIRECTION
5374
5375 ; FALL TO HERE IF WAS INDIRECT
5376
5377 012555 151 MOV L,C ; PASS ADDR IN "B,C" TO "H,L"
5378 012556 140 MOV H,B
5379 012557 053 DCX H ; NOW BACK UP PNTR TO HI ORDER PCE OF INDIRECT WRD
5380 012560 106 MOV B,M ; AND INTO B
5381 012561 053 DCX H ; NOW TO LO ORDER PIECE OF INDIRECT WORD
5382 012562 116 MOV C,M ; LO ORDER PIECE TO C AND DONE
5383 012563 003 INX B ; "B,C" MUST POINT TO SRC + 2
5384 012564 003 INX B
5385 012565 021 051 040 DILOCL: LXI D,DMDAT+2 ; "D,E" POINTS TO DEST+2
5386 012570 315 307 025 CALL MOV18B ; MOVE SOME STUFF AROUND
5387 012573 315 341 012 CALL DI1 ; EXECUTE THE DEPOSIT
5388 012576 311 RET ; AND BACK TO COMMAND LIST
5389
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 145
CMDS.M80 CHANNEL COMMAND LIST EXECUTOR
5391
5392 ; CODE FOR WAIT COMMAND(FOR WAITING FOR A TAPE TO FINISH, FOR EXAMPLE)
5393
5394 012577 CMDWAIT:
5395 012577 257 XRA A ; CLEAR ACCUM
5396 012600 127 MOV D,A ; NOW CLR "D", THE REGISTER WE WILL USE FOR TIMEOUT COUNT
5397 012601 137 MOV E,A ; CLR "E" TOO
5398
5399 012602 305 WAITLP: PUSH B ; SAVE B,C
5400 012603 315 330 025 CALL CHKBIT ; CHECK BITS VERSUS DEVICE STATUS TO SEE IF SET(I.E READY)
5401 012606 301 POP B ; RESTORE B,C
5402 012607 300 RNZ ; IF READY BIT SET, ITS OK, GO AWAY
5403
5404 ; FALL THRU IF READY NOT SET
5405
5406 012610 305 PUSH B ; SAVE B,C FROM DESTRUCTION
5407 012611 325 PUSH D ; SAVE TIME-OUT COUNT
5408 012612 315 302 012 CALL EI1 ; DO ANOTHER EXAMINE OF DEVICE STATUS TO SEE IF READY NOW
5409 012615 321 POP D ; GET THE TIME-OUT COUNT
5410 012616 301 POP B ; RESTORE B,C
5411 012617 023 INX D ; INCREMENT
5412 012620 173 MOV A,E ; SEE IF COUNT DOWN TO ZERO YET
5413 012621 262 ORA D ; USE TOP HALF TOO
5414 012622 302 202 025 JNZ WAITLP ; GO TRY AGAIN
5415
5416 ; FALL THRU IF DEVICE TIME'S OUT BEFORE GETTING A READY
5417
5418 012625 303 254 025 JMP DEVERR ; GO REPORT "?BT" AND THE FAILED PC
5419
5420 ; CODE FOR TWAIT COMMAND
5421
5422 012630 305 CMDTWAIT: PUSH B ; FIRST SAVE THE BC POINTERS
5423 012631 315 302 012 CALL EI1 ; READ THE CURRENT STATE AS IT IS NOW
5424 012634 301 POP B ; RESET B TO A GOOD VALUE
5425 012635 305 PUSH B ; AND SAVE IT FROM DESTRUCTION AGAIN
5426 012636 315 330 025 CALL CHKBIT ; NOW SEE IF APPROPRIATE BIT IS SET
5427 012641 301 POP B ; RESTORE
5428 012642 300 RNZ ; RETURN IF BIT WAS SET AS DESIRED
5429 012643 303 254 025 JMP DEVERR ; ELSE.. GO SAY ERR, BIT WAS NOT SET AS DESIRED
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 146
CMDS.M80 CHANNEL COMMAND LIST EXECUTOR
5431
5432 ; CODE FOR ERROR TEST COMMAND
5433
5434 012646 305 CMDERCHK: PUSH B ; SAVE B,C
5435 012647 315 330 025 CALL CHKBIT ; FIRST GO CHECK TO SEE IF ANY OF DESIRED BITS SET
5436 012652 301 POP B ; AND RESTORE
5437 012653 310 RZ ; IF NONE SET, RETURN CAUSE ALL IS OK
5438
5439 ; FALL TO HERE IF SOME BITS SET..HAD DEVICE ERROR & THEREFORE "BOOT" FAILED
5440
5441 012654 140 DEVERR: MOV H,B ; NOW COPY "B,C" TO "H,L" REGISTER
5442 012655 151 MOV L,C
5443
5444 012656 042 154 040 SHLD ERRCD ; "H,L" NOW HAS FAILING PC
5445 012661 INTOFF ; LET ALL MESSAGES PRINT NOW
(1) 012661 367 RST 6 ; GO EXIT FROM INTERNAL MODE
5446 012662 257 XRA A ; CLR C-BIT, SO THAT IT WILL SET LATER, TO INDICATE ERR
5447 012663 303 276 025 JMP DEVEXIT ; GO EXIT WITH MESSING WITH PRINT FLAGS
5448
5449 ; CODE FOR THE END COMMAND
5450
5451 012666 021 333 016 CMDEN: LXI D,MAD000 ; GUARANTEE CSL BUS ADDR REG .EQ. 0 AFTER XFR
5452 012671 315 172 033 CALL ADATP ; WRITE THE CSL BUS ADDRESS REG WITH 0'S
5453 012674 INTOFF ; CLR INTERNAL MODE
(1) 012674 367 RST 6 ; GO EXIT FROM INTERNAL MODE
5454 012675 067 STC ; SET THE C-BIT, SO THAT IT WILL BE CLEARED LATER
5455 012676 077 DEVEXIT: CMC ; COMPLEMENT C-BIT, SO IT WILL SAY ERR, OR NO ERR
5456 012677 341 POP H ; THROW OUT PSEUDO RETURN FROM STACK TOP
5457 012700 341 POP H ; THROW OUT THE SAVED "H,L"
5458 012701 341 POP H ; AND RESTORE ALL THE REGISTERS
5459 012702 321 POP D ; THAT WE SAVED
5460 012703 301 POP B
5461 012704 076 000 MVI A,0 ; ACCUM WILL ALWAYS BE 0 ON EXIT FROM CMD LIST EXECUTOR
5462 012706 311 RET
5463
5464 ; ROUTINE FOR MOVING 3 BYTES OF DATA. "B,C" HAS SRC+2..."D,E" HAS DST+2.
5465
5466 012707 046 002 MOV18B: MVI H,2 ; COUNT OF 3 IS HOW MANY TO MOVE
5467 012711 012 LDAX B ; GET PIECE OF SOURCE
5468 012712 346 003 ANI 3 ; ONLY INTERESTED IN BITS 18,19
5469 012714 022 STAX D ; PUT AT DESTINATION
5470 012715 013 DCX B ; POINT TO NEXT RELEVANT BYTE
5471 012716 033 DCX D ; FOR SRC AND DST
5472 012717 012 MOV18X: LDAX B ; GET A PIECE OF THE SRC TO ACCUM
5473 012720 022 STAX D ; AND PUT AT DESTINATION PLACE
5474 012721 013 DCX B ; DOWN THE POINTER
5475 012722 033 DCX D ; DOWN THE OTHER POINTER
5476 012723 045 DCR H ; AND DOWN THE COUNTER..
5477 012724 302 317 025 JNZ MOV18X ; CONTINUE TILL MOVED 3 BYTES
5478 012727 311 RET ; THEN OUT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 147
CMDS.M80 CHANNEL COMMAND LIST EXECUTOR
5480
5481 ; COMMON ROUTINE FOR CHECKING DEVICE STATUS, FOR EITHER DEVICE ERRORS OR
5482 ; READY BIT TRUE..MUST BE CALLED IMMEDIATLY AFTER AN "EI" COMMAND.
5483
5484 012730 052 012 040 CHKBIT: LHLD EMBUF ; GET CURRENT DEVICE STATUS INTO "H,L"
5485 012733 013 DCX B ; MAKE B PNT TO +1
5486 012734 013 DCX B ; AND MAKE IT PNT TO +0
5487 012735 012 LDAX B ; BYTE OF DESIRED INTO ACCUM
5488 012736 245 ANA L ; COMPARE AGAINST CURRENT DEVICE
5489 012737 300 RNZ ; IF NON-ZERO, NO NEED TO LOOK FURTHER
5490
5491 012740 003 INX B ; IF 1ST BYTE WAS ZERO, BUMP PNTR TO LOOK AT NEXT BYTE
5492 012741 012 LDAX B ; NEXT BYTE INTO THE ACCUM
5493 012742 244 ANA H ; COMPARE VERSUS DESIRED
5494 012743 311 RET ; PLAIN RETURN..Z BIT WILL BE SET APPROPRIATELY
5495
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 148
CMDS.M80 *** "BC" CMD ***
5497 .SBTTL *** "BC" CMD ***
5498
5499 ; CODE WHICH PERFORMS THE VERY FAMOUS BOOT CHECK I
5500
5501 012744 315 164 005 BCCMD: CALL MRCMD ; MAKE SURE MACHINE IS STOPPED
5502 012747 INTON ; SET UP INTERNAL MODE
(1) 012747 327 RST 2 ; GO SET INTERNAL MODE
5503 012750 CLRB ERRCD ; BEGIN BY CLEARING THE ERROR CODES
5504 012752 CLRB ERRCD+1 ; MUST CLEAR BOTH HALVES
5505 001 .IF NDF,NEEDRM
5506
5507 012754 CLRRM BUSAD ; WILL GENERATE A STARTING BUFFER OF (400000,,0)
(1) 012754 347 RST 4
(1) 012755 012 .BYTE 10.
(1) 012756 047 040 .ADDR BUSAD+5
5508 012760 076 010 MVI A,^O10 ; THIS TURNS OUT TO BE BIT0 IN 36-BIT LAND
5509 012762 062 046 040 STA BUSAD+4 ; SET IT
5510
5511 012765 001 000 001 LXI B,^O400 ; SET B=1, C=0
5512 012770 305 BC.ALP: PUSH B ; SAVE COUNTERS
5513 012771 315 163 011 CALL DBCMD ; EXECUTE THE DEPOSIT BUS
5514
5515 ; CHECK FOR FAILURE
5516
5517 012774 072 154 040 LDA ERRCD ; FETCH AN ERROR CODE
5518 012777 247 ANA A ; SET 8080 CONDITION CODES
5519 013000 302 355 026 JNZ BCA.ERR ; GO STANDARD ERROR REPORT IF ERR FOUND
5520
5521 ; NO ERROR, GENERATE THE NEXT DATUM
5522
5523 013003 041 042 040 LXI H,BUSAD ; POINT TO A BUFFER TO BE SHIFTED
5524 013006 315 140 031 CALL SHR36 ; SHIFT 36 BITS(I.E. FLOAT A 1 OR 0)
5525 013011 001 .BYTE 1 ; SHIFT ONLY ONE PLACE AT A TIME
5526
5527 ; NOW CHECK FOR END OF TEST
5528
5529 013012 301 POP B ; GRAB UP THE CURRENT LOOP COUNTERS
5530 013013 014 INR C ; UP COUNT FOR THIS DATAUM
5531 013014 171 MOV A,C ; COPY TO ACCUM
5532 013015 376 044 CPI 36. ; NOW SEE IF FLOATED DOWN THE ENTIRE 36 BIT WORD
5533 013017 332 370 025 JC BC.ALP ; JUMP IF NOT DONE A GROUP OF 36 YET..
5534
5535 ; HERE WHEN DONE A GROUP OF 36, SEE IF THIS WAS FIRST OR SECOND TIME THROUGH
5536
5537 013022 005 DCR B ; DECREMENT "TIMES THROUGH THE LOOP" COUNTER
5538 013023 372 046 026 JM BC.2ND ; IF MINUS, TIME TO GET OUT..GO NEXT PHASE OF TEST
5539
5540 ; HERE WHEN DONE FIRST WORD, TIME TO SET UP TO FLOAT A 0 THRU FIELD OF ONES.
5541
5542 013026 MOV5B ; MOVE 2ND DATA PATTERN
(1) 013026 347 RST 4
(1) 013027 000 .BYTE 0
5543 013030 041 026 .ADDR BC.DB2 ; INIT 2ND PATTERN TO BE (377777,,777777)
5544 013032 042 040 .ADDR BUSAD ; AND THIS IS THE PLACE THAT DB COMMAND USES
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 148-1
CMDS.M80 *** "BC" CMD ***
5545
5546 013034 016 000 MVI C,00 ; RESET THE COUNTER
5547 013036 303 370 025 JMP BC.ALP ; AND GO ROUND FOR THE SECOND TIME......
5548
5549 013041 BC.DB2: D 377,777,,777,777
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 149
CMDS.M80 *** "BC" CMD ***
5551
5552 ; BOOTCHECK CODE FOR EXECUTING A TEST OF THE CRAM AND ITS ABILITIY TO
5553 ; HOLD ALL ONES AND ZEROES, AND TO SEE IF ITS ADDRESSING LOGIC WORKS
5554 ; AS IT SHOULD....
5555
5556 013046 041 000 000 BC.2ND: LXI H,00 ; START AT CRAM ADDRESS 00
5557 013051 315 221 026 BC.BLP: CALL W.CRMZ ; WRITE THE LOCATION WITH ALL ZEROES
5558 013054 043 INX H ; UPDATE TO NEXT CRAM ADDRESS
5559 013055 174 MOV A,H ; NOW CHECK TO SEE IF DONE ALL
5560 013056 346 010 ANI ^O10 ; IS ADDRESS AT "4000" YET?
5561 013060 312 051 026 JZ BC.BLP ; BACK AND ZERO MORE IF NOT YET
5562
5563 ; NOW READY FOR COMBINED ADDRESS AND DATA TEST
5564
5565 013063 046 000 MVI H,00 ; L IS ALREADY .EQ. 0, NOW MAKE H,L PAIR .EQ. 0
5566 013065 315 267 014 BC.BL1: CALL CADWR ; WRITE CURRENT CRAM ADDRESS
5567 013070 345 PUSH H ; AND SAVE IT FOR A WHILE
5568 013071 315 127 013 CALL CP1 ; CLOCK TO GET THE CONTENTS OF THAT LOC TO C.R.
5569 013074 315 370 014 CALL RCINT ; NOW READ-IN THE CONTENTS OF THE C.R.
5570 013077 041 000 000 LXI H,00 ; DATA TO VERIFY AGAINST IS 00
5571 013102 315 247 026 CALL V.VER ; VERIFY CONTENTS OF C.R. TO BE ALL 0
5572 013105 315 212 026 CALL A.CRMO ; NOW WRITE THAT LOCATION WITH ALL ONES
5573 013110 341 POP H ; RETRIEVE CURRENT CRAM ADDRESS
5574 013111 043 INX H ; UP TO THE NEXT ADDRESS
5575 013112 174 MOV A,H ; COPY HI HALF TO ACCUM, SO CAN CHECK FOR 4000
5576 013113 346 010 ANI ^O10 ; ADDRESS AT "4000"?
5577 013115 312 065 026 JZ BC.BL1 ; BACK INTO LOOP IF NOT YET..
5578
5579 ; WHEN DONE HERE, FALL INTO MEMORY PART OF BOOT CHECK A PAGE MOS MEMORY CHECK.
5580
5581 013120 315 050 020 BC.3RD: CALL ZMCMD ; FIRST CLEAR ENTIRE MOS MEMORY (AT LEAST TRY)
5582
5583 013123 MOV5B ; SET UP THE INITIAL DATA
(1) 013123 347 RST 4
(1) 013124 000 .BYTE 0
5584 013125 242 022 .ADDR ONES ; DATA FOR DEPOSITING IS ALL ONES
5585 013127 047 040 .ADDR DMDAT ; .. THE DEPOSIT BUFFER
5586
5587 013131 MOV5B ; SET UP THE STARTING MEMORY ADDRESS
(1) 013131 347 RST 4
(1) 013132 000 .BYTE 0
5588 013133 230 022 .ADDR MA1000 ; START AT ADDRESS 1000
5589 013135 017 040 .ADDR MEMAD ; .. MEMORY ADDRESS BUFFER
5590
5591 013137 315 361 011 BC.CLP: CALL EM2 ; EXAMINE A LOCATION
5592 013142 315 016 033 CALL CMP36 ; THEN COMPARE RESULTS..DATA SHOULD BE ALL ZEROES
5593 013145 012 040 .ADDR EMBUF ; THIS IS THE ACTUAL READ-IN DATA
5594 013147 333 016 .ADDR ZEROES ; VERSUS 36-BITS OF 0'S
5595 013151 302 326 026 JNZ BC.CERR ; GO TO ERROR REPORT IF NOT ALL ZEROES
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 150
CMDS.M80 *** "BC" CMD ***
5597
5598 ; FALL THRU IF THAT WENT OK.
5599
5600 013154 315 157 012 CALL DM2 ; NOW DEPOSIT ONES INTO THAT LOC AND CONTINUE
5601
5602 013157 315 361 011 CALL EM2 ; WHILE WE ARE AT IT, WE'LL CHECK ALL ONES
5603 013162 315 016 033 CALL CMP36 ; DO THE 36-BIT COMPARE
5604 013165 012 040 .ADDR EMBUF ; THIS STUFF JUST READ IN
5605 013167 242 022 .ADDR ONES ; AGAINST ALL ONES
5606 013171 302 326 026 JNZ BC.CERR ; IF BAD, SAY SO..
5607
5608 013174 052 017 040 LHLD MEMAD ; FETCH UP THE CURRENT MEMORY ADDRESS
5609 013177 043 INX H ; UPDATE TO THE NEXT
5610 013200 174 MOV A,H ; COPY HI PIECE TO THE ACCUM
5611 013201 346 004 ANI ^O4 ; SEE IF REACHED ADDRESS 2000
5612 013203 042 017 040 SHLD MEMAD ; REPLACE THE UPDATED ADDRESS FIRST
5613 013206 312 137 026 JZ BC.CLP ; AND CONTINUE IF HAD NOT REACHED THE MAX
5614
5615 013211 311 RET ; RETURN..DONE ALL BOOT CHECK OK
5616
5617 ; SUBROUTINES REQUIRED FOR THE CRAM TESTING.
5618 ; SUBROUTINES FOR WRITING ALL ONES AND ALL ZEROES INTO A SELECTED CRAM
5619 ; LOCATION. DESIRED ADDRESS PASSED IN THE H,L REGISTER (FOR W.XXX
5620 ; CALLS). USES CURRENTLY SELECTED ADDRESS FOR (A.XXX CALLS).
5621
5622 013212 345 A.CRMO: PUSH H ; SAVE H,L
5623 013213 041 377 377 LXI H,-1 ; H,L TO ALL ONES INDICATES THE ALL ONES DATA DESIRED
5624 013216 303 230 026 JMP W.LOC ; GO COMMON CODE
5625
5626 013221 315 267 014 W.CRMZ: CALL CADWR ; WRITE DESIRED ADDRESS
5627 013224 345 A.CRMZ: PUSH H ; SAVE H,L
5628 013225 041 000 000 LXI H,00 ; SET TO ZERO, DATA IS ALL ZEROES
5629 013230 016 007 W.LOC: MVI C,7 ; TAKES 8 FUNCTION WRITES TO DO ALL OF ONE CRAM LOC
5630 013232 171 W.LP: MOV A,C ; GET CURRENT FUNCTION TO ACCUM
5631 013233 062 010 040 STA CRMFN ; PUT FUNCTION INTO LOC USED BY STANDARD ROUTINE
5632 013236 315 232 014 CALL WFUNC ; WRITE ONE OF THE 8 PIECES OF A CRAM LOC
5633 013241 015 DCR C ; DOWN COUNT
5634 013242 362 232 026 JP W.LP ; AS LONG AS .GE. 0, KEEP GOING
5635 013245 341 POP H ; HERE WHEN DONE ALL 8
5636 013246 311 RET ; NOW GET OUT OF HERE.
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 151
CMDS.M80 *** "BC" CMD ***
5638
5639 ; ROUTINE TO VERFIY THAT A CRAM LOCATION IS INDEED ALL ONES OR ALL ZEROES.
5640 ; NO ARGUMENTS PASSED TO THIS ROUTINE.
5641
5642 013247 042 316 040 V.VER: SHLD CRMBF+^O14 ; ALL DON'T CARE LOCATIONS OF THE "READ" ARE
5643 013252 042 320 040 SHLD CRMBF+^O16 ; FUDGED TO MATCH EXPECTED DATA
5644 013255 042 322 040 SHLD CRMBF+^O20 ; THERE ARE 12 DON'T CARE LOCATIONS
5645
5646 013260 042 332 040 SHLD CRMBF+^O30 ; SOME ARE VARIOUS ADDRESS (NXT/CURRENT/SUBRTN)
5647 013263 042 334 040 SHLD CRMBF+^O32 ; AND SOME ARE JUST UNBUFFERED COPIES OF THE
5648 013266 042 336 040 SHLD CRMBF+^O34 ; BUS
5649
5650 013271 175 MOV A,L ; NOW COPY EXPECTED DATA INTO "B,C" PAIR
5651 013272 057 CMA ; FIRST COMPLEMENT
5652 013273 117 MOV C,A ; THEN MOVE
5653 013274 174 MOV A,H ; NEED BOTH HALVES PLEASE
5654 013275 057 CMA ; COMPLEMENT
5655 013276 107 MOV B,A ; THEN MOVE
5656
5657 013277 041 302 040 LXI H,CRMBF ; NOW POINT TO START OF BUFFER WHERE EXPECTED
5658 013302 136 V.BCLP: MOV E,M ; DATA KEPT. PROCEED TO COPY BUFFER DATA INTO
5659 013303 043 INX H ; (UPDATE POINTER)
5660 013304 126 MOV D,M ; THE D,E REGISTER PAIR
5661 013305 043 INX H ; AND UPDATE MEMORY POINTER AFTER EACH MOVE
5662 013306 353 XCHG ; SWAP, SO NOW "H,L" HAS BUFFER, "D,E" HAS POINTER
5663 013307 011 DAD B ; ADD COMPLEMENT TO EXPECTED...SHOULD GET 0.
5664 013310 043 INX H ; TWO'S COMPLEMENT , THAT IS..
5665 013311 175 MOV A,L ; PIECE TO ACCUM
5666 013312 264 ORA H ; "OR" IN THE OTHER PIECE
5667 013313 302 336 026 JNZ BC.BERR ; AND GO HANDLE ERROR IF RESULTS .NE. 0
5668
5669 ; YOU FELL THROUGH TO HERE IF DATA CHECK WAS OK..
5670
5671 013316 353 XCHG ; SWAP..NOW "H,L" HAS POINTER, "D,E" HAS 00
5672 013317 076 342 MVI A,<<CRMBF+32.>&^O377> ;CHECK IF DONE
5673 013321 275 CMP L ; SEE IF AT LAST LOCATION IN LIST
5674 013322 302 302 026 JNZ V.BCLP ; JUMP BACK IF NOT YET
5675 013325 311 RET ; ELSE OK TO RETURN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 152
CMDS.M80 *** "BC" CMD ***
5677
5678 ; ERROR REPORTING
5679
5680 013326 052 017 040 BC.CERR: LHLD MEMAD ; GRAB UP FAILED MEM ADDRESS
5681 013331 006 100 MVI B,^O100 ; GET A BIT TO SET IN ERROR PRINTOUT
5682 013333 303 342 026 JMP BCC.ERR ; GO PROCESS STANDARD ERROR TYPEOUTS
5683 013336 341 BC.BERR: POP H ; CLEAR A RETURN ADDRESS
5684 013337 006 200 MVI B,^O200 ; BIT TO SET FOR CRAM FAILURES
5685 013341 341 POP H ; NOW GATHER UP THE CURRENT CRAM ADDRESS
5686 013342 042 154 040 BCC.ERR: SHLD ERRCD ; SAVE 1 BYTE BY DEPOSITING TWICE
5687 013345 174 MOV A,H ; HI HALF TO THE ACCUM
5688 013346 260 ORA B ; THROW IN A WEIGHT SO NUMBER WILL DIFFER
5689 013347 062 155 040 STA ERRCD+1 ; PUT NUMBER INTO ERROR CODE LOC
5690 013352 303 362 026 JMP BCB.ERR ; AND GO PRINT OUT THE CORRECT ERROR STUFF
5691
5692 013355 301 BCA.ERR: POP B ; GET COUNTER OFF THE STACK
5693 013356 171 MOV A,C ; SUBTEST TO ACCUM
5694 013357 062 154 040 STA ERRCD ; PLACE FROM WHICH TO REPORT ERRORS
5695 013362 BCB.ERR: CLRB NOPNT ; GUARANTEE PRINTING ON
5696 013364 PLINE ERRMSG ; "?BC"
(1) 013364 337 RST 3 ; PRINT LINE OF CHARS
(1) 013365 170 037 .ADDR ERRMSG ; BUFF TO PRINT
5697 013367 041 154 040 LXI H,ERRCD ; POINT AT THE ERROR I.D.
5698 013372 315 303 030 CALL P16 ; PRINT
5699 013375 303 137 032 JMP MMERR ; OUT
5700 000 .ENDC
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 153
CMDS.M80 *** "BC" CMD ***
5702
5703 ;>>;WSUBRTN.M80
5704 .SBTTL ****KS10 CONSOLE SUBROUTINE FILE
5705
5706 ; SUBROUTINE TO CHECK IF THE CPU IS RUNNING, AND IF IT IS,
5707 ; TO ABORT THE COMMAND THAT CALLED IT.
5708
5709 013400 341 .RUN..: POP H ; MUST FIX THE STACK
5710 013401 365 PUSH PSW ; SAVE FLAGS (STATE OF THE "C-BIT"
5711 013402 072 165 040 LDA RNFLG ; CHECK SOFTWARE RUN FLAG TO SEE IF CPU CLK ON
5712 013405 247 ANA A ; IS IT ZERO? , OR NOT ZERO
5713 013406 302 013 027 JNZ YSRUN ; IF NOT ZERO, JMP OFF TO PRINT MESSAGE
5714
5715 013411 361 POP PSW ; OTHERWISE, RESTORE FLAGS
5716 013412 311 RET ; AND OUT
5717
5718 013413 YSRUN: PLINE RN. ; MESSAGE TO SAY RUNNING..
(1) 013413 337 RST 3 ; PRINT LINE OF CHARS
(1) 013414 175 037 .ADDR RN. ; BUFF TO PRINT
5719 013416 303 137 032 JMP MMERR ; NOW GO RESTART OURSELVES
5720
5721
5722 ; ROUTINE TO REPORT A PARITY ERROR WHEN DETECTED BY THE 8080 CONSOLE
5723
5724 013421 RPTPAR: CLRB NOPNT ; TURN TYPING ON
5725 013423 257 XRA A ; ACCUM MUST BE ZERO
5726 013424 323 206 OUT CLKCTL ; KILL CLK, SO PAR ERR CLRING WONT RELEASE THE CPU CLKS
5727
5728 001 .IF DF,SCECOD
5729 013426 072 326 042 LDA SC.OFF ; GET FLAG TO SEE IF WE CAN TRY FOR SOFT RECOVER
5730 013431 247 ANA A ; SET 8080 FLAGS
5731 013432 302 100 027 JNZ HRDERR ; IF FLAG .NE. 0, THEN WE WILL NOT RECOVER
5732
5733 ; FIRST THING WE NEED TO DO IS CHECK FOR CRAM/CRA PARITY ERRORS, AND DECIDE
5734 ; IF WE CAN RECOVER FROM THEM
5735
5736 013435 LONG.DELAY 1 ; LET DISK TRAFFIC STOP
(1) 013435 041 310 000 LXI H,200. * 1 ; SET UP THE TIMING COUNT IN H,L REG
(1) 013440 315 076 014 CALL LTLOOP ; AND GO DELAY ABOUT 1 SEC FOR EACH (300 COUNT)
5737 013443 076 100 MVI A,SMPAR ; GET WHICH REG HAS PARITY INFO IN IT
5738 013445 315 212 013 CALL ER.UTL ; READ DATA,PARITY CRAM PARITY ERROR OCCURRING
5739 ; AT SAME CRAM ADDR MORE THAN ONCE IN A ROW)
5740 013450 057 CMA ; INVERT SO THAT .TRUE. .EQ. HI
5741 013451 346 022 ANI ^O22 ; SEE IF CRA/CRM ERROR TYPE
5742 013453 312 100 027 JZ HRDERR ; IF NO, GO FOR A HARD ERROR
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 154
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
5744
5745 ; WELL, LETS SEE IF MEM BUSY OR I/O BUSY
5746
5747 013456 333 102 IN R.BUSY ; *****I/O RD 102*****
5748 013460 057 CMA ; FIX HARDWARE COMPLEMENT
5749 013461 346 060 ANI ^O60 ; SEE IF EITHER OF THOSE TWO BITS SET
5750 013463 107 MOV B,A ; SAVE RESULTS OF THIS "AND" FOR A BIT
5751 013464 333 101 IN REFERR ; SEE IF MEM REFRESH ERR EITHER
5752 013466 057 CMA ; FIX HARDWARE INVERSION
5753 013467 346 001 ANI 1 ; ONLY KEEP THE REFRESH BIT
5754 013471 260 ORA B ; THROW THE TWO TOGETHER. IF RESULTS 0, THEN ALL OK
5755 013472 312 235 027 JZ SOFTERR ; IF NOTHING, GO TRY FOR SOFT ERROR RECOVERY
5756
5757 ; GET TO HERE IF ERROR IS CONSIDERED NON-RECOVERABLE
5758
5759 013475 NR: PLINE NRSCE ; "?NR-SCE". NON RECOVERABLE-SOFT CRAM ERROR
(1) 013475 337 RST 3 ; PRINT LINE OF CHARS
(1) 013476 216 027 .ADDR NRSCE ; BUFF TO PRINT
5760
5761 000 .ENDC
5762
5763 013500 HRDERR: CLRB CHKPAR ; SAY NOT TO REPORT AGAIN & AGAIN
5764 013502 315 305 006 CALL CLRUSE ; EXIT FROM USER MODE
5765 013505 PLINE PARMSG ; MESSAGE TO CTY
(1) 013505 337 RST 3 ; PRINT LINE OF CHARS
(1) 013506 150 037 .ADDR PARMSG ; BUFF TO PRINT
5766
5767 013510 333 100 IN SMPAR ; ***** I/O RD PARITY *****
5768 013512 057 CMA ; FIX THE HARDWARE INVERSION
5769 013513 315 270 030 CALL P8BITA ; AND PRINT IT OUT WITH THE ERROR MESSAGE
5770 013516 PSPACE ; SEPARATE THE 8 BIT DATUMS
(2) 013516 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 013517 040 .BYTE SPACE ; CHAR TO PRINT
5771 013520 333 303 IN ^O303 ; READ "DPM PARITY BIT"
5772 013522 057 CMA ; FIX CPU INVERSION
5773 013523 346 001 ANI ^O1 ; ONLY INTERESTED IN BIT 0 "DPM PAR ERR"
5774 013525 315 270 030 CALL P8BITA ; AND THEN PRINT THE "DPM PAR" DATA
5775 013530 PSPACE ; AGAIN, SEPARATE BY SPACES
(2) 013530 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(2) 013531 040 .BYTE SPACE ; CHAR TO PRINT
5776 013532 333 103 IN ^O103 ; READ REG THAT HAS R PAR RIGHT & R PAR LEFT
5777 013534 057 CMA ; FIX THE HARDARE INVERSION
5778 013535 346 360 ANI ^O360 ; KEEP ONLY THE 2 "R PAR" BITS
5779 013537 315 000 017 CALL P8CRLF ; PRINT IT
5780 013542 315 255 032 CALL CLRRN ; CLEAR THE SOFTWARE "RUNNING" FLAG TOO
5781 013545 315 301 032 CALL LTFLT ; PARITY ERROR LIGHTS THE FAULT LIGHT
5782 013550 303 200 001 JMP REINI ; AND GO RE-INIT..PAR ERRS ARE FATAL
5783
5784 001 .IF DF,SCECOD
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 155
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
5786
5787 ; COMMAND LIST FOR READING UBA INFO
5788
5789 013553 UBA.RD: UBA. 763,001
(1) 013553 001 .BYTE 001 & 377
(1) 013554 346 .BYTE Q.1
(1) 013555 073 .BYTE Q.2
5790 013556 ENDLST
(1) 013556 000 .BYTE 0
(1) 013557 000 .BYTE 0
(1) 013560 050 .BYTE <12*4>
5791
5792 ; RH11 COMMAND LIST FOR CHECKING FOR RECOVERABLE & NON RECOVERABLE
5793 ; STATES OF THE CONTROLLER.
5794
5795 013561 RH.TST: EI. D776,P.00 ; EXAM CONTROLLER STATUS REG
(1) 013561 374 .BYTE Q.1
(1) 013562 000 .BYTE P.00 & 377
(1) 013563 023 .BYTE Q.2
5796 013564 ERRTST 60000 ; TEST FOR FATAL ERRS
(1) 013564 000 140 .ADDR 60000
(1) 013566 040 .BYTE <10*4>
5797 013567 EI. D776,P.12 ; EXAM DRIVE STATUS REG
(1) 013567 374 .BYTE Q.1
(1) 013570 012 .BYTE P.12 & 377
(1) 013571 023 .BYTE Q.2
5798 013572 ERRTST 40000 ; CHECK THAT GUY FOR ERRS
(1) 013572 000 100 .ADDR 40000
(1) 013574 040 .BYTE <10*4>
5799 013575 ENDLST ; HERE IF ALL OK
(1) 013575 000 .BYTE 0
(1) 013576 000 .BYTE 0
(1) 013577 050 .BYTE <12*4>
5800
5801 013600 RH.EXE: EI. D776,P.00 ; A TEMPLATE FOR RH EXAMINES
(1) 013600 374 .BYTE Q.1
(1) 013601 000 .BYTE P.00 & 377
(1) 013602 023 .BYTE Q.2
5802 013603 ENDLST ; THAT'S ALL WE NEED FOR THIS
(1) 013603 000 .BYTE 0
(1) 013604 000 .BYTE 0
(1) 013605 050 .BYTE <12*4>
5803
5804 013606 000 SAVLST: .BYTE P.00 ; READ 776700
5805 013607 002 .BYTE P.02 ; READ 776702
5806 013610 004 .BYTE P.04 ; READ 776704
5807 013611 006 .BYTE P.06 ; READ 776706
5808 013612 010 .BYTE P.10 ; READ 776710
5809 013613 032 .BYTE P.32 ; READ 776732
5810 013614 034 .BYTE P.34 ; READ 776734
5811 013615 377 .BYTE -1 ; END OF LIST MARKER
5812
5813 ; THE ASCII MESSAGES REQUIRED FOR PARITY RECOVERY
5814
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 155-1
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
5815 013616 077 116 122 NRSCE: .ASCIZ/?NR-SCE / ; NOT RECOVERABLE SOFT CRAM ERROR
5816 013627 045 123 103 OKSCE: .ASCIZ/%SCE / ; RECOVERABLE SOFT CRAM ERROR
5817
5818 ; NOW GET THE CURRENT CRAM ADDRESS AND CHECK FOR HARD CRAM ERRORS. (NOTE: A
5819 ; HARD CRAM ERROR IS A CRAM PARITY ERROR OCCURRING AT THE SAME CRAM ADDRESS
5820 ; MORE THAN ONCE IN A ROW).
5821
5822 013635 021 344 040 SOFTERR: LXI D,SCEADR ; "D,E" PAIR WILL POINT AT THE DESIRED
5823 013640 315 155 030 CALL BREAK ; GO CHECK IF CURRENT .EQ. DESIRED..
5824 013643 312 100 027 JZ HRDERR ; IF YES, JUMP 'CAUSE ITS A HARD ERROR
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 156
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
5826
5827 ; SOFT CRAM ERRO RECOVERY CONTINUED....
5828 ; RECOVERY BEGINS BY ZAPPING THE PE(1) FLOP SO WE MAY CATCH ANY ADDITIONAL
5829 ; PARITY ERRORS.
5830
5831 013646 076 001 MVI A,1 ; BIT TO RESET CRAM C.R. & PE(1)
5832 013650 323 204 OUT CRMCTL ; ***** I/O WRT/204 *****
5833
5834 ; FALL THRU IF ADDRESS NOT THE SAME
5835
5836 013652 042 344 040 NOTSAME: SHLD SCEADR ; SAVE IT AS THE NEW "PREVIOUS"
5837
5838 ; NOW CHECK RH11 TO SEE IF THIS FAILURE IS RECOVERABLE FOR THE
5839 ; MONITOR. 8080 WILL SIMPLY EXECUTE A CHANNEL COMMAND LIST OF
5840 ; "ERRTST", WITH THE CORRECT ERROR BITS CHECKED FOR.
5841
5842 013655 041 161 027 LXI H,RH.TST ; POINT TO ERROR CHECKER COMMAND LIST
5843 013660 315 007 025 CALL CHNXCT ; EXECUTE THAT LIST
5844 013663 332 075 027 JC NR ; IF BAD, SAY NOT RECOVERABLE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 157
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
5846
5847 ; ELSE...FALL INTO THE SOFT RECOVERY CODE
5848
5849 ; FINALLY GET TO HERE IF THIS THING LOOKS RECOVERABLE. NOW WE MUST
5850 ; BEGIN SAVING THINGS. FIRST.. GET THE CURRENT DISK UBA NUMBER TO
5851 ; SET UP THE RH11 REGISTER SAVING. THEN WE MUST SET UP THE RH11
5852 ; BASE REGISTER ITSELF. WHILE WE ARE AT IT, MIGHT AS WELL PRINT
5853 ; A LITTLE MESSAGE SAYING WHAT WE ARE DOING IN HERE.
5854
5855 013666 RECVR: PLINE OKSCE ; ERR MSG "%SCE" SOFT CRAM ERROR
(1) 013666 337 RST 3 ; PRINT LINE OF CHARS
(1) 013667 227 027 .ADDR OKSCE ; BUFF TO PRINT
5856 013671 041 344 040 LXI H,SCEADR ; NOW POINT TO THIS BAD ADDRESS
5857 013674 315 303 030 CALL P16 ; AND PRINT IT
5858 013677 PCRLF ; TERMINATE EVERYTHING WITH A CR-LF
(2) 013677 347 RST 4
(2) 013700 002 .BYTE 2
5859 013701 315 012 023 CALL DSKDFT ; NOW GET THOSE DEFAULTS JUST MENTIONED
5860 013704 257 XRA A ; CLEAR ACCUM
5861 013705 323 100 OUT RESET ; *****I/O WRT 100***** NO PAR CHECKING
5862
5863 ; FINALLY READY TO BEGIN THE ACT OF SAVING SOME REGISTERS.
5864 ; FIRST GET UBA LOCATION 763001.
5865
5866 013707 041 153 027 LXI H,UBA.RD ; POINTER TO UBA READ-IN LIST
5867 013712 315 007 025 CALL CHNXCT ; READ-IN THE UBA INFO.. NOW ITS IN EMBUF
5868 013715 INTON ; DON'T PRINT THIS
(1) 013715 327 RST 2 ; GO SET INTERNAL MODE
5869 013716 315 302 012 CALL EI1 ; ACTUALLY DO THE READ-IN
5870 013721 INTOFF ; OK NOW
(1) 013721 367 RST 6 ; GO EXIT FROM INTERNAL MODE
5871
5872 ; BEFORE WE SAVE IT, WE WILL SET UP FOR SAVING RH REGISTERS.. THAT WAY,
5873 ; WE CAN USE SOME COMMON CODE FOR PUTTING DATA INTO OUR SAVE BUFFER.
5874
5875 013722 001 200 027 LXI B,RH.EXE ; NOW POINT TO A CHANNEL COMMAND LIST
5876 013725 021 172 040 LXI D,RM100 ; AND POINT TO A PLACE TO PUT THE LIST
5877 013730 076 006 MVI A,6 ; IT TAKES SIX BYTES TO MOVE THE ENTIRE LIST
5878 013732 315 005 033 CALL M5B ; MOVE THE STUFF TO RAM
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 158
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
5880
5881 ; THE CODE TO MOVE BYTES REQUIRES "B,C" POINTING TO THE SOURCE AND "D,E"
5882 ; POINTING TO THE DESTINATION. AND "A" HAVING HOW MANY BYTES TO BE MOVED.
5883 ; "MOVREG" DOES 5 BYTES FREE OF CHARGE. B,C AND D,E ARE UPDATED BY THE
5884 ; NUMBER OF BYTES MOVED.
5885
5886 013735 041 206 027 LXI H,SAVLST ; POINT TO A LIST OF THINGS WHICH WE MUST SAVE
5887 013740 345 PUSH H ; PLACE IT IN THE RAM FOR SAFE KEEPING
5888 013741 021 327 042 LXI D,RHSAVE ; D,E GETS THE POINTER TO THE SAVE AREA
5889 013744 001 012 040 RH.LP: LXI B,EMBUF ; WE WILL ALWAYS BE MOVING STUFF FROM "EMBUF"
5890 013747 315 003 033 CALL MOVREG ; MOVE 5 BYTES, PLEASE
5891
5892 ; TO SAVE THE RH REGISTERS, WE WILL PUT A TINY CHANNEL COMMAND LIST INTO
5893 ; RAM SPACE, THEN EXECUTE IT, CHANGING THE DESIRED REGISTERS BETWEEN READS,
5894 ; WHICH WILL GIVE US A CHANCE TO SAVE THE RESULTS OF THE READ.
5895
5896 013752 341 POP H ; GET POINTER INTO "REG TO BE SAVED" BUFFER
5897 013753 176 MOV A,M ; GET CURRENT BYTE INTO ACCUM
5898 013754 062 173 040 STA RM100+1 ; PUT BYTE INTO BUFFER SO CAN BE EXECUTED
5899 013757 074 INR A ; UP BY ONE
5900 013760 312 000 030 JZ SCE.GO ; IF THAT MAKES .EQ. 0, THEN OUT
5901
5902 013763 043 INX H ; ELSE UPDATE POINTER
5903 013764 345 PUSH H ; SAVE THE POINTER TOO
5904 013765 041 172 040 LXI H,RM100 ; PREPARE TO EXECUTE THE READIN BUFFER
5905 013770 325 PUSH D ; NOW SAVE SPOT WE ARE IN IN THE RHSAVE AREA
5906 013771 315 007 025 CALL CHNXCT ; DO IT..ONE RH REGISTER IS IN
5907 013774 321 POP D ; RETRIEVE POINTER TO THE DATA SAVE SPACE
5908 013775 303 344 027 JMP RH.LP ; SAVE INFO, AND READ IN NEXT RH REGISTER
5909
5910 ; NOW DATA HAS BEEN SAVED, WE CAN ACTUALLY BEGIN TO RESTORE THE MICRO-CODE
5911
5912 014000 SCE.GO: INTON ; SET INTERNAL MODE
(1) 014000 327 RST 2 ; GO SET INTERNAL MODE
5913 014001 021 002 002 LXI D,^O1002 ; PLACE IN DISK PAGE OF POINTERS TO MICRO-CODE
5914 014004 315 257 022 CALL FILESH ; GO READ IN THE FIRST PAGE OF MICRO-CODE
5915 014007 332 161 032 JC C.BTERR ; IF ERR ITS ALL OVER
5916
5917 014012 315 027 023 CALL DMEM2CR ; GO LOAD CRAM
5918
5919 014015 052 344 040 LHLD SCEADR ; GET ADDRESS AT WHICH TO CONTINUE
5920 014020 315 267 014 CALL CADWR ; SET THE CRAM ADDRESS TO THE GUY THAT SLIPPED
5921
5922 ; WE ARE NEARING THE END OF THIS RECOVERY STUFF.. WE MUST RESTORE THE STATE
5923 ; OF THE RH11 AND UBA TO WHAT IT WAS BEFORE WE STARTED, THEN WE CAN TURN THE
5924 ; CLOCKS ON AGAIN.
5925
5926 014023 041 153 027 LXI H,UBA.RD ; POINT TO A UBA READ CHANNEL COMMAND LIST
5927 014026 315 007 025 CALL CHNXCT ; SET THE I/O ADDRESS TO A UBA PAGE REGISTER
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 159
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
5929
5930 ; NOW FIX UP THE FORMAT BETWEEN A READ OF THE UBA PAGING REG, AND
5931 ; THE WRITE WE WISH TO DO TO THE PAGING RAM.
5932
5933 014031 072 332 042 LDA RHSAVE+3 ; GET THE BYTE THAT HAS THE CURRENT CNTRL BITS
5934 014034 346 170 ANI ^O170 ; OFF JUNK, KEEP ONLY 4 RELEVANT BITS
5935 014036 117 MOV C,A ; SAVE IN THE C REG
5936 014037 041 327 042 LXI H,RHSAVE ; NOW POINT TO OUR BUFFER WITH THE DESIRED INFO
5937 014042 315 140 031 CALL SHR36 ; SHIFT DATA RIGHT, 4 PLACES
5938 014045 004 .BYTE 4
5939
5940 014046 171 MOV A,C ; GET OUR CONTROL BITS BACK
5941 014047 062 331 042 STA RHSAVE+2 ; PLOP THEM INTO THE 36 BIT WORD
5942 014052 315 140 031 CALL SHR36 ; NOW SHIFT THE WHOLE MESS 5 MORE PLACES
5943 014055 005 .BYTE 5
5944
5945 ; AND THATS IT.. MOVE STUFF TO A DEPOSIT BUFFER
5946
5947 014056 MOV5B ; A "MOVE"
(1) 014056 347 RST 4
(1) 014057 000 .BYTE 0
5948 014060 327 042 .ADDR RHSAVE ; FROM THE SAVE BUFFER
5949 014062 047 040 .ADDR DMDAT ; TO THE DEPOSIT BUFFER
5950 014064 315 341 012 CALL DI1 ; WRITE THIS MESS BACK TO UBA PAGING RAM
5951
5952 ; NOW WE WANT TO WRITE BACK THE RH11 REGISTERS THAT WE SAVED, THEN DESTROYED
5953
5954 014067 041 200 027 LXI H,RH.EXE ; NOW SET THE RH11 REGISTER I.D. INTO THE
5955 014072 315 007 025 CALL CHNXCT ; INTERNAL BUFFER "IOAD",INCLUDING UBA NUMBER
5956
5957 014075 041 206 027 LXI H,SAVLST ; POINT TO LIST OF REGS TO BE RESTORED
5958 014100 345 PUSH H ; SAVE THIS INFO ON THE STACK
5959 014101 001 334 042 LXI B,RHSAVE+5 ; WILL BEGIN MOVING STUFF WE SAVED FROM RH
5960 014104 021 047 040 DI.LP: LXI D,DMDAT ; ALWAYS MOVE THE STUFF TO THE DEPOSIT BUFFER
5961 014107 315 003 033 CALL MOVREG ; MOVE THE STUFF INTO "DMDAT"
5962 014112 341 POP H ; GET OUR LITTLE LIST POINTER
5963 014113 072 024 040 LDA IOAD ; GET CURRENT OFFSET INTO RH
5964 014116 346 300 ANI ^O300 ; THROW AWAY CURRENT OFFSET
5965 014120 266 ORA M ; THROW OUR DESIRED OFFSET INTO THE WORD
5966 014121 062 024 040 STA IOAD ; PUT IT BACK INTO THE IOAD BUFFER
5967 014124 176 MOV A,M ; GET THE OFFSET WE JUST MESSED WITH
5968 014125 074 INR A ; TEST TO SEE IF END OF LIST
5969 014126 312 143 030 JZ CONT.I ; IF END OF LIST, FINISH THE RECOVERY
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 160
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
5971
5972 ; NOT END OF LIST, MUST SAVE SOME MORE RH REGISTERS
5973
5974 014131 043 INX H ; UPDATE THE LIST POINTER
5975 014132 345 PUSH H ; SAVE THE POINTER
5976 014133 305 PUSH B ; SAVE POINTER TO THE SAVED DATA IN "RHSAVE"
5977 014134 315 341 012 CALL DI1 ; NOW RESTORE THIS RH REGISTER
5978 014137 301 POP B ; RESTORE POINTER INTO BUFFER
5979 014140 303 104 030 JMP DI.LP ; CONTINUE
5980
5981 014143 315 325 016 CONT.I: CALL SMFINI ; GET CURRENT PARITY DEFAULTS & WRITE THEM OUT
5982 014146 315 163 014 CALL CSCMD ; TURN THE CLOCK BACK ON
5983 014151 INTOFF ; NO MORE INTERNAL MODE
(1) 014151 367 RST 6 ; GO EXIT FROM INTERNAL MODE
5984 014152 303 260 001 JMP NULLJ ; GO
5985 000 .ENDC
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 161
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
5987
5988 ; ROUTINE TO CHECK IF CURRENT RAM ADDRESS IS THE DESIRED BREAK ADDRESS..
5989
5990 014155 325 BREAK: PUSH D ; "D,E" HAS POINTER TO DESIRED ADDR, SAVE IT
5991 014156 076 003 MVI A,3 ; DIAG FUNC TO READ CURRENT RAM ADDR
5992 014160 315 331 014 CALL READC ; GO DO FUNCTION READ
5993 014163 321 POP D ; NOW MAKE "D,E" POINT AT DESIRED AGAIN
5994
5995 014164 052 100 040 LHLD TMPB2 ; GET CURRENT ADDRESS..
5996 014167 174 MOV A,H ; ALSO MAKE SURE CURRENT JUST READ IS 11 BITS
5997 014170 346 007 ANI ^O7 ; 8 BITS LO HALF, PLUS 3 BITS HI HALF
5998 014172 147 MOV H,A ; NOW PUT THE WHOLE MESS BACK
5999
6000 014173 032 LDAX D ; GET LO ORDER PIECE TO ACCUM
6001 014174 275 CMP L ; CHECK VERSUS JUST READ
6002 014175 300 RNZ ; IF .NE. 0, THEN NO MATCH, SO OUT..
6003 014176 023 INX D ; OK, SO UPDATE PNTR TO READ-IN
6004 014177 032 LDAX D ; GET HI ORDER OF DESIRED PIECE
6005 014200 274 CMP H ; COMPARE, SIGNS TAKE CARE OF THEMSELVES
6006 014201 311 RET ; IF RESULT OF ADD WAS ZERO, GOOD.IF NOT,OK TOO..
6007
6008 ; ROUTINE TO DO SHORT FORM OF EXAMINE MEMORY
6009 ; ENTER WITH "D,E" CONTAINING SHORT ADDRESS
6010
6011 014202 067 EXAMSH: STC ; SET C-BIT FOR LATER USE IN COMMON CODE
6012 014203 343 DEPSHT: XTHL ; SWAP SO H,L POINTS TO TRAILING ARG
6013 014204 315 044 033 CALL TARG1 ; COLLECT TRAILING ARG INTO "D,E"
6014 014207 343 XTHL ; SWAP BACK SO THAT THINGS ARE RIGHT
6015 014210 353 XCHG ; AND NOW MAKE "H,L" HOLD THE TRAILING ARG
6016 014211 042 235 040 EXMHL: SHLD SHRTAD ; STORE SHORT ADDRESS IN THE RAM
6017 014214 021 235 040 LXI D,SHRTAD ; DE, GETS REPLACED WITH A POINTER TO SHORT ADDRESS
6018 014217 365 PUSH PSW ; SAVE THE C-BIT FOR LATER USE
6019 014220 334 364 011 CC EMINT ; IF C WAS SET, GO DO AN EXAMINE
6020 014223 361 POP PSW ; GET FLAGS AS THEY WERE
6021 014224 324 162 012 CNC DMINT ; IF C WAS CLR DO A DEPOSIT
6022 014227 311 RET ; NOW OK TO RETURN
6023
6024 ; ROUTINE THAT EXECUTES AN "ARG16", THEN RETURNS THE DATA IN "H,L"
6025
6026 014230 ARG16.: ARG16 ; ARGUMENT ASSEMBLER
(1) 014230 347 RST 4
(1) 014231 004 .BYTE 4
6027 014232 275 040 .ADDR T80DT ; USE A TEMP LOCATION
6028
6029 014234 052 275 040 LHLD T80DT ; GATHER DATA INTO H,L
6030 014237 311 RET ; AND BACK
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 162
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
6032
6033 ; SUBROUTINE TO PRINT A SINGLE 8-BIT BYTE AS OCTAL DATA OF THE FORM: XXX
6034 ; NO REGS DESTROYED..PNTR TO 8-BIT BYTE PASSED IN "H,L"
6035
6036 014240 345 P8BIT: PUSH H ; SAVE ALL REGISTERS
6037 014241 305 P8BIT1: PUSH B
6038 014242 325 PUSH D
6039 014243 365 PUSH PSW
6040 014244 315 016 031 CALL OCTAL ; CREATE 8-BIT BUFFER AS A 3 OCTAL CHARACTERS
6041 014247 001 .BYTE 1 ; ONE BYTE OF BINARY DATA INVOLVED
6042 014250 003 .BYTE 3 ; WANT ONLY 3 OCTAL CHARS
6043 014251 016 003 MVI C,03 ; NUM CHARS TO PRINT
6044 014253 361 P8LP: POP PSW ; CHAR OFF TOP OF STACK
6045 014254 315 343 003 CALL PCHR ; AND GO PRINT IT
6046 014257 015 DCR C ; DOWN COUNT
6047 014260 302 253 030 JNZ P8LP ; AND CONTINUE TILL DONE ALL 3
6048
6049 014263 361 POP PSW ; RESTORE REGS
6050 014264 321 POP D
6051 014265 301 POP B
6052 014266 341 POP H
6053 014267 311 RET ; AND ALL DONE
6054
6055 ; WHEN DOING A "P8BIT" WITH THE DATA PASSED IN THE ACCUM
6056 ; INSTEAD OF BEING POINTED TO BY H,L THEN COME HERE.
6057
6058 014270 345 P8BITA: PUSH H ; MUST SAVE H,L HERE, SO WE CAN MESS IT UP
6059 014271 041 122 040 LXI H,P8.TMP ; KEEP A PLACE FOR PRINTING DATA
6060 014274 167 MOV M,A ; PUT THE THING TO BE PRINTED IN THE RAM SPACE
6061 014275 303 241 030 JMP P8BIT1 ; GO TO COMMON CODE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 163
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
6063
6064 ; SUBROUTINE TO PRINT 16-BITS WORTH OF DATA..
6065 ; POINTER TO THAT DATA IS PASSED TO THE ROUTINE IN REGISTER "H,L"
6066
6067 014300 041 100 040 P16.: LXI H,TMPB2 ; IN THIS TYPE CALL, WE LOAD H,L AUTOMATICALLY
6068 014303 365 P16: PUSH PSW ; SAVE ALL THE REGISTERS
6069 014304 305 PUSH B
6070 014305 325 PUSH D
6071 014306 345 PUSH H
6072
6073 014307 315 016 031 CALL OCTAL ; CREATE OCTAL CHARS FROM THE 16-BIT DATA
6074 014312 002 .BYTE 2 ; WE HAVE 2 BYTES OF RELEVANT DATA
6075 014313 006 .BYTE 6 ; AND WE WANT 6 OCTAL CHARS TO PRINT
6076
6077 014314 006 006 MVI B,6 ; ON RETURN WE WANT TO PRINT 6 CHARS
6078 014316 361 P16LP: POP PSW ; GET OCTAL CHAR OFF STACK
6079 014317 315 343 003 CALL PCHR ; AND GO PRINT IT
6080 014322 005 DCR B ; DOWN THE COUNT
6081 014323 302 316 030 JNZ P16LP ; BACK TO PRINT MORE TILL ALL DONE
6082
6083 014326 341 POP H ; DONE..NOW RESTORE ALL REGS
6084 014327 321 POP D
6085 014330 301 POP B
6086 014331 361 POP PSW
6087 014332 311 RET ; AND RETURN
6088
6089 ; SUBROUTINE PRINT 36-BIT BINARY DATA AS A 12-OCTAL DIGIT CHARACTER
6090 ; STRING IN THE FORM: XXXXXX,,XXXXXX
6091 ; NO REGS DESTROYED-BIN DATA PNTR PASSED IN "H,L".
6092
6093 014333 041 012 040 P36.: LXI H,EMBUF ; IN THIS CALL, WE LOAD H,L AUTOMATICALLY
6094 014336 365 P36: PUSH PSW ; WILL SAVE ALL REGS IN HERE
6095 014337 305 PUSH B
6096 014340 325 PUSH D
6097 014341 345 PUSH H
6098 014342 315 016 031 CALL OCTAL ; CREATE 36-BIT BUFFER AS AN OCTAL CHAR STRING
6099 014345 005 .BYTE 5 ; 5 BYTES REQUIRED BY 36-BITS
6100 014346 014 .BYTE ^D12 ; WANT 12 OCTAL DIGITS
6101
6102 014347 315 366 030 CALL PHALF ; PRINT 18 BITS
6103
6104 ; IF HERE, JUST FINISHED FIRST PASS, NEED 2 COMMAS.
6105
6106 014352 PCHAR COMMA
(1) 014352 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 014353 054 .BYTE COMMA ; CHAR TO PRINT
6107 014354 PCHAR COMMA ; PRINT ",,"
(1) 014354 317 RST 1 ; GO PRINT CHAR IN TRAILING BYTE
(1) 014355 054 .BYTE COMMA ; CHAR TO PRINT
6108 014356 315 366 030 P36RH: CALL PHALF ; PRINT 18 MORE BITS...
6109 014361 341 POP H ; NOW RESTORE ALL THE REGS
6110 014362 321 POP D
6111 014363 301 POP B
6112 014364 361 POP PSW
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 163-1
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
6113 014365 311 RET ; RETURN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 164
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
6115
6116 ; ROUTINE PRINTS 18 BITS AS 6 OCTAL CHARS
6117
6118 014366 341 PHALF: POP H ; GET A RETURN ADDR OFF STACK,SO STACK IS CLR
6119 014367 006 006 MVI B,6 ; "B" WILL BE A COUNTER, IN IT WITH 3
6120 014371 361 P36L2: POP PSW ; CHARACTERS TO ACCUM
6121 014372 315 343 003 CALL PCHR ; PRINT IT
6122
6123 014375 005 DCR B ; DOWN COUNT
6124 014376 302 371 030 JNZ P36L2 ; CONTINUE IF NOT DONE 6 CHARS YET
6125 014401 351 PCHL ; RETURN
6126
6127 ; ROUTINE TO ALONE PRINT 18 BITS
6128
6129 014402 365 P18: PUSH PSW ; WILL SAVE ALL REGS IN HERE
6130 014403 305 PUSH B
6131 014404 325 PUSH D
6132 014405 345 PUSH H
6133 014406 315 016 031 CALL OCTAL ; CREATE 6 OCTAL CHARS
6134 014411 003 .BYTE 3 ; 3 BYTES HAVE RELEVANT DATA
6135 014412 006 .BYTE 6 ; AND DESIRE 6 OCTAL CHARS
6136
6137 014413 303 356 030 JMP P36RH ; GO TO RIGHT HALF PRINTER FROM "P36"
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 165
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
6139
6140 ; UNIVERSAL BINARY DATA TO ASCII CHARACTER SUBROUTINE.
6141 ; ROUTINE DESTROYS THE CONTENTS OF ALL REGISTERS. PASS POINTER TO
6142 ; BINARY DATA IN "H,L" ,THEN CALL APPROPRIATE CONVERSION DESIRED
6143 ; WITH 2 TRAILING PARAMETERS-CHARS PLACED ON STACK, MSB-LSB.
6144 ; CALL ROUTINE
6145 ; DB XX ; NUMBER OF BYTES HOLDING RELEVANT BINARY DATA
6146 ; DB YY ; NUMBER OF ASCII CHARACTERS TO BE GENERATED
6147 ; ROUTINES ARE "OCTAL", "BINRY", AND "HEXIDECIMAL"
6148
6149 ; CODE WAS NEVER USED..KEEP TEXT HERE JUST IN CASE WE EVER NEED TO ADD IT..
6150 ; THIS WAY WE WON'T HAVE TO FIGURE IT ALL OUT AGAIN.
6151 ;
6152 ;BINRY: LXI D,^O401 ; LOAD D=1,E=1
6153 ; JMP COMEN ; GO TO COMMON CODE
6154
6155 014416 021 007 003 OCTAL: LXI D,^O1407 ; LOAD D=3,E=7
6156 014421 353 XCHG ; SWAP "D,E" WITH "H,L"
6157 014422 042 202 040 SHLD BTMSK ; SET DATA INTO "BTMSK" & "BTNUM"
6158
6159 ; POINTER TO BIN DATA NOW IN "D,E"
6160
6161 014425 343 XTHL ; "H,L" NOW POINTS TO TRAILING ARGS
6162 014426 106 MOV B,M ; BOMB "B" REGISTER, NOW CONTAINS "NUM" BYTES
6163 014427 043 INX H ; UPDATE PNTR
6164 014430 116 MOV C,M ; NUM CHARS INTO C
6165 014431 043 INX H ; AND UPDATE PNTR TO RET ADDR
6166
6167 014432 042 217 040 SHLD HLSAVE ; SAVE RETURN IN RAM
6168 014435 341 POP H ; CLEAR OLD STUFF OFF STACK
6169 014436 305 PUSH B ; SAVE "B,C" JUST TEMPORARILY
6170
6171 014437 041 073 040 LXI H,TMPBF2 ; "H,L" NOW POINTS TO TEMPORARY BUFFER
6172
6173 ; IF FALL TO HERE, MUST MOVE DATA FROM BINARY BUFFER TO TEMP BUFFER
6174
6175 014442 032 OCTL1: LDAX D ; DATA POINTED TO BY "D,E" TO ACCUM
6176 014443 023 INX D ; BUMP POINTER
6177 014444 167 MOV M,A ; SET THAT DATA IN RAM
6178 014445 043 INX H ; BUMP POINTER
6179 014446 005 DCR B ; DONE ALL BYTES YET?
6180 014447 302 042 031 JNZ OCTL1 ; BACK TILL MOVED ALL.
6181
6182 014452 301 POP B ; RESTORE "B,C" AND GO
6183
6184 014453 041 073 040 LXI H,TMPBF2 ; "H,L" NOW PNTS TO TMP BUFF
6185 014456 257 XRA A ; CLEAR ACCUM
6186 014457 127 MOV D,A ; CLEAR "D" REG
6187 014460 130 MOV E,B ; BYTE COUNT TO "E"
6188 014461 035 DCR E ; BUFF IS ALWAYS 1 LESS THAN BYTE COUNT
6189 014462 031 DAD D ; "H,L" GETS BUFF ADDR PLUS BYTE COUNT
6190 014463 042 233 040 SHLD OCTSV ; AND SAVE THIS ADDR IN THE RAM
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 166
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
6192
6193 ; HERE WILL BEGIN TRANSLATION FROM BINARY TO CHARACTERS
6194
6195 014466 041 073 040 OCTLC: LXI H,TMPBF2 ; "H,L" NOW POINTS TO TEMPORARY BUFFER
6196 014471 072 202 040 LDA BTMSK ; NOW GET BIT MASK
6197 014474 246 ANA M ; AND TO KEEP ONLY DESIRED CHARS
6198
6199 014475 306 060 ADI ^O60 ; MAKE INTO ASCII
6200
6201 ; NOW MUST ROTATE ENTIRE BUFFER 3 PLACES TO RID OURSELVES OF CHAR JUST PROCESSED
6202 014477 365 PUSH PSW ; NOW SAVE CHARACTER WEVE JUST CREATED
6203 014500 015 DCR C ; DOWN THE CHAR COUNT
6204 014501 312 134 031 JZ OCTL5 ; JUMP OUT IF PROCESSED ALL CHARS
6205 014504 072 203 040 LDA BTNUM ; GET NUM BITS INTO ACCUM
6206 014507 127 MOV D,A ; "D" GETS INITAL COUNT OF BITS
6207
6208 014510 130 OCTL3: MOV E,B ; "E" GETS BYTE COUNT
6209 014511 052 233 040 LHLD OCTSV ; GET UPDATED BUFF PNTR TO "H,L"
6210 014514 247 ANA A ; CLEAR "C-BIT"
6211
6212 014515 176 OCTL4: MOV A,M ; GROUP OF BINARY BITS TO ACCUM
6213 014516 037 RAR ; BIT 0 INTO "C" BIT
6214 014517 167 MOV M,A ; AND SHIFTED DATA BACK INTO MEM
6215 014520 053 DCX H ; STEP UP IN THE BUFFER (UPSIDE-DOWN BUFFER)
6216 014521 035 DCR E ; DOWN BYTE COUNT
6217 014522 302 115 031 JNZ OCTL4 ; CONTINUE WITH BUFFER
6218 014525 025 DCR D ; DONE BUFFERS WORTH, SEE IF DONE ALL 3 BITS WORTH
6219 014526 302 110 031 JNZ OCTL3
6220
6221 ; DONE THE 3-BITS, NOW CONTINUE WITH NEXT CHARACTER
6222
6223 014531 303 066 031 JMP OCTLC ; GO PROCESS NEXT CHARACTER
6224
6225 ; HERE WHEN DONE ALL CHARS.
6226
6227 014534 052 217 040 OCTL5: LHLD HLSAVE ; GRAB THE RETURN ADDRESS
6228 014537 351 PCHL ; AND RETURN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 167
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
6230
6231 ; SUBROUTINE TO SHIFT 36-BIT DATA BUFFER SOME NUMBER OF PLACES TO THE
6232 ; RIGHT. ADDRESS OF BUFFER TO BE SHIFTED IS PASSED IN "H,L". NUMBER
6233 ; OF PLACES FOR IT TO BE SHIFTED IS PASSED AS A TRAILING PARAMETER IN
6234 ; A BYTE TRAILING THE SUBROUTINE CALL.
6235 ; CALL SHR36
6236 ; .BYTE XX ; NUM PLACES TO SHIFT
6237
6238 014540 076 005 SHR36: MVI A,5 ; A SHIFT 36 REQUIRES 5 BYTES TO BE MOVED
6239 014542 SHR24:
6240 014542 343 SHRGO: XTHL ; POINTER TO TRAILING BYTE INTO "H,L"
6241 014543 305 PUSH B ; SAVE ALL THE REGISTERS
6242 014544 106 MOV B,M ; NUMBER PLACES TO SHIFT IN "B"
6243
6244 014545 063 INX SP ; BUMP STACK POINTER AROUND THE SAVED "B,C"
6245 014546 063 INX SP
6246 014547 043 INX H ; NOW BUMP RETURN ADDRESS PAST THE TRAILING ARG
6247 014550 343 XTHL ; AND PUT IT BACK ONTO THE STACK
6248 014551 073 DCX SP ; NOW FIX STACK SO THAT SAVED "B,C" IS BACK ON TOP
6249 014552 073 DCX SP
6250 014553 325 PUSH D
6251 014554 345 PUSH H
6252
6253 014555 137 MOV E,A ; NUMBER OF BYTES INVOLVED WAS IN A, SAVE IN E
6254
6255 014556 075 DCR A ; FIX COUNT
6256 014557 205 ADD L ; AND NOW ADD COUNT TO "H,L" ADDRESS
6257 014560 157 MOV L,A ; PUT BACK INTO LO ORDER
6258 014561 174 MOV A,H ; GET HI PIECE
6259 014562 316 000 ACI 0 ; AND ADD A CARRY TO H IF THERE WAS ONE
6260 014564 147 MOV H,A ; NOW PUT IT BACK
6261
6262 014565 345 PUSH H ; AND PUT ON STACK FOR REUSE
6263
6264 014566 341 S36BL: POP H ; FETCH SAVED, UPDATED ADDRESS
6265 014567 345 PUSH H ; NOW SAVE "H,L"
6266 014570 113 MOV C,E ; GET NUMBER BYTE INVOLVED INTO C AGAIN
6267 014571 247 ANA A ; CLEAR THE C-BIT
6268
6269 014572 176 S36LP: MOV A,M ; GET BYTE FROM BUFF TO ACCUM
6270 014573 037 RAR ; SHIFT IT RIGHT
6271 014574 167 MOV M,A ; NOW PUT IT BACK INTO THE BUFFER
6272 014575 053 DCX H ; NEXT BYTE
6273
6274 014576 015 DCR C ; WAIT!..HAVE WE DONE ALL BYTES YET??
6275 014577 302 172 031 JNZ S36LP ; BACK INTO LOOP IF NOT YET
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 168
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
6277
6278 ; FALL THRU WHEN DONE THE 5 BYTES
6279
6280 014602 005 DCR B ; DONE NUMBER OF TIMES YET??
6281 014603 302 166 031 JNZ S36BL ; JUMP IF YES DONE ALL
6282
6283 ; HERE WHEN ALL DONE
6284
6285 014606 341 POP H ; RESTORE THE "H,L"+X
6286 014607 341 POP H ; RESTORE "B,C"
6287 014610 321 POP D ; RESTORE "D,E"
6288 014611 301 POP B ; RESTORE "H,L"
6289 014612 311 RET
6290
6291 ; ROUTINE TO ASSEMBLE 16-BIT ARGUMENT. PLACE TO PUT 16-BIT DATA PASSED
6292 ; AS A TRAILING ARGUMENT. "B,C" IS MESSED UP BY THIS ROUTINE.
6293
6294 ; CALL ARG16
6295 014613 076 014 ARG96: MVI A,12. ; NUMB BYTES USED IN ARG96 IS 12
6296 014615 303 230 031 JMP ARGBG1
6297
6298 014620 076 005 .ARG36: MVI A,5 ; NUMB BYTES USED IN ARG36 IS 5
6299 014622 303 227 031 JMP ARGBEG
6300
6301 014625 076 002 .ARG16: MVI A,2 ; NUMB BYTES USED IN ARG16 IS 2
6302 014627 341 ARGBEG: POP H ; GET H,L FROM TRAP HANDLER
6303 014630 062 214 040 ARGBG1: STA CHRCNT ; SAVE IT
6304 014633 072 213 040 LDA RPTON ; IS THIS A REPEAT?
6305 014636 247 ANA A ; CHECK THE REPEAT FLAG
6306 014637 302 371 031 JNZ CLEAN ; JUMP IF YES A REPEAT....
6307
6308 ; ELSE FALL THRU AND "GET" CHARACTERS AS BINARY DATA
6309
6310 014642 052 223 040 LHLD .ARG1 ; GET PNTR TO ARG
6311 014645 001 000 000 LXI B,00 ; CLR REGS "B,C"
6312
6313 014650 176 GETLP: MOV A,M ; GET AN ASCII CHARACTER
6314 014651 326 060 SUI ^O60 ; OTHERWISE, OFF ASCII STUFF
6315 014653 346 370 ANI ^O370 ; NOW BE SURE IT WAS NUM AND NOT CHAR
6316 014655 302 271 031 JNZ GETEN ; IF HAD BITS GO SEE IF PROPER ENDING
6317 014660 176 MOV A,M ; MESSED UP CHAR, GET IT BACK
6318 014661 326 060 SUI ^O60 ; OFF THE ASCII AGAIN
6319 014663 365 PUSH PSW ; SO WE CAN STACK IT
6320
6321 014664 014 INR C ; WAS OK.. SO UP COUNT
6322 014665 043 INX H ; AND UPDATE TO NEXT CHAR
6323 014666 303 250 031 JMP GETLP ; AND CONTINUE TILL DONE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 169
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
6325
6326 ; JUMP TO HERE WHEN STACKED ALL THE CHARS
6327
6328 014671 315 241 033 GETEN: CALL SEPCHR ; THROW OUT TRAILING SPACES & TABS
6329 014674 042 223 040 SHLD .ARG1 ; SAVE "H,L"
6330 014677 315 330 032 CALL EOCML ; END OF LINE?
6331 014702 322 134 032 JNC KILNM ; IF NOT WE HAVE A PROBLEM
6332
6333 014705 052 207 040 LHLD RPBUFS ; GET PNTR TO REPEAT DATA BUFFER
6334 014710 257 XRA A ; CLR ACCM
6335 014711 167 MOV M,A ; CLR THE "BYTE" COUNTER
6336 014712 043 INX H ; UPDATE POINTER
6337
6338 014713 135 MOV E,L ; COPY POINTER INTO "D,E" REG
6339 014714 124 MOV D,H
6340 014715 015 DCR C ; MAKE C START AT COUNT-1
6341
6342
6343 014716 325 RPINCB: PUSH D ; H,L SHOULD BE SAME AS D,E
6344 014717 341 POP H ; SO DO IT USING STACK
6345 014720 023 INX D ; EXCEPT D,E SHOULD BE
6346 014721 023 INX D ; 3 GREATER
6347 014722 023 INX D
6348
6349 014723 345 PUSH H ; SAVE H,L FOR A MINUTE
6350 014724 052 207 040 LHLD RPBUFS ; WHILE THE "BYTE" COUNTER GETS UPDATED
6351 014727 176 MOV A,M ; COPY CURRENT COUNT
6352 014730 306 003 ADI 3 ; UPDATE BY 3
6353 014732 167 MOV M,A ; NOW PUT IT BACK
6354 014733 341 POP H ; AND FIX UP H,L
6355
6356 014734 006 010 MVI B,8. ; B GETS A COUNT OF 8 FOR OUR LOOP
6357 014736 361 A16PK: POP PSW ; GET 3-BIT BINARY
6358
6359 014737 022 ARGQQ: STAX D ; AND PUT INTO TMP BUFFER
6360
6361 ; DON'T MESS UP "H,L", ITS NEEDED BY "SHR36" ROUTINE
6362
6363 014740 315 140 031 CALL SHR36 ; SHIFT THING 36 PLACES
6364 014743 003 .BYTE 3 ; SHIFT 3 PLACES
6365
6366 014744 015 DCR C ; DOWN CHAR COUNT
6367 014745 362 360 031 JP NOTRK ; FOOL THE 8-TIME LOOP IF GOES MINUS
6368 014750 257 XRA A ; CLR ACCUM,IN ORDER TO PAD WITH ZEROES
6369 014751 005 DCR B ; DOWN OUR "8" COUNTER
6370 014752 312 364 031 JZ CHKSTK ; AND OUT IF ZERO
6371 014755 303 337 031 JMP ARGQQ ; ELSE CONTINUE LOOPING
6372
6373 014760 005 NOTRK: DCR B ; DOWN COUNT THE 8-TIME LOOP
6374 014761 302 336 031 JNZ A16PK ; IF STILL DOING 8-TIMES
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 170
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
6376
6377 ; DONE 8-TIMES..NOW CHECK IF C HAS GONE TO ZERO
6378
6379 014764 171 CHKSTK: MOV A,C ; COPY C TO ACCM TO CHECK IF ZERO
6380 014765 247 ANA A ; .EQ. 0?
6381 014766 362 316 031 JP RPINCB ; JUMP IF NOT YET..
6382
6383 ; ELSE FALL THRU..MUST NOW MOVE ASSEMBLED NUMBER TO DESTINATION
6384
6385 014771 052 207 040 CLEAN: LHLD RPBUFS ; GET BYTE COUNTER FOR THIS DATA
6386 014774 106 MOV B,M ; NOW B HAS COUNT OF NUMBER BYTES ASSY'D
6387 014775 043 INX H ; FIX H,L UP AGAIN..
6388
6389 ; NOW H,L HAS SRC. D,E HAS FF. STACK HAS PC
6390
6391 014776 343 XTHL ; SWAP-EEE
6392 014777 315 044 033 CALL TARG1 ; ASSEMBLE DEST ADDR INTO D,E
6393 015002 343 XTHL ; SWAP-EEE BACK
6394
6395 015003 072 214 040 LDA CHRCNT ; GET NUMB CHARS DESIRED BY THIS ROUTINE
6396 015006 117 MOV C,A ; C NOW HAS DESIRED. B HAS NUMB CHAR ASSY'D
6397 015007 176 MOVLP: MOV A,M ; START MOVING CHARS TO DESTINATION
6398 015010 022 STAX D ; CHAR TO DEST..
6399 015011 043 INX H ; UPDATE SRC POINTER
6400 015012 023 INX D ; UPDATE DEST POINTER
6401 015013 015 DCR C ; DOWN THE DESIRED COUNT
6402 015014 312 036 032 JZ FIXPNT ; IF GOT DESIRED NUMBER,DONT PASS ANY MORE
6403
6404 015017 005 DCR B ; DOWN THE ASSY'D COUNT
6405 015020 302 007 032 JNZ MOVLP ; KEEP ON KEEPIN' ON
6406
6407 ; WHEN FALL THRU WEVE MOVED ALL THAT WE CAN..NOW PAD THE BUFFER
6408
6409 015023 170 MOV A,B ; CLR ACCUM. B MUST BE ZERO
6410 015024 015 PADLP: DCR C ; DOWN THE DESIRED COUNT
6411 015025 372 042 032 JM FINARG ; IF THAT'S MINUS, WERE ALL DONE..
6412 015030 022 STAX D ; OTHERWISE STACK A ZERO
6413 015031 023 INX D ; UPDAT DEST POINTER
6414 015032 303 024 032 JMP PADLP ; AND CONTINUE TILL DONE
6415
6416 015035 043 FIXLP: INX H ; MUST UPDATE BUFFER POINTER
6417 015036 005 FIXPNT: DCR B ; DOWN THE ASSEMBLED COUNT
6418 015037 302 035 032 JNZ FIXLP ; AND GO BACK TO ADJUST POINTER IF NOT ZERO
6419
6420 015042 042 207 040 FINARG: SHLD RPBUFS ; NOW PUT BACK OUR LITTLE POINTER
6421 015045 311 RET ; AND GET OUT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 171
SUBRTN.M80 ****KS10 CONSOLE SUBROUTINE FILE
6423
6424 ; ROUTINE FOR SHUFFLING BITS FOR A NICE CRAM FORMAT
6425
6426 015046 176 PLACE: MOV A,M ; GET PIECE OF SRC BYTE
6427 015047 022 STAX D ; PLACE AT DESTINATION
6428 015050 043 INX H ; UPDATE SRC POINTER
6429 015051 023 INX D ; UPDATE DESTINATION POINTER
6430 015052 176 MOV A,M ; GET UPPER 4 BITS OF 12 BIT CHUNK
6431 015053 346 017 ANI ^O17 ; MAKE SURE ONLY 4 BITS WORTH
6432 015055 022 STAX D ; AND PLACE AT THE DESTINATION
6433 015056 023 INX D ; DESTINATION UPDATE
6434 015057 053 DCX H ; BACKUP THE SRC POINTR TO BEGIN OF 24 BITS
6435 015060 311 RET ; AND RETURN
6436
6437 ; ROUTINE TO COMPLETE THE TRAP HANDLING TYPE OPERATION WHICH CHANGES
6438 ; A NORMAL 3 BYTE SUBROUTINE CALL INTO A 2 BYTE TRAP TYPE CALL. IT
6439 ; COSTS 3 BYTES TO ADD ANY SUBROUTINE TO THE TRAP CALL, SO THAT YOU
6440 ; SAVE AT LEAST ONE BYTE FOR ANY SUBROUTINE THAT IS CALLED 3 TIMES.
6441 ; AND YOU SAVE ONE BYTE FOR EACH ADDITIONAL TIME IT IS CALLED.
6442
6443 015061 041 103 032 RTNDIS: LXI H,DLIST ; GET POINTER TO DISPATCH LIST
6444 015064 365 PUSH PSW ; SAVE STATE OF PROCESSOR FLAGS
6445 015065 325 PUSH D ; SAVE "D,E"..TRAP CANT DESTROY REGS
6446 015066 205 ADD L ; ADD OFFSET IN ACCUM TO ADDRESS.
6447 015067 157 MOV L,A ; PUT ADDR PLUS OFFSET BACK
6448 015070 174 MOV A,H ; GET HI ORDER PIECE
6449 015071 316 000 ACI 0 ; NOW ADD IN A CARRY IF THERE WAS ONE
6450 015073 147 MOV H,A ; PUT IT BACK
6451
6452 015074 136 MOV E,M ; NOW GO FETCH ADDR TO BE DISPATCHED TO
6453 015075 043 INX H ; UPDATE TO NEXT
6454 015076 126 MOV D,M ; NOW FETCH HI ORDER PIECE OF ADDR TO BE DISPATCHED TO
6455 015077 353 XCHG ; GET DISPATCH ADDR INTO H,L
6456 015100 321 POP D ; RESTORE D,E. NOW ONLY H,L//RET ADDR ON STACK
6457 015101 361 POP PSW ; RESTORE PROCESSOR FLAGS
6458 015102 351 PCHL ; DISPATCH TO APPROPRIATE SUBROUTINE
6459
6460 015103 365 032 DLIST: .ADDR .MOV5B ; +0
6461 015105 135 004 .ADDR .CRLF ; +2
6462 015107 225 031 .ADDR .ARG16 ; +4
6463 015111 000 027 .ADDR .RUN.. ; +6
6464 015113 220 031 .ADDR .ARG36 ; +8.
6465 015115 220 033 .ADDR .CLRRM ; +10.
6466
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 172
SUBRTN.M80 **** CLRB EXECUTE CODE ****
6468 .SBTTL **** CLRB EXECUTE CODE ****
6469
6470 015117 046 040 CLRBYT: MVI H,^O40 ; THIS HALF GENERATES THE "20000'S" WEIGHT OF ADDR
6471 015121 157 MOV L,A ; THIS GENERATES THE REST OF THE RAM ADDRESS
6472 015122 066 000 MVI M,0 ; CLEAR THAT LOCATION
6473 015124 341 POP H ; FIX H,L
6474 015125 311 RET ; OUT & DONE
6475
6476 .SBTTL **** SOME ERROR CODES ****
6477
6478 015126 RRARG: PLINE RAG ; "?REQUIRES ARG"
(1) 015126 337 RST 3 ; PRINT LINE OF CHARS
(1) 015127 231 037 .ADDR RAG ; BUFF TO PRINT
6479 015131 303 277 003 JMP NORML ; ERROR MUST RESET THE STACK
6480 015134 KILNM: PLINE BB1 ; ?BN BAD NUMBER
(1) 015134 337 RST 3 ; PRINT LINE OF CHARS
(1) 015135 235 037 .ADDR BB1 ; BUFF TO PRINT
6481 015137 072 251 040 MMERR: LDA MMFLG ; SEE IF IN MAINTENACE MODE
6482 015142 247 ANA A ; SET 8080 FLAGS
6483 015143 312 200 001 JZ REINI ; IF NO MM MODE, OUT
6484 015146 315 174 034 CALL DECNET ; FINISH UP ANY MESSAGES
6485 015151 315 116 014 MMERR1: CALL MMCMD ; IF YES, RESET MODE
6486 015154 303 200 001 JMP REINI ; ERROR MUST RESET THE STACK
6487
6488 ; ERRORS INCURRED DURING THE BOOT PROCESS
6489
6490 015157 306 002 D.BTERR: ADI 1*2 ; FAILURE WHEN TRIED TO START UCODE AFTER BOOT
6491
6492 015161 306 002 C.BTERR: ADI 1*2 ; FAILURE DURING THE READING OF THE MICRO-CODE
6493
6494 015163 306 002 B.BTERR: ADI 1*2 ; FAILURE DURING READING OF THE PAGE OF POINTERS
6495
6496 015165 306 002 A.BTERR: ADI 1*2 ; FAILURE DURING THE READING OF THE HOME BLOCK
6497
6498 015167 315 301 032 CALL LTFLT ; THESE BOOT ERRORS ARE FATAL
6499 015172 062 155 040 BTERR1: STA ERRCD+1 ; THIS BIT OF CODE GOES IN HI ORDER BYTE OF NUMBER
6500 015175 CLRB NOPNT ; RESTORE PRINTING
6501 015177 PLINE BTFAIL ; PRINT MESSAGE "?BT "
(1) 015177 337 RST 3 ; PRINT LINE OF CHARS
(1) 015200 122 037 .ADDR BTFAIL ; BUFF TO PRINT
6502 015202 041 154 040 LXI H,ERRCD ; POINT TO THE ERROR CODE
6503 015205 315 303 030 CALL P16 ; PRINT THE 16-BIT NUMBER
6504 015210 PCRLF ; PUT A CRLF AT THE END OF THIS LINE
(2) 015210 347 RST 4
(2) 015211 002 .BYTE 2
6505 015212 303 200 001 JMP REINI ; KILL THE PROCESS
6506
6507 ; CODE FOR WHEN ONLY BOOTSTRAP FAILS TO READIN
6508
6509 015215 041 360 040 L.BTERR: LXI H,STATE ; GET POINTER TO STATE LIGHT
6510 015220 076 001 MVI A,^O01 ; SET FAULT LIGHT, BUT DON'T CHANGE STATE
6511 015222 266 ORA M ; THROW CURRENT STATE WITH FAULT BIT
6512 015223 167 MOV M,A ; PUT STUFF BACK
6513 015224 076 020 MVI A,8*2 ; FAILURE DURING LOADING OF PRE-BOOT PROGRAM
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 172-1
SUBRTN.M80 **** SOME ERROR CODES ****
6514 015226 303 172 032 JMP BTERR1 ; AVOID SOME CODE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 173
SUBRTN.M80 **** SOME ERROR CODES ****
6516
6517 ; SUBROUTINE TO CHECK IF A COMMAND FROM THE CSL BOARD HAS BEEN GRANTED
6518 ; THE BUS. WHICH IT MUST ALWAYS BE GRANTED BECAUSE IT IS THE BUS MASTER.
6519
6520 015231 343 BUSRESP: XTHL ; GET POINTER TO TRAILING ARG
6521 015232 333 301 IN SMSTS ; ***** I/O RD 301 *****
6522 015234 057 CMA ; FIX INVERSION
6523 015235 246 ANA M ; "AND" READ STUFF VS. TRAILING ARG
6524 015236 043 INX H ; UPDATE TO RETURN ADDR
6525 015237 343 XTHL ; SWAP RETURN BACK TO STACK
6526 015240 311 RET ; RETURN.."Z-BIT" CORRESPONDS TO "AND" RESULTS
6527
6528 ; LITTLE ROUTINE TO SET AND OR CLR THE SOFTWARE RUN FLAG
6529
6530 015241 006 004 SETRN: MVI B,STBIT ; WE WANT TO SET THE RUN LIGHT
6531 015243 315 312 032 CALL STATEM ; GO DO IT
6532 015246 017 .BYTE ^O17 ; AND DON'T MASH ANYTHING
6533 015247 257 XRA A ; CLEAR ACCUM
6534 015250 057 CMA ; ACCUM = -1
6535 015251 062 165 040 RNCOM: STA RNFLG ; DATA TO RUN FLAG
6536 015254 311 RET ; AND OUT
6537
6538 015255 006 000 CLRRN: MVI B,0 ; WE DON'T WANT TO SET ANYTHING
6539 015257 315 312 032 CALL STATEM ; JUST GO AND CLEAR SOME THINGS
6540 015262 013 .BYTE ^O13 ; BITS TO KEEP
6541 015263 257 XRA A ; CLEAR ACCUM
6542 015264 303 251 032 JMP RNCOM ; AND OUT.
6543
6544 015267 NOREFRESH: CLRB NOPNT ; TURN TYPING ON
6545 015271 CLRB CHKREF ; SAY NOT TO REPORT OVER AND OVER
6546 015273 315 305 006 CALL CLRUSE ; EXIT FROM USER MODE
6547 015276 PLINE MOSMSG ; MESSAGE TO CTY
(1) 015276 337 RST 3 ; PRINT LINE OF CHARS
(1) 015277 162 037 .ADDR MOSMSG ; BUFF TO PRINT
6548
6549 015301 365 LTFLT: PUSH PSW ; MUST SAVE ACCUM TO GET CORRECT "BT ERR MSG"
6550 015302 006 001 MVI B,1 ; WE MERELY WANT TO SET FAULT LIGHT
6551 015304 315 312 032 CALL STATEM ; GO SET THE LIGHTS
6552 015307 012 .BYTE ^O12 ; BITS TO FLUSH WITH THIS
6553 015310 361 POP PSW ; RESTORE ACCUM
6554 015311 311 RET ; AND NOW SAFE TO RETURN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 174
SUBRTN.M80 **** SOME ERROR CODES ****
6556
6557 ; ROUTINE TO CLEAR AND SET BITS IN THE STATE WORD, THEN TO LIGHT
6558 ; THE LIGHTS ON THE FRONT PANEL AS SPECIFIED BY THE STATE WORD.
6559
6560 015312 343 STATEM: XTHL ; GET POINTER TO MASK
6561 015313 072 360 040 LDA STATE ; NOW FETCH CURRENT STATE OF THE MACHINE
6562 015316 246 ANA M ; MASK AS SPECIFIED
6563 015317 043 INX H ; UPDATE RETURN POINTER
6564 015320 343 XTHL ; AND PUT IT BACK ON THE STACK
6565
6566 015321 260 ORA B ; NOW THROW IN ANY NEW BITS
6567 015322 062 360 040 STA STATE ; NOW SAVE IT
6568 015325 323 101 OUT LIGHTS ; CHANGE THE LIGHTS
6569 015327 311 RET ; OUT
6570
6571 ; SUBROUTINE TO DECIDE IF "FIRST" POINTS TO AN END-OF-COMMAND CHARACTER.
6572 ; C-BIT SET IF YES, "FIRST" DOES POINT TO END-OF-COMMAND. ACCUMULATOR
6573 ; IS DESTROYED.
6574
6575 015330 345 EOCML: PUSH H ; SAVE "H,L"
6576 015331 052 223 040 LHLD .ARG1 ; GET CURRENT POINTER FOR COMMAND BUFFER
6577
6578 015334 176 MOV A,M ; GET CHARACTER
6579
6580 015335 376 073 CPI SEMIC ; (5.2H) COMMENT BEGINNING?
6581 015337 312 137 032 JZ MMERR ; (5.2H) JUMP IF YES
6582
6583 015342 376 377 CPI EOLCH ; END-OF-COMMAND?
6584 015344 312 362 032 JZ EOLYS ; JUMP IF YES
6585
6586 015347 376 054 CPI COMMA ; OR, END-OF-COMMAND?
6587 015351 312 362 032 JZ EOLYS ; JUMP IF YES
6588
6589 ; HERE IF NOT... CLR "C-BIT" & LEAVE
6590
6591 015354 247 ANA A ; CLR "C-BIT"
6592
6593 015355 341 POP H ; RESTORE "H,L"
6594 015356 311 RET ; RETURN
6595
6596 ; COMMENT FOUND - ASSUME THAT ANYTHING ELSE ON THE LINE IS A COMMENT
6597 ; ALSO. THIS PREVENTS COMMAS IN THE COMMAND TO CAUSE COMMENT TEXT TO
6598 ; BE INTERPRETED AS COMMANDS ALSO.
6599
6600 015357 315 115 010 EOLCM: CALL BFRST ; CLEAR INPUT BUFFER
6601
6602 ; HERE IF YES, AT END-OF-COMMAND
6603
6604 015362 067 EOLYS: STC ; SET CARRY
6605 015363 341 POP H ; RESTORE "H,L"
6606 015364 311 RET ; RETURN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 175
SUBRTN.M80 **** SOME ERROR CODES ****
6608
6609 ; SUBROUTINE TO MOVE 5 CONTIGUOUS BYTES BEGINNING WITH A SPECIFIED SOURCE
6610 ; ADDRESS,TO ANOTHER BUFFER AREA, ITS ADDRESS ALSO PASSED AS A TRAILING
6611 ; ARGUMENT. SOURCE ADDRESS IS FIRST TRAILING PARAMETER, DESTINATION IS
6612 ; SECOND TRAILING PARAMETER.
6613
6614 015365 341 .MOV5B: POP H ; GET H,L FROM TRAP HANDLER
6615 015366 343 XTHL ; SWAP STACK TOP WITH "H,L"
6616 015367 325 PUSH D ; SAVE "D,E"
6617 015370 305 PUSH B ; SAVE "B,C"
6618 015371 315 040 033 CALL TARG2 ; ASSEMBLE ARGS INTO "B,C" AND "D,E"
6619
6620 015374 315 003 033 CALL MOVREG ; MOVE THE DATA, ARGS PASSED IN REGISTERS
6621 015377 301 POP B ; RESTORE "B,C"
6622 015400 321 POP D ; RESTORE "D,E"
6623
6624 015401 343 XTHL ; RESTORE STACK
6625 015402 311 RET ; AND RETURN
6626
6627 015403 076 005 MOVREG: MVI A,5 ; SET COUNTER TO 5
6628 015405 075 M5B: DCR A ; DOWN COUNTER
6629 015406 304 005 033 CNZ M5B ; AND BE RECURSIVE TILL DOWN COUNTED
6630
6631 015411 012 LDAX B ; BYTE TO ACCUM
6632 015412 022 STAX D ; STORE AT DESTINATION
6633 015413 023 INX D ; UP BOTH PNTRS
6634 015414 003 INX B ; TO NEXT BYTE
6635 015415 311 RET ; AND BACK TO CALLER
6636
6637 ; SUBROUTINE TO COMPARE 2 36-BIT VALUES. IF THE ADDRESSES OF THE 2 36-BIT
6638 ; BUFFERS ARE PASSED AS TRAILING PARAMETERS TO THE ROUTINE. IF BOTH BUFFERS
6639 ; ARE THE SAME, THE "C-BIT" IS CLR UPON RETURN. IF THEY ARE DIFFERENT, THE
6640 ; "C-BIT" IS SET ON RETURN.
6641
6642 015416 343 CMP36: XTHL ; SWAP STACK TOP WITH "H,L"
6643 015417 315 040 033 CALL TARG2 ; GET THE 2 TRAILING ARGS INTO "B,C" & "D,E"
6644 015422 343 XTHL ; PUT RETURN BACK ON STACK
6645 015423 353 XCHG ; SWAP "D,E" & "H,L"
6646 015424 026 005 MVI D,5 ; SET COUNTER TO 4.
6647
6648 015426 012 CMPLP: LDAX B ; GET A BYTE OF DATA
6649 015427 276 CMP M ; COMPARE
6650 015430 300 RNZ ; RETURN WITH Z-CLR IF HAD ERR..
6651 015431 003 INX B ; BUMP POINTER
6652 015432 043 INX H ; BUMP OTHER POINTER
6653 015433 025 DCR D ; DOWN COUNT
6654 015434 302 026 033 JNZ CMPLP ; CONTINUE TILL DONE
6655 015437 311 RET ; NORMAL RETURN
6656
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 176
SUBRTN.M80 **** SOME ERROR CODES ****
6658
6659 ; SUBROUTINE TO ASSEMBLE TRAILING ARGS INTO REGISTER PAIRS.
6660 ; ROUTINE USED TO SAVE CORE ONLY BECAUSE THIS SEQUENCE OF CODING
6661 ; IS REPEATED SO OFTEN. "H,L" POINTS TO THE TRAILING ARG OF THE
6662 ; ORIGINAL CALLER. "D,E" AND "B,C" MUST HAVE BEEN SAVED BEFORE
6663 ; THIS ROUTINE IS CALLED OR THEY WILL BE DESTROYED. IF A SINGLE
6664 ; TRAILING ARG IS TO BE GATHERED UP, IT WILL BE PUT INTO THE REG
6665 ; PAIR "D,E" VIA THE CALL "TARG1". IF TWO TRAILING ARGS TO BE
6666 ; GATHERED UP, THE FIRST WILL BE PUT INTO "B,C" AND THE SECOND
6667 ; WILL BE PUT INTO "D,E". "H,L" IS UPDATED TO POINT TO THE BYTE
6668 ; FOLLOWING THE TRAILING ARGS.
6669
6670 015440 116 TARG2: MOV C,M ; LO ORDER SOURCE TO "C"
6671 015441 043 INX H
6672 015442 106 MOV B,M ; HI ORDER SOURCE TO "B"
6673 015443 043 INX H
6674
6675 015444 136 TARG1: MOV E,M ; LO ORDER SOURCE TO "E"
6676 015445 043 INX H
6677 015446 126 MOV D,M ; HI ORDER SOURCE TO "D"
6678 015447 043 INX H
6679
6680 015450 311 RET ; AND RETURN
6681
6682 ; SUBROUTINE TO ADD 1 TO A 36-BIT BUFFER AND GUARANTEE THAT THE
6683 ; CARRY PROPAGATES CORRECTLY. BUFFER TO BE INCREMENTED IS PASSED
6684 ; AS A TRAILING ARG.
6685
6686 015451 343 INC36: XTHL ; GET POINTER TO TRAILING ARG
6687 015452 315 044 033 CALL TARG1 ; ASSEMBLE ARG INTO "D,E"
6688
6689 015455 343 XTHL ; PUT RETURN BACK ON THE STACK
6690 015456 353 XCHG ; NOW H,L PNTS TO BUFFER TO BE INCREMENTED
6691
6692 015457 257 XRA A ; CLR THE ACCUM
6693 015460 067 STC ; AND SET "C-BIT"
6694
6695 015461 216 INCLP: ADC M ; ADD PIECE OF DATA BUFF, WITH CRY
6696 015462 167 MOV M,A ; AND PUT IT BACK, WITH THE ADDITION
6697 015463 320 RNC ; RETURN IF FINALLY STOPPED CRY'S INTO NEXT BYTE
6698 015464 043 INX H ; NEXT PIECE TO INC
6699 015465 303 061 033 JMP INCLP ; AND CONTINUE IF THERE WAS A CRY
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 177
SUBRTN.M80 **** SOME ERROR CODES ****
6701
6702 ; SUBROUTINE "RDATT"
6703 ;
6704 ; ROUTINE READS I/O REGISTERS 0,1,2,3,103 AND MOVES THE DATA IN THOSE
6705 ; BUFFERS (BUS.BITS 0-35) INTO A RAM AREA WHOSE ADDRESS IS SPECIFIED
6706 ; BY A TRAILING PARAMETER USED WITH THE CALL TO THIS ROUTINE.
6707 ; CALL IS:
6708 ; CALL RDATT
6709 ; DW XXX ; XXX IS PLACE TO MOVE THE 36 BITS OF DATA
6710 ; ACCUMULATOR IS DESTROYED, REG PAIR "D,E" IS INCREMENTED BY 5.
6711
6712 015470 RDATT:
6713 015470 343 XTHL ; SWAP STACK TOP WITH "H,L"
6714 015471 315 044 033 CALL TARG1 ; ASSEMBLE TRAILING ARG INTO "D,E"
6715 015474 343 XTHL ; PUT BACK THE STACK
6716
6717 ; THE REAL READING CODE BEGINS HERE & ALSO SERVES AS AN ALTERNATE ENTRY
6718 ; IF YOU CHOOSE TO PASS THE BUFFER ADDRESS IN REGISTER "D,E"
6719
6720 015475 RDATP:
6721 015475 325 PUSH D ; SAVE "D,E"
6722 015476 333 000 IN D2835 ; ***** I/O RD "0" (BITS 28-35) *****
6723 015500 057 CMA
6724 015501 022 STAX D ; SAVE IN RAM
6725 015502 023 INX D ; UP PNTR TO NEXT BYTE
6726 015503 333 001 IN D2027 ; ***** I/O RD "1" (BITS 20-27) *****
6727 015505 057 CMA
6728 015506 022 STAX D ; SAVE IN RAM
6729 015507 023 INX D ; UP PNTR TO NEXT BYTE
6730 015510 333 002 IN D1219 ; *****I/O RD "2" (BITS 12-19) *****
6731 015512 057 CMA
6732 015513 022 STAX D ; SAVE IN RAM
6733 015514 023 INX D ; UP PNTR
6734 015515 333 003 IN D0411 ; ***** I/O RD "3" (BITS 4-11) *****
6735 015517 057 CMA
6736 015520 022 STAX D ; SAVE
6737 015521 023 INX D ; UP PNTR
6738 015522 333 103 IN D0003 ; ***** I/O RD "103" (BITS 0-03) *****
6739 015524 057 CMA
6740 015525 346 017 ANI ^O17 ; OFF TRASH IN D BITS 7-4
6741 015527 022 STAX D ; SAVE
6742 015530 321 POP D ; RESTORE "D,E"
6743 015531 311 RET ; RETURN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 178
SUBRTN.M80 **** SOME ERROR CODES ****
6745
6746 ; SUBROUTINE "WDATT"
6747 ; ROUTINE WRITES I/O REGISTERS 102,104,106,110,112 AND GETS ADDRESS
6748 ; EITHER PASSED AS A TRAILING PARAMETER, OR PASSED IN "D,E".
6749 ; CALL IS:
6750 ; CALL WDATT
6751 ; DW XXX ; XXX IS SOURCE OF DATA TO BE WRITTEN
6752
6753 015532 343 WDATT: XTHL ; SWAP STACK TOP WITH "H,L"
6754 015533 315 044 033 CALL TARG1 ; ASSEMBLE TRAILING ARG INTO "D,E"
6755 015536 343 XTHL ; SWAP STACK BACK TO ORIGINAL STATE
6756
6757 ; ALTERNATE ENTRY FOR WHEN PASSING DATA POINTER IN "D,E"
6758
6759 015537 325 WDATP: PUSH D ; SAVE "D,E"
6760 015540 032 LDAX D ; DATA 28-35 TO ACCUM
6761 015541 323 102 OUT W2835 ; ***** I/O WRT "102" (BITS 28-35) *****
6762 015543 023 INX D ; NEXT DATUM
6763
6764 015544 032 LDAX D ; DATA 20-27 TO ACCUM
6765 015545 323 104 OUT W2027 ; ***** I/O WRT "104" (BITS 20-27) *****
6766 015547 023 INX D ; NEXT DATUM
6767
6768 015550 032 LDAX D ; DATA 12-19 TO ACCUM
6769 015551 323 106 OUT W1219 ; ***** I/O WRT "106" (BITS 12-19) *****
6770 015553 023 INX D ; NEXT DATUM
6771
6772 015554 032 LDAX D ; DATA 4-11 TO ACCUM
6773 015555 323 110 OUT W0411 ; ***** I/O WRT "110" (BITS 04-11) *****
6774 015557 023 INX D ; NEXT DATUM
6775
6776 015560 032 LDAX D ; DATA 0-3 TO ACCUM
6777 015561 323 112 OUT W0003 ; ***** I/O WRT "112" (BITS 00-03) *****
6778 015563 321 POP D ; RESTORE "D,E"
6779 015564 311 RET ; RETURN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 179
SUBRTN.M80 **** SOME ERROR CODES ****
6781
6782 ; SUBROUTINE "ADATT"
6783 ; ROUTINE WRITES I/O REGISTERS 103,105,107,111,113 AND GETS ADDRESS
6784 ; EITHER PASSED AS A TRAILING PARAMETER, OR PASSED IN "D,E".
6785 ; CALL IS:
6786 ; CALL ADATT
6787 ; DW XXX ; XXX IS SOURCE OF DATA TO BE WRITTEN
6788
6789 015565 343 ADATT: XTHL ; SWAP STACK TOP WITH "H,L"
6790 015566 315 044 033 CALL TARG1 ; ASSEMBLE TRAILING ARG INTO "D,E"
6791 015571 343 XTHL ; SWAP STACK BACK TO ORIGINAL STATE
6792
6793 ; ALTERNATE ENTRY FOR WHEN PASSING DATA POINTER IN "D,E"
6794
6795 015572 325 ADATP: PUSH D ; SAVE "D,E"
6796 015573 032 LDAX D ; DATA 28-35 TO ACCUM
6797 015574 323 103 OUT A2835 ; ***** I/O WRT "103" (BITS 28-35) *****
6798 015576 023 INX D ; NEXT DATUM
6799
6800 015577 032 LDAX D ; DATA 20-27 TO ACCUM
6801 015600 323 105 OUT A2027 ; ***** I/O WRT "105" (BITS 20-27) *****
6802 015602 023 INX D ; NEXT DATUM
6803
6804 015603 032 LDAX D ; DATA 12-19 TO ACCUM
6805 015604 323 107 OUT A1219 ; ***** I/O WRT "107" (BITS 12-19) *****
6806 015606 023 INX D ; NEXT DATUM
6807
6808 015607 032 LDAX D ; DATA 4-11 TO ACCUM
6809 015610 323 111 OUT A0411 ; ***** I/O WRT "111" (BITS 04-11) *****
6810 015612 023 INX D ; NEXT DATUM
6811
6812 015613 032 LDAX D ; DATA 0-3 TO ACCUM
6813 015614 323 113 OUT A0003 ; ***** I/O WRT "113" (BITS 00-03) *****
6814 015616 321 POP D ; RESTORE "D,E"
6815 015617 311 RET ; RETURN
6816
6817 ; LOCAL SUBROUTINE TO CLR
6818
6819 015620 341 .CLRRM: POP H ; FIX REG AS MESSED UP BY RST INSTR
6820 015621 343 XTHL ; POINTER TO THE TRAILING PARAM
6821 015622 315 044 033 CALL TARG1 ; ASSY ARG INTO "D,E"
6822 015625 343 XTHL ; FIX "H,L" AND REPLACE FOR RETURN
6823 015626 353 XCHG ; PUT "D,E" STUFF INTO "H,L"
6824 015627 076 005 MVI A,5 ; AND SET STARTING COUNT TO 5
6825 015631 053 CLRT1: DCX H ; DOWN THE MEM ADDRESS
6826 015632 066 000 MVI M,0 ; 0 DATA TO MEM
6827 015634 075 DCR A ; DOWN THE COUNTER
6828 015635 302 231 033 JNZ CLRT1 ; BACK TILL DONE
6829 015640 311 RET ; RETURN
6830
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 180
SUBRTN.M80 **** SOME ERROR CODES ****
6832
6833 ; SUBROUTINE TO SWALLOW SEPARATOR CHARACTERS FROM THE ADDRESS POINTED
6834 ; TO BY "H,L", UP TO THE FIRST NON-SEPARATOR CHARACTER.
6835 ; SEPARATORS ARE: "SPACE"
6836 ; "TAB"
6837 ; ONLY THE "H,L" REGISTER SHOULD BE CHANGED BY THIS ROUTINE
6838
6839 015641 365 SEPCHR: PUSH PSW ; SAVE ACCUM AND STATUS
6840 015642 053 DCX H ; DOWN COUNT H,L SO NXT INSTR WILL MAKE IT EVEN
6841 015643 043 SEPYS: INX H ; UP THE COUNT
6842 015644 176 MOV A,M ; COPY CHARACTER INTO ACCUM
6843 015645 376 040 CPI ' ; IS THE CHAR A "SPACE"
6844 015647 312 243 033 JZ SEPYS ; GO UPDATE "H,L" IF YES..
6845
6846 ; ELSE SEE IF ITS A TAB
6847
6848 015652 376 011 CPI ' ; IS THE CHAR A "TAB"
6849 015654 312 243 033 JZ SEPYS ; GO UPDATE "H,L" IF YES
6850
6851 ; ELSE NO MORE SEPARATORS-TIME TO RETURN
6852
6853 015657 361 POP PSW ; RESTORE ACCUM AND STATUS
6854 015660 311 RET ; ALL DONE RETURN
6855
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 181
SUBRTN.M80 SUBROUTINE TIME DELAY
6857 .SBTTL SUBROUTINE TIME DELAY
6858
6859 ; EACH UNIT OF DELAY COUNTED IN THE TRAILING BYTE IS WORTH 1.02 MICRO-SEC
6860 ; THIS SUBROUTINE WASTES SOME AMOUNT OF TIME. THE GREATER THE TRAILING
6861 ; ARGUMENT, THE MORE TIME IS WASTED...
6862
6863 015661 343 DELAY.: XTHL ; GET POINTER TO TRAILING ARG INTO "H,L"
6864 015662 365 PUSH PSW ; NOW SAVE ACCUM
6865 015663 176 MOV A,M ; GET THE TRAILING ARG INTO ACCUM
6866 015664 043 INX H ; UP DATE TO CORRECT RETURN LOCATION
6867 015665 075 DLYLP: DCR A ; DOWN THE COUNTER
6868 015666 365 PUSH PSW ; ADD MORE DELAY IN THE LOOP
6869 015667 361 POP PSW ; BECAUSE PUSHES AND POPS TAKE LONG TIME
6870 015670 302 265 033 JNZ DLYLP ; LOOP TILL ZERO
6871 015673 361 POP PSW ; RESTORE ACCUM
6872 015674 343 XTHL ; PUT RETURN BACK ONTO THE STACK
6873 015675 311 RET ; AND DONE
6874
6875 .SBTTL STRING COMPARE ROUTINE
6876
6877 ; ROUTINE TO COMPARE A TYPED IN ASCII STRING VERSUS SOME EXPECTED
6878 ; STRING. ENTER WITH "H,L" POINTING TO THE BEGINNING OF THE TYPE-IN
6879 ; BUFFER AND WITH D,E POINTING TO THE EXPECTED STRING. RETURN Z-BIT
6880 ; CLR IF NO MATCH. Z-BIT SET IF MATCH.
6881
6882 015676 032 STRCMP: LDAX D ; GET FIRST EXPECTED CHARACTER
6883 015677 247 ANA A ; SET FLAGS TO SEE IF ZERO BYTE
6884 015700 312 312 033 JZ STREND ; IF ZERO BYTE, END OF EXPECTED STRING.. OUT
6885
6886 015703 276 CMP M ; IF A REAL BYTE, COMPARE AGAINST THE TYPE-IN
6887 015704 300 RNZ ; IF NO MATCH, TAKE ERROR RETURN
6888 015705 023 INX D ; IF MATCH , UPDATE TO NEXT EXPECTED
6889 015706 043 INX H ; AND UPDATE TO NEXT TYPED IN.
6890 015707 303 276 033 JMP STRCMP ; LOOP
6891
6892 015712 042 223 040 STREND: SHLD .ARG1 ; PASS CURRENT POINTER TO ROUTINE THAT CHECKS FOR EOL
6893 015715 315 330 032 CALL EOCML ; CHECK THAT TYPE IN WAS TERMINATED
6894 015720 330 RC ; IF YES, Z-BIT IS SET,... OK TO RETURN
6895
6896 015721 264 ORA H ; CLR Z-BIT FLAG.. H WILL BE NON-ZERO
6897 015722 311 RET ; AND OUT.....
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 182
SUBRTN.M80 STRING COMPARE ROUTINE
6899
6900 ; ROUTINE CALLED WHENEVER KLINIK SWITCH CHANGES STATE.
6901 ; THE ROUTINE EXAMINES THE NEW STATE OF KLINIK, ZAPS THE LIGHTS AS REQUIRED
6902 ; THEN SETS THE KLINIK LINE INTO THE APPROPRIATE STATE. IF KLINIK WAS
6903 ; ESTABLISHED, GOING TO ENABLE POSITION WILL CHANGE NOTHING, BUT ANY SWITCH
6904 ; CHANGE THAT INCREASES THE AMOUNT OF PROTECTION WILL FORCE CHANGE THE MODE
6905 ; OF THE KLINIK LINE.
6906 ; THE ROUTINE IS ENTERED WITH "B" HOLDING THE NEW KLINIK SWITCH STATE, AND
6907 ; "KLNKSW" HOLDING THE OLD STATE. VALUES ARE AS FOLLOWS:
6908 ; ENABLE = 2
6909 ; PROTECT = 6
6910 ; DISABLE = 4
6911
6912 015723 170 KLNKLT: MOV A,B ; COPY KLINIK STATE INTO THE ACCUM
6913 015724 062 124 040 STA KLNKSW ; SAVE THE NEW STATUS
6914 015727 376 004 CPI 4 ; IS SWITCH NOW IN DISABLED POSITION
6915 015731 312 005 034 JZ SETM0 ; GO SET MODE 0 IF YES
6916
6917 015734 376 006 CPI 6 ; IS SWITCH NOW IN THE PROTECT POSITION?
6918 015736 312 360 033 JZ .SETM1 ; IF YES, GO SET MODE 1
6919
6920 ; FALL THRU IF NEW SWITCH POSITION IS THE "ENABLE" POSITION. FIRST
6921 ; CHECK CURRENT MODE. IF IN MODE 3 ALREADY, WE MAKE NO CHANGE.
6922
6923 015741 072 247 040 LDA CSLMODE ; GET CURRENT CSL MODE
6924 015744 376 010 CPI .MODE3 ; IS IT MODE 3
6925
6926 ; FLAGS ARE SET, FALL INTO CODE THAT DOES THE RIGHT THING IF IN MODE 3
6927
6928 015746 304 070 034 CNZ SETM2 ; IF WAS NOT MODE 3, THIS WILL SET MODE 2
6929
6930 ; AND FALL INTO KL.LON CODE
6931
6932 015751 006 002 KL.LON: MVI B,2 ; GET A BIT FOR SETTING THE REMOTE LIGHT ON
6933
6934 ; AND FALL INTO CODE FOR SETTING THE LIGHTS
6935
6936 015753 315 312 032 KL.LAMP: CALL STATEM ; SET LIGHTS AS SPECIFIED IN B REG
6937 015756 375 .BYTE ^O375 ; KEEP ALL LIGHTS, 'CEPT REMOTE
6938 015757 311 RET ; AND DONE WITH THIS MESS
6939
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 183
SUBRTN.M80 UART MODE MODIFICATIONS
6941 .SBTTL UART MODE MODIFICATIONS
6942
6943 ; CODE FOR SETTING THE KLINIK LINE INTO MODE 1
6944
6945 015760 072 262 040 .SETM1: LDA PASSWORD ; GET CURRENT PASSWORD
6946 015763 247 ANA A ; SET FLAGS TO SEE IF ANY PASSWORD EXISTS
6947 015764 312 005 034 JZ SETM0 ; IF NO PASSWORD, THEN SET INTO MODE 0
6948 015767 304 375 033 CNZ SETM1 ; IF PASSWORD EXISTS, SET THINGS INTO MODE 1
6949 015772 302 351 033 JNZ KL.LON ; IF WE WENT MODE 1, THEN MUST TURN ON LIGHT
6950
6951 ; CODE FOR ACTUALLY SETTING THE KLINIK LINE MODE TO 1
6952
6953 015775 076 002 SETM1: MVI A,.MODE1 ; GET MODE 1 FLAG
6954 015777 041 150 010 LXI H,MODE1 ; GET THE MODE 1 DISPATCH
6955 016002 303 112 034 JMP SETM ; SET UP RAM
6956
6957 ; CODE THAT SETS BOTH MODE 0 AND THE APPROPRIATE LIGHTS
6958
6959 016005 SETM0: CLRB KLLINE.ON ; DISABLING KLINIK KILLS CTY AVAILABILITY
6960 016007 006 000 MVI B,0 ; THE PASS LIGHTS OFF IN REGISTER "B"
6961 016011 315 353 033 CALL KL.LAMP ; AND GO DO THE LIGHTS
6962 016014 315 123 034 CALL HANGUP ; CLEAR KLINIK LINE
6963 016017 076 001 MVI A,.MODE0 ; GET THE MODE 0 FLAG
6964 016021 041 135 010 LXI H,MODE0 ; GET THE MODE 0 DISPATCH
6965 016024 303 112 034 JMP SETM ; SET UP RAM
6966
6967 ; CODE TO SET US INTO MODE 3
6968
6969 016027 076 010 SETM3: MVI A,.MODE3 ; GET MODE 3 FLAG
6970 016031 041 332 005 LXI H,MODE3 ; GET THE MODE 3 DISPATCH
6971 016034 303 112 034 JMP SETM ; SET UP RAM
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 184
SUBRTN.M80 UART MODE MODIFICATIONS
6973
6974 ; CODE TO SET US INTO MODE 4
6975
6976 016037 072 156 040 SETM4: LDA USRMD ; SEE IF USER, IF WHICH CASE WE WON'T DO "MODE 4"
6977 016042 247 ANA A ; SET 8080 FLAGS
6978 016043 300 RNZ ; AND OUT IF USER MODE
6979
6980 ; ACCUM MUST .EQ. 0 IF FELL TO HERE
6981
6982 016044 062 252 040 STA MAILFG ; BETTER CLEAR THIS FLAG TOO
6983 016047 062 301 040 STA E.CNT ; USE FASTEST WAY TO CLEAR THIS LOCATION
6984 016052 041 250 041 LXI H,E.BEG-1 ; AND RESET ENVELOPER
6985 016055 042 247 041 SHLD E.BUF
6986 016060 076 020 MVI A,.MODE4 ; GET MODE 4 FLAG
6987 016062 041 376 034 LXI H,MODE4 ; GET THE MODE 4 DISPATCH
6988 016065 303 112 034 JMP SETM ; SET UP RAM
6989
6990 ; SET LINE TO MODE 2
6991
6992 016070 072 247 040 SETM2: LDA CSLMODE ; BEFORE A/G ELSE, SEE WHAT WE ARE DOING NOW
6993 016073 346 003 ANI .MODE0!.MODE1 ; IF MODES 0 OR 1, MUST INTERRUPT KS10
6994 016075 312 105 034 JZ SETM2X ; IF NOT, DON'T BOTHER KS10 AT ALL
6995
6996 016100 076 002 MVI A,KL.ACTIVE ; MUST INFORM THE TEN WE ARE ENTERING KLINIK
6997 016102 315 145 034 CALL WRD34 ; CALL ROUTINE THAT WRITES WORD 34
6998 016105 041 327 010 SETM2X: LXI H,MODE2 ; GET DISPATCH FOR MODE 2
6999 016110 076 004 MVI A,.MODE2 ; SET MODE 2 TO THE STATE FLAG ALSO
7000 016112 062 247 040 SETM: STA CSLMODE
7001 016115 042 346 040 SETDIS: SHLD MODDIS ; AND SET TO KLINIK DISPATCHER
7002 016120 311 RET ; AND ALL DONE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 185
SUBRTN.M80 UART MODE MODIFICATIONS
7004
7005 ; LITTLE ROUTINE TO HANG UP THE KLINIK LINE
7006
7007 016121 KILL.KLINIK: CLRB KLNKSW ; FORCE A RELOOK AT THE REMOTE SWITCH
7008 016123 072 360 040 HANGUP: LDA STATE ; GET CURRENT STATE
7009 016126 346 007 ANI ^O7 ; OFF THE "DTR" SIGNAL
7010 016130 323 101 OUT DTR ; CLR DTR
7011 016132 076 003 MVI A,CARRLOSS ; TELL KS10 THAT KLINIK CARRIER HAS GONE AWAY
7012 016134 315 145 034 CALL WRD34 ; DEPOSIT INTO WORD 34
7013 016137 041 220 001 LXI H,200. * 2 ; SET A TIMING DELAY OF 2 SECONDS
7014 016142 303 076 014 JMP LTLOOP ; GO DO DELAY, AND USE HIS RETURN TO EXIT
7015
7016 ; ROUTINE FOR DOING SIMPLE DEPOSIT INTO KS10 MEMORY AT WORD 34, AND
7017 ; THEN INTERRUPTING THE 10.
7018
7019 016145 365 WRD34: PUSH PSW ; SAVE ACCUM & STATUS
7020 016146 CLRRM DMDAT ; CLEAR A BUFFER
(1) 016146 347 RST 4
(1) 016147 012 .BYTE 10.
(1) 016150 054 040 .ADDR DMDAT+5
7021 016152 361 POP PSW ; FETCH THE ACCUM'S CONTENTS AGAIN
7022 016153 043 INX H ; BUMP H,L (VALUE AFTER A CLRRM = 1ST LOC OF BUFF)
7023 016154 167 MOV M,A ; STORE DATA AT "DMDAT+1"
7024 016155 DEPOS 34 ; DEPOSIT
(1) 016155 247 ANA A ; CLR "C-BIT" FOR USE BY COMMON CODE
(1) 016156 315 203 030 CALL DEPSHT ; AND DO THE DEPOSIT ASSUMING SHORT ADDR
(1) 016161 034 000 .ADDR 34 ; ADDR TO BE ZAPPED PASSED AS TRAILING ARG
7025 016163 303 014 010 JMP POKE10 ; INTERRUPT THE KS10 & USE HIS RETURN
7026
7027 ; CODE USED IN ADDING UP THE CHECKSUMS ON ENVELOPES TO BE SENT
7028
7029 016166 200 CHKADD: ADD B ; HERE TO ADD NEW CHAR TO THE CURRENT SUM
7030 016167 107 MOV B,A ; AND KEEP THE RESULTS IN "B"
7031 016170 043 INX H ; BUMP UP TO LOOK AT THE NEXT CHAR
7032 016171 303 220 034 JMP TSKLP ; BACK TO LOOP
7033
7034 ; THIS IS THE APT ENVELOPE SENDER. WHEN WE HAVE A BUFFER OF INFO TO
7035 ; SEND TO THE APT HOST SYSTEM, THIS IS THE CODE THAT GETS CALLED.
7036
7037 016174 072 252 040 DECNET: LDA MAILFG ; ONLY DO S/G HERE IF THE MAILING FLAG SET
7038 016177 247 ANA A ; SET 8080 FLAGS
7039 016200 310 RZ ; NO FLAG, NO SENDY....
7040
7041 016201 373 EI ; ABSOLUTELY MUST ALLOW INTERRUPTS, IN CASE HOST DIES
7042 016202 072 011 042 LDA ENVMNO ; FIRST THING TO DO IS COMPLEMENT THE MESSAGE #
7043 016205 057 CMA ; FLIP
7044 016206 346 177 ANI ^O177 ; NO SIGN BITS ALLOWED
7045 016210 062 011 042 STA ENVMNO ; PUT IT BACK
7046
7047 016213 041 013 042 LXI H,ENVBUF ; 1ST THING TO DO IS COMPUTE CHECKSUM FOR ENVELOPE
7048 016216 006 000 MVI B,0 ; "B" WILL HOLD THE CURRENT SUM
7049 016220 176 TSKLP: MOV A,M ; GRAB A CHARACTER
7050 016221 376 015 CPI CRCHR ; SEE IF END OF THE ENVELOPE CHARACTER
7051 016223 312 232 034 JZ TSKGO ; IF YES, GO TO THE ACTUAL SENDER
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 185-1
SUBRTN.M80 UART MODE MODIFICATIONS
7052
7053 016226 247 ANA A ; MAYBE THE CHAR WAS A 0, BECAUSE THERE IS NO CRCHR
7054 016227 302 166 034 JNZ CHKADD ; IF NOT, GO ADD THE CHARACTER TO THE SUM
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 186
SUBRTN.M80 UART MODE MODIFICATIONS
7056
7057 ; HERE WHEN TIME TO ACTUALLY MAIL AN ENVELOPE
7058
7059 016232 043 TSKGO: INX H ; UPDATE PAST THE "CR" CHARACTER
7060 016233 066 000 MVI M,0 ; NOW GUARANTEE THAT WE END WITH "CR","0" PAIR
7061 016235 170 MOV A,B ; GRAB THE CURRENT SUM
7062 016236 057 CMA ; COMPLEMENT
7063 016237 074 INR A ; MAKE TWOS COMPLEMENT
7064 016240 346 077 ANI ^O77 ; AND ONLY SIX BITS COUNT
7065
7066 ; NOW MUST DECIDE IF YOU NEED TO ASCII-IZE THE CHECKSUM
7067
7068 016242 376 075 CPI ^O75 ; 75,76,77 DON'T GET ASCII-ED
7069 016244 362 251 034 JP TSKGO1 ; SO JUMP IF ANY OF THOSE THREE
7070 016247 366 100 ORI ^O100 ; HAD TO ASCII-IZE, SO DO IT WITH A 100
7071 016251 062 012 042 TSKGO1: STA ENVCHK ; SAVE IN THE APPROPRIATE PLACE IN THE BUFFER
7072
7073 016254 TSK2TSK: CLRB APTANS ; CLEAR THE ANSWER
7074 016256 KCHAR SYNC ; 2 SYNCS START EVERY MESSAGE
(1) 016256 315 052 004 CALL KCHR ; GO PRINT THE CHARACTER
(1) 016261 001 .BYTE SYNC
7075 016262 KCHAR SYNC
(1) 016262 315 052 004 CALL KCHR ; GO PRINT THE CHARACTER
(1) 016265 001 .BYTE SYNC
7076
7077 016266 021 011 042 LXI D,ENVMNO ; NOW SEND THE REST
7078 016271 315 077 004 CALL KLINE1
7079 016274 072 013 042 LDA ENVBUF ; GRAB FIRST CHAR OF ENVELOPE JUST SENT
7080 016277 376 077 CPI QUES ; IS IT QUESTION MARK?
7081 016301 312 151 032 JZ MMERR1 ; IF IT WAS, ABORT ENVELOPE STUFF, RESET APT
7082
7083 016304 376 045 CPI PERCNT ; IS IT A PER CENT SIGN?
7084 016306 312 151 032 JZ MMERR1 ; IF IT WAS, ABORT ENVELOPE STUFF, RESET APT
7085
7086 016311 072 261 040 APT.WT: LDA APTANS ; NOW WAIT FOR APT SYS TO ANSWER(ACK OR NACK)
7087 016314 247 ANA A ; IF ZERO, GOT NO ANSWER YET
7088 016315 312 311 034 JZ APT.WT ; SO WAIT
7089
7090 ; FINALLY GOT AN ANSWER
7091
7092 016320 376 116 CPI 'N ; WAS IT A NACK??
7093 016322 312 254 034 JZ TSK2TSK ; IF YES, SEND IT OUT AGAIN
7094 016325 DECEX1:
7095 016325 DECEX2:
7096 016325 257 XRA A ; USE FAST WAY TO CLEAR A RAM LOCATION
7097 016326 062 252 040 STA MAILFG ; SAY END OF THIS ENVELOPE
7098 016331 041 013 042 LXI H,ENVBUF ; POINT TO THE BUFFER
7099 016334 042 352 040 SHLD ENVPNT ; SAVE THE POINTER TO THE BUFFER
7100 016337 311 RET ; THEN OUT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 187
SUBRTN.M80 UART MODE MODIFICATIONS
7102
7103 ; SUBROUTINE TO MOVE A STRING OF CHARACTERS INTO THE TTY INPUT BUFFER,
7104 ; KEEPING TRACK OF THE NUMBER OF COMMAS AND OTHER IMPORTANT FEATURES
7105 ; OF THE STRING. MUST PASS THE SOURCE OF THE CHARACTERS IN REG B,C,
7106 ; SUBROUTINE WILL BOMB REGISTERS D,E AND H,L
7107
7108 016340 001 253 041 MV.ALL: LXI B,E.BEG+2 ; POINT TO THE CHARACTER BUFFER TO BE EXECUTED
7109 016343 315 115 010 CALL BFRST ; RESET CMD CHAIN POINTERS
7110 016346 021 114 041 MV.INP: LXI D,BUFBG ; DE, WILL POINT TO THE INPUT BUFFER
7111 016351 041 204 040 LXI H,EOL ; AND HL WILL POINT TO THE COMMA/EOL COUNTER
7112 016354 066 000 MVI M,0 ; MAKE SURE COUNT BEGINS AT 0
7113
7114 016356 012 MV.IN1: LDAX B ; GET FIRST CHARACTER FROM WHEREVER IT IS
7115 016357 022 STAX D ; AND PUT IT INTO THE BUFFER
7116 016360 003 INX B ; UP POINTER
7117 016361 023 INX D ; AND THIS ONE TOO
7118
7119 ; NOW CHECK FOR COMMA OR EOL
7120
7121 016362 376 054 CPI COMMA ; IS IT A COMMA?
7122 016364 314 374 034 CZ MV.CNT ; IF YES, INCREMENT THE COUNT
7123
7124 ; FALL THRU IF WAS A COMMA BEFORE, EOLCH WILL NOT MATCH
7125
7126 016367 376 377 CPI EOLCH ; IS IT AN END OF LINE?
7127 016371 302 356 034 JNZ MV.IN1 ; IF NOT, THERE IS MORE TO DO
7128
7129 ; HERE IF WAS AN EOL.. NOT ONLY DO WE BUMP THE COUNT, WE ALSO GET OUT
7130
7131 016374 064 MV.CNT: INR M ; UP COUNT
7132 016375 311 RET ; AND OUT
7133
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 188
SUBRTN.M80 MODE 4 FOR DECIDING TO COLLECT AN ENVELOPE OR CTY OUT
7135 .SBTTL MODE 4 FOR DECIDING TO COLLECT AN ENVELOPE OR CTY OUT
7136
7137 ; MODE 4 HANDLER. WATCHES FOR THE FIRST SYNC CHAR, THEN GOES INTO
7138 ; A FINITE STATE MACHINE MODE WHERE IT COLLECTS AN ENVELOPE. WHEN
7139 ; YOU ENTER HERE, REG B HAS A COPY OF THE CHARACTER JUST TYPED.
7140
7141 016376 MODE4:
7142 016376 376 001 M4.0: CPI SYNC ; LOOK FOR A SYNC CHARACTER
7143 016400 302 237 035 JNZ MMOUT ; IF NOT, SIMPLE PRINT OF CHARACTER ON CTY
7144
7145 016403 041 011 035 LXI H,M4.1 ; SHIFT ENVELOPER TO NEXT INPUT STATE
7146 016406 303 115 034 JMP SETDIS ; AND SET INTERRUPT HANDLER TO COME HERE WHEN
7147 ; DONE WITH INTERRUPT
7148
7149 ; STATE 2 OF ENVELOPE EATER. THIS CODE WILL DISCARD ANY ADDITIONAL SYNCS
7150 ; STORE THE MESSAGE NUMBER WHEN IT FINALLY GETS HERE (& FLIC TO STATE 3)
7151 ; OR COLLECT THE FIRST CHARACTER OF A CMD SEQUENCE (& FLIC TO STATE 3).
7152
7153 016411 M4.1:
7154 016411 376 001 CPI SYNC ; IS THIS AN ADDITIONAL SYNC CHAR
7155 016413 310 RZ ; IF YES, IGNORE AND PROCEED
7156
7157 ; FALL THRU IF NOT A SYNC
7158
7159 016414 041 022 035 LXI H,COLLECT ; NOW GO TO NEXT STATE OF ENVELOPE COLLECTOR
7160 016417 042 346 040 SHLD MODDIS ; SET UP FOR INTERRUPT HANDLER TO FIND
7161
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 189
SUBRTN.M80 ENVELOPE COLLECTOR
7163 .SBTTL ENVELOPE COLLECTOR
7164
7165 ; THIS IS WHERE YOU COME ON CHARACTERS THAT ARE PART OF AN ENVELOPE.
7166 ; THIS CODE CHECKS FOR 2 KINDS OF TERMINATORS: (1) END OF ENVELOPE
7167 ; (2) END OF CONTROL SEQUENCE
7168 ; OR ELSE MERELY STUFFS THE CHARACTER INTO THE ENVELOPE BUFFER. WHEN
7169 ; AN ENTIRE MESSAGE HAS BEEN RECEIVED, THEN WE WILL CALCULATE THE
7170 ; CHECKSUMS OR WHATEVER, MAKE WITH THE ACKS, NACKS, AND EXECUTE
7171 ; WHATEVER THE STUFF MAY BE. WHEN YOU ENTER HERE, REG B HAS A COPY
7172 ; OF THE CHARACTER JUST TYPED.
7173
7174 016422 376 044 COLLECT: CPI DOLLAH ; TOPS20 CALLS A SPADE A "DOLLAR"
7175 016424 312 225 035 JZ ACTION ; IF "$", TREAT LIKE AN ALTMODE
7176
7177 016427 376 033 CPI ALT ; IF ALTMODE, THEN END OF CONTROL SEQUENCE
7178 016431 312 225 035 JZ ACTION ; AND JUMP IF IT WAS ALTMODE. EXECUTE CONTROL CHAR
7179
7180 016434 376 015 CPI CRCHR ; IF CARRIAGE RETURN, THEN END OF ENVELOPE
7181 016436 312 071 035 JZ EXECUT ; GO EXECUTE THE ENVELOPE IF <CR>
7182
7183 016441 376 001 CPI SYNC ; ALSO LOOK FOR "SYNC", WHICH MEANS "RESYNC"
7184 016443 312 037 034 JZ SETM4 ; IF YES, THEN MUST RE-SYNC
7185
7186 ; WE MUST BE AWARE OF "RE-SYNCING", IN CASE THE "ALT" OR "CR" WAS GARBLED
7187 ; AS IT CAME DOWN THE LINE, AND WAS MISSED BY THE 8080. RE-SYNCING
7188 ; REQUIRES STARTING AT THE BEGINNING OF MODE4.
7189
7190 ; FALL THRU IF MUST SIMPLY SHOVE THE CHARACTER INTO THE BUFFER
7191
7192 016446 052 247 041 COL.LP: LHLD E.BUF ; GET POINTER TO THE LAST CHARACTER IN THE BUFFER
7193 016451 043 INX H ; BUMP POINTER TO FIRST FREE
7194 016452 167 MOV M,A ; AND STACK THE CHARACTER IN THE BUFFER
7195 016453 042 247 041 SHLD E.BUF ; REPLACE THE POINTER
7196
7197 016456 041 301 040 LXI H,E.CNT ; GET CURRENT CHARACTER COUNT
7198 016461 064 INR M ; UPDATE
7199 016462 176 MOV A,M ; NOW COPY COUNT TO ACCUM FOR TESTING
7200 016463 376 134 CPI ^O134 ; TOO MUCH FOR AN ENVELOPE?
7201 016465 322 207 035 JNC NACK.EN ; IF TOO MANY, NACK IT.. MAYBE HE WILL START OVER
7202 016470 311 RET ; ELSE OUT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 190
SUBRTN.M80 ENVELOPE COLLECTOR
7204
7205 ; HERE WHEN AN ENVELOPE IS COMPLETE... WE MUST COMPUTE THE CHECKSUM AND
7206 ; COMPARE AGAINST THE CHECK CHARACTER SENT OVER, THEN ACTUALLY EXECUTE
7207 ; THE CONTENTS OF THE ENVELOPE.
7208
7209 016471 072 301 040 EXECUT: LDA E.CNT ; GET CHAR COUNT SO WE CAN TELL WHEN WE FINISH
7210 016474 117 MOV C,A ; PUT IT IN "C"
7211
7212 016475 041 252 041 LXI H,E.BEG+1 ; POINT TO THE CHECKSUM IN THE ENVELOPE BUFFER
7213 016500 176 MOV A,M ; GET CHECKSUM CHARACTER INTO THE ACCUM
7214 016501 043 INX H ; UPDATE PAST THE CHECKSUM JUST COLLECTED
7215 016502 015 DCR C ; AND DOWN THE CHAR COUNT FOR THE THINGS
7216 016503 015 DCR C ; WE JUST PICKED OUT OF THE LIST
7217 016504 015 DCR C ; WE WANT LOOP TO END AT -1, INSTEAD OF 0
7218
7219 016505 206 ENV.LP: ADD M ; ADD CHARACTERS TO CHECKSUM
7220 016506 043 INX H ; NEXT CHARACTER
7221 016507 015 DCR C ; BUT FIRST SEE IF DONE YET
7222 016510 362 105 035 JP ENV.LP ; BACK IF NOT
7223
7224 ; WHEN DONE,CHECK THAT CHECKSUM HAS WORKED OUT TO BE ZERO
7225
7226 016513 346 077 ANI ^O77 ; ONLY SIX BITS COUNT
7227 016515 302 207 035 JNZ NACK.EN ; IF # 0, THEN CHECKSUM FAILED AND "NACK"
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 191
SUBRTN.M80 ENVELOPE COLLECTOR
7229
7230 ; FALL THRU TO HERE IF OK SO FAR
7231
7232 016520 066 377 MVI M,EOLCH ; MARK THE END OF THE ENVELOPE WITH EOL MARKER
7233
7234 ; NOW MUST CHECK THE MESSAGE NUMBER FOR OK-NESS
7235
7236 016522 041 361 040 LXI H,LSTMSG ; GET POINTER TO MESSAGE NUMBER
7237 016525 116 MOV C,M ; SAVE IT IN "C" FOR A LITTLE WHILE
7238 016526 072 251 041 LDA E.BEG ; GRAB CURRENT MESSAGE NUMBER
7239
7240 016531 271 CMP C ; ARE THEY THE SAME?
7241 016532 312 171 035 JZ ACK.EN ; IF YES, DO SIMPLE ACK AND IGNORE MESSAGE
7242
7243 ; IF DIFF, TWAS A GOOD MESSAGE, SAVE NUMBER AND EXECUTE
7244
7245 016535 167 MOV M,A ; SAVE MESSAGE NUMBER AS THE LAST
7246
7247 016536 315 340 034 CALL MV.ALL ; AND MOVE THE STUFF TO A BUFFER FOR EXECUTION
7248 016541 076 041 MVI A,^O41 ; EVERY CMD ENVELOPE EXECUTED RESETS THE ENV #
7249 016543 062 011 042 STA ENVMNO ; SO RESET THE ENVELOPE MESSAGE NUMBER TO 41
7250 016546 315 037 034 CALL SETM4 ; MODE 4 TO GRAB INTERRUPTS CORRECTLY WHILE RUNNING
7251 016551 315 325 034 CALL DECEX1 ; BEFORE EXECUTING, CLEAR ALL OLD MESSAGES
7252 016554 041 165 035 LXI H,OKDN ; TELL NORMAL ENDS TO RETURN HERE FOR FURTHER ORDERS
7253 016557 042 350 040 SHLD NOREND ; PASS INFO IN THE DEDICATED RAM POSITION
7254 016562 303 145 002 JMP DCODE ; AND BEGIN EXECUTION OF THE STRING READ IN
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 192
SUBRTN.M80 ENVELOPE COLLECTOR
7256
7257 016565 373 OKDN: EI ; MUST ALLOW INTERRUPTS HERE
7258 016566 315 174 034 CALL DECNET ; IF YES, MAIL ENVELOPE BEFORE ACK'ING
7259
7260 ; NOW OK TO ACKNOWLEDGE THE COMMAND
7261
7262 016571 315 037 034 ACK.EN: CALL SETM4 ; SEND "ACK" DOWN THE KLINIK LINE
7263
7264 016574 ACK: KLINE M.ACK
(1) 016574 315 072 004 CALL KLINE ; PRINT LINE OF CHARS
(1) 016577 202 035 .ADDR M.ACK ; BUFF TO PRINT
7265 016601 311 RET ; DONE WITH THIS
7266 016602 001 M.ACK: .BYTE SYNC ; SYNC
7267 016603 001 .BYTE SYNC ; SYNC
7268 016604 101 .BYTE 'A ; ACKNOWLEDGE CHAR
7269 016605 033 .BYTE ALT ; ALTMODE
7270 016606 000 .BYTE 0 ; END OF STRING
7271 016607 315 037 034 NACK.EN: CALL SETM4 ; SEND "NACK" DOWN THE KLINIK LINE
7272 016612 NACK: KLINE M.NACK
(1) 016612 315 072 004 CALL KLINE ; PRINT LINE OF CHARS
(1) 016615 220 035 .ADDR M.NACK ; BUFF TO PRINT
7273 016617 311 RET ; BACK TO CALLER
7274
7275 016620 001 M.NACK: .BYTE SYNC ; SYNC
7276 016621 001 .BYTE SYNC ; SYNC
7277 016622 116 .BYTE 'N ; NEGATIVE ACKNOWLEDGE CHAR
7278 016623 033 .BYTE ALT ; ALTMODE
7279 016624 000 .BYTE 0 ; END OF STRING
7280
7281 016625 052 247 041 ACTION: LHLD E.BUF ; GET THE TYPE OF CONTROL THIS WAS(ACK OR NACK)
7282 016630 176 MOV A,M ; PUT IT INTO ACCUM
7283 016631 062 261 040 STA APTANS ; SET IT INTO THE ANSWER WORD
7284 016634 303 037 034 JMP SETM4 ; AND NOW RESET INTERRUPT HANDLER AND OUT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 193
SUBRTN.M80 ENVELOPE COLLECTOR
7286
7287 ; THIS IS THE CODE DO DO STRAIGHT OUTPUT FROM THE KLINIK LINE TO THE CTY
7288 ; AND INCLUDE A SCHEME FOR BUFFERING THE OUTPUT SO THAT A 9600 BAUD
7289 ; KLINIK LINE WILL OUTPUT OK TO A 300 BAUD CTY. IF INTERRUPTED WHILE
7290 ; PRINTING A CHARACTER, THE CHARACTERS WAITING TO BE PRINTED ARE STACKED
7291 ; AT THE "SYSOUT" POINTER. CHARACTERS THAT ARE REMOVED FROM THE WAITING
7292 ; BUFFER ARE REMOVED VIA THE POINTER "SYSIN".
7293
7294 016637 247 MMOUT: ANA A ; SEE IF THIS IS A NULL CHARACTER
7295 016640 310 RZ ; IF YES, DON'T DO NOTHIN
7296 016641 052 123 042 LHLD SYSOUT ; SEE IF WE ARE BUSY PRINTING
7297 016644 174 MOV A,H ; GET AN INDICATOR
7298 016645 247 ANA A ; SET PC FLAGS
7299 016646 312 307 035 JZ NOTBUSY ; GO IF NOT BUSY
7300
7301 ; FELL TO HERE IF BUSY PRINTING
7302
7303 016651 353 XCHG ; SAVE THE CURRENT "SYSOUT" VALUE (IN D,E)
7304 016652 052 121 042 LHLD SYSIN ; NOW SEE IF THIS IS FIRST TIME IN
7305 016655 174 MOV A,H ; GET THE INDICATOR
7306 016656 247 ANA A ; SET FLAGS
7307 016657 302 270 035 JNZ STCK.Y ; JUMP IF ALREADY STACKING
7308
7309 016662 041 125 042 LXI H,SYSBUF ; FIRST TIME IN, SO SET INPUT FLAG
7310 016665 042 121 042 SHLD SYSIN ; SET IT
7311
7312 016670 041 053 335 STCK.Y: LXI H,-SYSEND ; NOW SEE IF BUFFER IS FULL
7313 016673 031 DAD D ; ADD END TO THE CURRENT TO SEE IF BUFF FULL
7314 016674 174 MOV A,H ; SEE IF ZERO
7315 016675 265 ORA L ; SEE IF ZERO
7316 016676 310 RZ ; IF .EQ. 0 THROW AWAY STUFF..BUFF IS FULL
7317
7318 ; HERE IF NOT FULL. MUST STACK THIS CHARACTER
7319
7320 016677 353 XCHG ; CURRENT PNTR GOES BACK TO HL REG (PNT TO SYSOUT)
7321 016700 160 MOV M,B ; CHAR INTO RAM SPACE
7322 016701 043 INX H ; UP COUNT
7323 016702 066 000 MVI M,0 ; GUARANTEE A ZERO BYTE AT THE END OF BUFFER
7324 016704 303 373 035 JMP SETOUT ; PUT THE POINTER BACK WHERE IT GOES
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 194
SUBRTN.M80 ENVELOPE COLLECTOR
7326
7327 ; HERE IF NOT PRINTING YET.. PRINT FIRST CHARACTER AND PLAN ON SOME MORE
7328
7329 016707 041 125 042 NOTBUSY: LXI H,SYSBUF ; THIS IS THE FIRST TIME IN
7330 016712 042 123 042 SHLD SYSOUT ; SET THE FLAG & THE POINTER
7331
7332 016715 170 MOV A,B ; GET CHAR BACK TO ACCUM SO CAN PRINT IT
7333 016716 107 MORE.: MOV B,A ; WHERE EVER U COME FROM, SAVE ACCUM IN B REG
7334 016717 376 012 CPI LFCHR ; IS THIS A LINE FEED?
7335 016721 302 333 035 JNZ MM.PNT ; IF NO, NOTHING SPECIAL
7336
7337 016724 072 260 040 LDA CNTLQ.ON ; MUST WE ANSWER EVERY <LF> WITH A "CNTROL-Q"
7338 016727 247 ANA A ; IF FLAG .EQ., THEN NO, IF YES THEN WRITE IT
7339 016730 304 056 004 CNZ KCHR0 ; YES, A <LF>, SEND THE SYSTEM A "CONTROL-Q"
7340 016733 170 MM.PNT: MOV A,B ; NO MATTER HOW U GOT HERE, CHAR GOES TO ACCUM
7341 016734 373 EI ; INTERRUPTS ON NOW, BEGIN PRINTING
7342 016735 315 011 004 CALL PCHR1Z ; PRINT A CHAR
7343
7344 ; BACK TO HERE WHEN DONE PRINTING
7345
7346 016740 363 DI ; DON'T BOTHER ME FOR A BIT
7347 016741 052 121 042 LHLD SYSIN ; GRAB POINTER OF THINGS WAITING TO BE PRINTED
7348 016744 174 MOV A,H ; GET FLAG
7349 016745 247 ANA A ; SET FLAGS
7350 016746 312 365 035 JZ DONE.BUF ; IF NOTHIN, ALL DONE
7351
7352 ; HERE WHEN SOMETHING TO DO
7353
7354 016751 176 MOV A,M ; GRAB A CHARACTER TO PRINT
7355 016752 247 ANA A ; MUST FIRST CHECK FOR END OF BUFFER
7356 016753 312 365 035 JZ DONE.BUF ; IF DONE RESET THE POINTERS AND GET OUT
7357
7358 016756 043 INX H ; NEXT POINT
7359 016757 042 121 042 SHLD SYSIN ; SET INTO RAM
7360 016762 303 316 035 JMP MORE. ; DO MORE
7361
7362 ; HERE ON DONE ALL..FALL INTO Z-BUFF CODE
7363
7364 016765 DONE.BUF:
7365 016765 041 000 000 Z.TBUF: LXI H,0 ; WE NEED TO CLEAR SOME BUFFERS
7366 016770 042 121 042 SHLD SYSIN ; CLEAR POINTER
7367 016773 042 123 042 SETOUT: SHLD SYSOUT ; AND CLEAR POINTER
7368 016776 311 RET
7369
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 195
SUBRTN.M80 **** MORE ERROR ESCAPES ****
7371 .SBTTL **** MORE ERROR ESCAPES ****
7372
7373 016777 NOACK: PLINE NOA ; "PRINT NO DATA ACK"
(1) 016777 337 RST 3 ; PRINT LINE OF CHARS
(1) 017000 207 037 .ADDR NOA ; BUFF TO PRINT
7374
7375 017002 041 001 000 LXI H,1 ; ERR CODE IS 1
7376 017005 042 154 040 ERRRTN: SHLD ERRCD ; SET ERROR CODE
7377 017010 ENDCMD
(1) 017010 311 RET ; RETURN TO CALLER
7378
7379 017011 257 NOARB: XRA A ; CLR ACCUM
7380 017012 323 210 OUT BUSCTL ; ***** I/O WRT 210/0 *****
7381 017014 PLINE NBR ; "?NO BUS RESP"
(1) 017014 337 RST 3 ; PRINT LINE OF CHARS
(1) 017015 223 037 .ADDR NBR ; BUFF TO PRINT
7382
7383 017017 041 002 000 LXI H,2 ; ERR CODE IS 2
7384 017022 303 005 036 JMP ERRRTN ; GO SET ERROR CODE
7385
7386 017025 257 NIXOM: XRA A ; CLR ACCUM
7387 017026 323 210 OUT BUSCTL ; *** I/O WRT 210/0 *** CLR NXM BIT AFTR REPORT
7388 017030 PLINE NXMMSG ; "PRINT ?NXM"
(1) 017030 337 RST 3 ; PRINT LINE OF CHARS
(1) 017031 215 037 .ADDR NXMMSG ; BUFF TO PRINT
7389 017033 041 003 000 NIXEX: LXI H,3 ; ERROR CODE 3
7390 017036 303 005 036 JMP ERRRTN ; SET ERROR CODE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 196
SUBRTN.M80 **** MORE ERROR ESCAPES ****
7392
7393 ;>>;WDR.M80
7394 .SBTTL ****DISK TRANSFER CHANNEL COMMAND LIST****
7395
7396 017041 DSKSEQ:
7397
7398 ; A MINOR NOTE: 40000 WEIGHT BIT IS "VALID"
7399 ; 100000 WEIGHT BIT IS "36-BIT XFR"
7400
7401 017041 UBA. 763,001 ; ADDRESS OF UBA IS FIRST ELEMENT OF THE LIST
(1) 017041 001 .BYTE 001 & 377
(1) 017042 346 .BYTE Q.1
(1) 017043 073 .BYTE Q.2
7402 017044 DI. 140,001 ; VALID & "36 BIT XFR" FOR PAGE 1 (1000-1777)
(1) 017044 001 .BYTE 001 & 377
(1) 017045 300 .BYTE Q.1
(1) 017046 000 .BYTE Q.2
7403 017047 LI. D776,P.10 ; GET DRIVE STATUS & CNTRL REG, SO CAN SET UNIT
(1) 017047 374 .BYTE Q.1
(1) 017050 010 .BYTE P.10 & 377
(1) 017051 013 .BYTE Q.2
7404 017052 DI.INDIRECT UNITNM ; NOW SET THE UNIT NUMBER
(1) 017052 132 040 .ADDR UNITNM
(1) 017054 200 .BYTE ^O200
7405 017055 EI. D776,P.12 ; ADDRESS OF DRIVE STATUS
(1) 017055 374 .BYTE Q.1
(1) 017056 012 .BYTE P.12 & 377
(1) 017057 023 .BYTE Q.2
7406 017060 TWAIT 400 ; CHECK THAT THE DRIVE IS PRESENT
(1) 017060 000 001 .ADDR 400
(1) 017062 060 .BYTE <14*4>
7407 017063 WAIT 200 ; CHECK & WAIT FOR READY
(1) 017063 200 000 .ADDR 200
(1) 017065 030 .BYTE <6*4>
7408 017066 LI. D776,P.10 ; ADDR OF DRIVE STATUS REG
(1) 017066 374 .BYTE Q.1
(1) 017067 010 .BYTE P.10 & 377
(1) 017070 013 .BYTE Q.2
7409 017071 DI. 0,40 ; ISSUE CONTROLLER CLR
(1) 017071 040 .BYTE 40 & 377
(1) 017072 000 .BYTE Q.1
(1) 017073 000 .BYTE Q.2
7410 017074 DI.INDIRECT UNITNM ; SET TO UNIT #
(1) 017074 132 040 .ADDR UNITNM
(1) 017076 200 .BYTE ^O200
7411 017077 LI. D776,P.00 ; ADDR OF CONTROLLER STATUS REG
(1) 017077 374 .BYTE Q.1
(1) 017100 000 .BYTE P.00 & 377
(1) 017101 013 .BYTE Q.2
7412 017102 DI. 0,11 ; ISSUE DRIVE CLEAR
(1) 017102 011 .BYTE 11 & 377
(1) 017103 000 .BYTE Q.1
(1) 017104 000 .BYTE Q.2
7413 017105 DI. 0,21 ; SET "READ-IN-PRESET"
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 196-1
DR.M80 ****DISK TRANSFER CHANNEL COMMAND LIST****
(1) 017105 021 .BYTE 21 & 377
(1) 017106 000 .BYTE Q.1
(1) 017107 000 .BYTE Q.2
7414 017110 LI. D776,P.12 ; GET TO THE DRIVE STATUS REGISTER
(1) 017110 374 .BYTE Q.1
(1) 017111 012 .BYTE P.12 & 377
(1) 017112 013 .BYTE Q.2
7415 017113 WAIT 200 ; WAIT FOR IT TO BE READY
(1) 017113 200 000 .ADDR 200
(1) 017115 030 .BYTE <6*4>
7416 017116 TWAIT 100 ; NOW CHECK THAT "PRE-SET" HAS SET VOLUME VALID
(1) 017116 100 000 .ADDR 100
(1) 017120 060 .BYTE <14*4>
7417 017121 LI. D776,P.06 ; ADDR TRACK/SECTOR REG
(1) 017121 374 .BYTE Q.1
(1) 017122 006 .BYTE P.06 & 377
(1) 017123 013 .BYTE Q.2
7418 017124 DI.INDIRECT BLKNUM ; EMPTY FOR NOW
(1) 017124 105 040 .ADDR BLKNUM
(1) 017126 200 .BYTE ^O200
7419 017127 LI. D776,P.34 ; ADDR OF CYLINDER REG
(1) 017127 374 .BYTE Q.1
(1) 017130 034 .BYTE P.34 & 377
(1) 017131 013 .BYTE Q.2
7420 017132 DI.INDIRECT BLKADR ; EMPTY FOR NOW
(1) 017132 112 040 .ADDR BLKADR
(1) 017134 200 .BYTE ^O200
7421 017135 QXFR: LI. D776,P.02 ; ADD OF WORD COUNT REG
(1) 017135 374 .BYTE Q.1
(1) 017136 002 .BYTE P.02 & 377
(1) 017137 013 .BYTE Q.2
7422 017140 DI. 176,000 ; 512 WORDS IS 1024 18-BIT BYTES (A PAGE)
(1) 017140 000 .BYTE 000 & 377
(1) 017141 374 .BYTE Q.1
(1) 017142 000 .BYTE Q.2
7423 017143 LI. D776,P.04 ; ADDR OF UNIBUS ADDRESS REG
(1) 017143 374 .BYTE Q.1
(1) 017144 004 .BYTE P.04 & 377
(1) 017145 013 .BYTE Q.2
7424 017146 DI. 4,000 ; SET SM10 MEM ADDR TO 1000
(1) 017146 000 .BYTE 000 & 377
(1) 017147 010 .BYTE Q.1
(1) 017150 000 .BYTE Q.2
7425 017151 LI. D776,P.00 ; BACK TO STATUS REG
(1) 017151 374 .BYTE Q.1
(1) 017152 000 .BYTE P.00 & 377
(1) 017153 013 .BYTE Q.2
7426 017154 DI. 0,71 ; ISSUE READ
(1) 017154 071 .BYTE 71 & 377
(1) 017155 000 .BYTE Q.1
(1) 017156 000 .BYTE Q.2
7427 017157 EI. D776,P.00 ; NOW READ TO CHECK FOR ERRORS IN XFER
(1) 017157 374 .BYTE Q.1
(1) 017160 000 .BYTE P.00 & 377
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 196-2
DR.M80 ****DISK TRANSFER CHANNEL COMMAND LIST****
(1) 017161 023 .BYTE Q.2
7428 017162 WAIT 200 ; CHECK FOR READY BIT TRUE..
(1) 017162 200 000 .ADDR 200
(1) 017164 030 .BYTE <6*4>
7429 017165 EI. D776,P.12 ; CHECK DRIVE STATUS REG ITSELF
(1) 017165 374 .BYTE Q.1
(1) 017166 012 .BYTE P.12 & 377
(1) 017167 023 .BYTE Q.2
7430 017170 ERRTST 40000 ; TEST "ERR" BIT
(1) 017170 000 100 .ADDR 40000
(1) 017172 040 .BYTE <10*4>
7431
7432 ; IF IT WAS OK, THEN CHECK THE CONTROLLER FOR ERRORS
7433
7434 017173 EI. D776,P.00 ; EXAMINE CONTROLLER
(1) 017173 374 .BYTE Q.1
(1) 017174 000 .BYTE P.00 & 377
(1) 017175 023 .BYTE Q.2
7435 017176 ERRTST 060000 ; DRIVE RDY, NOW SEE IF ENCOUNTERED ERRORS
(1) 017176 000 140 .ADDR 060000
(1) 017200 040 .BYTE <10*4>
7436 017201 ENDLST ; END OF CHANNEL COMMAND LIST
(1) 017201 000 .BYTE 0
(1) 017202 000 .BYTE 0
(1) 017203 050 .BYTE <12*4>
7437
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 197
DR.M80 TAPE TRANSFER CHANNEL COMMAND LIST
7439 .SBTTL TAPE TRANSFER CHANNEL COMMAND LIST
7440
7441 ; DRIVE CONTROLLER REGISTER IS 776440..FOLLOWING COMMANDS APPLY
7442 ; 7=REWIND
7443 ; 11=DRIVE CLEAR
7444 ; 25=ERASE
7445 ; 27=WRITE TAPE MARK
7446 ; 31=SPACE FORWARD(SKIP A FILE)
7447 ; 33=SPACE REVERSE(SKIP A FILE, MOVING TAPE IN REVERSE)
7448 ; 51=WRITE CHECK FORWARD
7449 ; 57=WRITE CHECK REVERSE
7450 ; 61=WRITE FORWARD
7451 ; 71=READ FORWARD(GO!)
7452 ; 77=READ REVERSE(GO!)
7453
7454 017204 MTASEQ: UBA. 763,001 ; ADDRESS OF UBA PAGING RAM
(1) 017204 001 .BYTE 001 & 377
(1) 017205 346 .BYTE Q.1
(1) 017206 073 .BYTE Q.2
7455 017207 DI. 40,001 ; SET VALID IN PAGE 1
(1) 017207 001 .BYTE 001 & 377
(1) 017210 100 .BYTE Q.1
(1) 017211 000 .BYTE Q.2
7456 017212 LI. D772,P.10 ; SET ADDRESS OF DRIVE CONTROL REGISTER
(1) 017212 364 .BYTE Q.1
(1) 017213 010 .BYTE P.10 & 377
(1) 017214 013 .BYTE Q.2
7457 017215 DI. 0,40 ; ISSUE CONTROLLER AND SLAVE CLR
(1) 017215 040 .BYTE 40 & 377
(1) 017216 000 .BYTE Q.1
(1) 017217 000 .BYTE Q.2
7458 017220 DI.INDIRECT TAPEUNIT ; SET TAPE UNIT #
(1) 017220 137 040 .ADDR TAPEUNIT
(1) 017222 200 .BYTE ^O200
7459 017223 LI. D772,P.32 ; SLAVE SELECT/FORMAT/DENSITY REG
(1) 017223 364 .BYTE Q.1
(1) 017224 032 .BYTE P.32 & 377
(1) 017225 013 .BYTE Q.2
7460 017226 DI.INDIRECT DEN.SLV ; SET SLAVE,FORMAT,DENS(TEMP:DENS=1600,F=0,S=0)
(1) 017226 362 040 .ADDR DEN.SLV
(1) 017230 200 .BYTE ^O200
7461 017231 EI. D772,P.12 ; READ THE DRIVE STATUS, TO MAKE SURE IT EXISTS
(1) 017231 364 .BYTE Q.1
(1) 017232 012 .BYTE P.12 & 377
(1) 017233 023 .BYTE Q.2
7462 017234 TWAIT 400 ; CHECK THE "DRIVE PRESENT" BIT
(1) 017234 000 001 .ADDR 400
(1) 017236 060 .BYTE <14*4>
7463 017237 WAIT 200 ; IF WAS PRESENT, WAIT FOR IT TO BE READY
(1) 017237 200 000 .ADDR 200
(1) 017241 030 .BYTE <6*4>
7464 017242 LI. D772,P.06 ; FRAME COUNT REGISTER
(1) 017242 364 .BYTE Q.1
(1) 017243 006 .BYTE P.06 & 377
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 197-1
DR.M80 TAPE TRANSFER CHANNEL COMMAND LIST
(1) 017244 013 .BYTE Q.2
7465 017245 DI. 0,0 ; FRAME COUNT TO 0 IS MAX NUMB OF FRAMES
(1) 017245 000 .BYTE 0 & 377
(1) 017246 000 .BYTE Q.1
(1) 017247 000 .BYTE Q.2
7466 017250 LI. D772,P.00 ; SET ADDRESS TO RH11 CONTROL REGISTER
(1) 017250 364 .BYTE Q.1
(1) 017251 000 .BYTE P.00 & 377
(1) 017252 013 .BYTE Q.2
7467 017253 DI. 0,7 ; ISSUE "REWIND" TO TAPE
(1) 017253 007 .BYTE 7 & 377
(1) 017254 000 .BYTE Q.1
(1) 017255 000 .BYTE Q.2
7468 017256 EI. D772,P.12 ; READ THE DRIVE STATUS TO CHECK FOR READY
(1) 017256 364 .BYTE Q.1
(1) 017257 012 .BYTE P.12 & 377
(1) 017260 023 .BYTE Q.2
7469 017261 WAIT 200 ; WAIT FOR REWIND TO COMPLETE
(1) 017261 200 000 .ADDR 200
(1) 017263 030 .BYTE <6*4>
7470 017264 QTXFR: LI. D772,P.04 ; CONTROLLER TO MEMORY DESTINATION REG
(1) 017264 364 .BYTE Q.1
(1) 017265 004 .BYTE P.04 & 377
(1) 017266 013 .BYTE Q.2
7471 017267 DI. 4,000 ; SET KS10 START ADDRESS TO 1000
(1) 017267 000 .BYTE 000 & 377
(1) 017270 010 .BYTE Q.1
(1) 017271 000 .BYTE Q.2
7472 017272 LI. D772,P.02 ; SET ADDRESS TO WORD COUNT REGISTER
(1) 017272 364 .BYTE Q.1
(1) 017273 002 .BYTE P.02 & 377
(1) 017274 013 .BYTE Q.2
7473 017275 DI. 176,000 ; 1 PAGE OF 512 WORDS IS 1024 18-BIT BYTES
(1) 017275 000 .BYTE 000 & 377
(1) 017276 374 .BYTE Q.1
(1) 017277 000 .BYTE Q.2
7474 017300 LI. D772,P.06 ; FRAME COUNT REGISTER
(1) 017300 364 .BYTE Q.1
(1) 017301 006 .BYTE P.06 & 377
(1) 017302 013 .BYTE Q.2
7475 017303 DI. 0,0 ; FRAME COUNT TO 0 IS MAX NUMBER OF FRAMES
(1) 017303 000 .BYTE 0 & 377
(1) 017304 000 .BYTE Q.1
(1) 017305 000 .BYTE Q.2
7476 017306 LI. D772,P.00 ; SET ADDRESS TO RH11 CONTROL REGISTER
(1) 017306 364 .BYTE Q.1
(1) 017307 000 .BYTE P.00 & 377
(1) 017310 013 .BYTE Q.2
7477 017311 DI.INDIRECT SKP.GO ; ISSUE "XFER CMD" (31=SKIP .OR. 71=RD-IN)
(1) 017311 144 040 .ADDR SKP.GO
(1) 017313 200 .BYTE ^O200
7478 017314 EI. D772,P.12 ; READ THE DRIVE STATUS TO CHECK FOR READY
(1) 017314 364 .BYTE Q.1
(1) 017315 012 .BYTE P.12 & 377
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 197-2
DR.M80 TAPE TRANSFER CHANNEL COMMAND LIST
(1) 017316 023 .BYTE Q.2
7479 017317 WAIT 200 ; WAIT FOR FILE READ TO COMPLETE
(1) 017317 200 000 .ADDR 200
(1) 017321 030 .BYTE <6*4>
7480 017322 EI. D772,P.14 ; LOOK AT THE DRIVE ERROR REGISTER
(1) 017322 364 .BYTE Q.1
(1) 017323 014 .BYTE P.14 & 377
(1) 017324 023 .BYTE Q.2
7481 017325 RETRY.: ERRTST 070300 ; ERRORS WORTH RETRYING??
(1) 017325 300 160 .ADDR 070300
(1) 017327 040 .BYTE <10*4>
7482 017330 FRMERR: ERRTST 103400 ; SEE IF THIS WAS A CORRECTABLE TYPE ERROR
(1) 017330 000 207 .ADDR 103400
(1) 017332 040 .BYTE <10*4>
7483 017333 EI. D772,P.12 ; READ THE DRIVE STATUS TO CHECK FOR ERRORS
(1) 017333 364 .BYTE Q.1
(1) 017334 012 .BYTE P.12 & 377
(1) 017335 023 .BYTE Q.2
7484 017336 ERRTST 40000 ; GET ANY DRIVE ERRORS?
(1) 017336 000 100 .ADDR 40000
(1) 017340 040 .BYTE <10*4>
7485 017341 LI. D772,P.00 ; NOW ADDRESS TO CONTROLLER STATUS
(1) 017341 364 .BYTE Q.1
(1) 017342 000 .BYTE P.00 & 377
(1) 017343 013 .BYTE Q.2
7486 017344 ERRTST 60000 ; CHECK FOR ERRORS THERE.
(1) 017344 000 140 .ADDR 60000
(1) 017346 040 .BYTE <10*4>
7487 017347 ENDLST ; END OF CHANNEL COMMAND LIST
(1) 017347 000 .BYTE 0
(1) 017350 000 .BYTE 0
(1) 017351 050 .BYTE <12*4>
7488
7489 ; QUICK LITTLE ROUTINE TO RESET THE MAGTAPE AFTER IT SUFFERS AN
7490 ; IGNORABLE ERROR.
7491
7492 017352 MTARST: LI. D772,P.10 ; SET ADDRESS OF DRIVE CONTROL REGISTER
(1) 017352 364 .BYTE Q.1
(1) 017353 010 .BYTE P.10 & 377
(1) 017354 013 .BYTE Q.2
7493 017355 DI. 0,40 ; ISSUE CONTROLLER AND SLAVE CLR
(1) 017355 040 .BYTE 40 & 377
(1) 017356 000 .BYTE Q.1
(1) 017357 000 .BYTE Q.2
7494 017360 DI.INDIRECT TAPEUNIT ; FIX UNIT NUMBER
(1) 017360 137 040 .ADDR TAPEUNIT
(1) 017362 200 .BYTE ^O200
7495 017363 LI. D772,P.04 ; CONTROLLER TO MEMORY DESTINATION REG
(1) 017363 364 .BYTE Q.1
(1) 017364 004 .BYTE P.04 & 377
(1) 017365 013 .BYTE Q.2
7496 017366 DI. 4,000 ; SET KS10 START ADDRESS TO 1000
(1) 017366 000 .BYTE 000 & 377
(1) 017367 010 .BYTE Q.1
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 197-3
DR.M80 TAPE TRANSFER CHANNEL COMMAND LIST
(1) 017370 000 .BYTE Q.2
7497 017371 LI. D772,P.06 ; FRAME COUNT REGISTER
(1) 017371 364 .BYTE Q.1
(1) 017372 006 .BYTE P.06 & 377
(1) 017373 013 .BYTE Q.2
7498 017374 DI. 0,0 ; FRAME COUNT TO 0 IS MAX NUMB OF FRAMES
(1) 017374 000 .BYTE 0 & 377
(1) 017375 000 .BYTE Q.1
(1) 017376 000 .BYTE Q.2
7499 017377 ENDLST ; QUICK OUT
(1) 017377 000 .BYTE 0
(1) 017400 000 .BYTE 0
(1) 017401 050 .BYTE <12*4>
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 198
DR.M80 TAPE TRANSFER CHANNEL COMMAND LIST
7501
7502 ;>>;WMSG.M80
7503
7504 017402 077 102 125 .IIF NDF,NOROOM INIER: .ASCIZ /?BUS\/ ; BUS POLLUTED ON POWER UP
7505 017410 077 102 106 BV: .ASCIZ /?BFO/ ; INPUT BUFFER OVERFLOW
7506 017415 077 111 114 CMDNG: .ASCII /?IL/ ; ILLEGAL INSTRUCTION
7507 017420 015 012 000 .BYTE ^O15,^O12,0 ; CR-LF
7508 017423 077 125 111 TTM: .ASCIZ /?UI\/ ; UNKNOWN INTERRRUPT
7509 017430 102 125 123 EBHED: .ASCIZ /BUS 0-35\/ ; MESSAGE HEADER FOR "EB" CMD
7510 017442 113 123 061 KSPRMT: .ASCII /KS10>/ ; PROMPT MESSAGE
7511 017447 377 000 .BYTE ^O377,0
7512 017451 040 103 131 MSG10: .ASCIZ % CYC\SENT/% ; CYCLE TYPE FOR "DB" COMMAND
7513 017464 134 122 103 DRCVD: .ASCIZ %\RCVD/% ; DATA RECEIVED ON BUS (DB CMD)
7514 017473 077 101 057 ECVER: .ASCIZ %?A/B\% ; A & B COPIES OF CRAM BITS DID NOT MATCH
7515 017501 120 103 057 PCMSG: .ASCIZ %PC/% ; OBVIOUS
7516 017505 045 110 114 HLTMS: .ASCIZ .%HLTD/. ; MESSAGE "HALTED/XXXXXX" WHERE XXXXXX IS DATA
7517 017514 077 104 116 EXMS: .ASCIZ /?DNF\/ ; "DID NOT FINISH"-INSTR
7518 017522 077 102 124 BTFAIL: .ASCIZ /?BT / ; DEVICE ERROR OR TIMEOUT DURING BOOT OPERATION
7519 017527 102 124 040 BTMSG1: .ASCIZ /BT SW/ ; MESSAGE SAYS BOOTING, USING BOOT SW
7520 017535 077 104 116 SMERR: .ASCIZ /?DNC\/ ; "DID NOT COMPLETE"-THE HALT
7521 017543 117 106 106 OFFMSG: .ASCIZ /OFF\/ ; MESSAGE SAYS SIGNAL IS "OFF"
7522 017550 077 120 101 PARMSG: .ASCIZ /?PAR ERR / ; REPORT CLOCK FREEZE DUE TO PAR ERR
7523 017562 077 115 122 MOSMSG: .ASCIZ /?MRE\/ ; MEMORY REFRESH ERROR
7524 017570 077 102 103 ERRMSG: .ASCIZ /?BC / ; TA-DA....BOOT CHECK
7525 017575 077 122 125 RN.: .ASCIZ /?RUNNING\/ ; TRYING TO DO A CMD THAT MAY SCREW UP
7526 017607 077 116 104 NOA: .ASCIZ /?NDA\/ ; RECEIVED NO DATA ACKNOWLEDGE ON MEM REQUEST
7527 017615 077 116 130 NXMMSG: .ASCIZ /?NXM\/ ; REFERRENCED NON EXISTANT MEMORY LOCATION
7528 017623 077 116 102 NBR: .ASCIZ /?NBR\/ ; CONSOLE WAS NOT GRANTED BUS ON A REQUEST
7529 017631 077 122 101 RAG: .ASCIZ /?RA/ ; CMD REQUIRES ARGUEMENT.. MUST TYPE SOMETHING
7530 017635 077 102 116 BB1: .ASCIZ /?BN/ ; TYPED A BAD NUMBER(I.E 9 OR X OR # ETC.)
7531 017641 076 076 125 Q.UBA: .ASCIZ />>UBA?/ ; QUERY FOR UNIBUS ADAPTER
7532 017650 076 076 122 Q.RH: .ASCIZ />>RHBASE?/ ; QUERY FOR RH11 TO USE
7533 017662 076 076 125 Q.UNIT: .ASCIZ />>UNIT?/ ; QUERY FOR UNIT TO USE
7534 017672 076 076 124 Q.TCU: .ASCIZ />>TCU?/ ; QUERY FOR TAPE CONTROL UNIT
7535 017701 076 076 104 Q.DEN: .ASCIZ />>DEN?/ ; QUERY FOR TAPE DENSITY
7536 017710 076 076 123 Q.SLV: .ASCIZ />>SLV?/ ; QUERY FOR TAPE SLAVE
7537 017717 077 113 101 KAMSG: .ASCIZ /?KA\/ ; KEEP ALIVE FAILED
7538 017724 077 106 122 FRCMSG: .ASCIZ /?FRC\/ ; HAD A FORCED RELOAD
7539 017732 077 120 127 PWLEN: .ASCIZ /?PWL/ ; PASSWORD LENGTH ERROR
7540 017737 077 116 101 NOACCS: .ASCII /?NA/ ; NOT AVAILABLE (KLINIK LINE THAT IS)
7541 017742 015 012 000 .BYTE ^O15,^O12,0 ; CR-LF
7542 017745 120 127 072 QPW: .ASCII /PW:/ ; ASK FOR A PASSWORD MESSAGE
7543 017750 015 012 000 .BYTE ^O15,^O12,0
7544 017753 117 113 POKMSG: .ASCII /OK/ ; OK THE PW IS VALID
7545 017755 015 012 000 .BYTE ^O15,^O12,0
7546 017760 102 124 040 AUTOMS: .ASCIZ /BT AUTO/ ; BEGINNING AUTO BOOT SEQUENCE
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 199
MSG.M80 TAPE TRANSFER CHANNEL COMMAND LIST
7548
7549 ;>>;WSTORE.M80
7550 .SBTTL *SM10 DATA STORAGE PARAMETERS*
7551
7552 ; NOTE THAT ALL THESE LOCATIONS ARE RAM LOCATIONS AND MAY BE USED
7553 ; WITH THE ASSEMBLY OF SEPARATE MODULES OF CONSOLE CODE....
7554
7555 020000 .= RAMST
7556 020000 000002 ZEROB: .BLKB 2 ; (5.2) ZERO BYTE TO END PRIOR ASCIZ MSG
7557 020002 000002 C80AD: .BLKB 2
7558 020004 000002 CRMAD: .BLKB 2
7559 020006 000002 BYTCNT: .BLKB 2
7560 020010 000002 CRMFN: .BLKB 2
7561 020012 000005 EMBUF: .BLKB 5
7562 020017 000005 MEMAD: .BLKB 5
7563 020024 000005 IOAD: .BLKB 5
7564 020031 000002 ENEXT: .BLKB 2
7565 020033 000002 DNEXT: .BLKB 2
7566 020035 000005 CHRBUF: .BLKB 5
7567 020042 000005 BUSAD: .BLKB 5
7568 020047 000005 DMDAT: .BLKB 5
7569 020054 000006 RAMX1: .BLKB 6
7570 020062 000006 RAMX2: .BLKB 6
7571 020070 000003 ER.LOC: .BLKB 3 ; PLACE TO EXECUTE 8080 "IN'S" AND "OUT'S"
7572 020073 000005 TMPBF2: .BLKB 5
7573 020100 000005 TMPB2: .BLKB 5
7574 020105 000005 BLKNUM: .BLKB 5
7575 020112 000005 BLKADR: .BLKB 5
7576 020117 000001 EXM1: .BLKB 1
7577 020120 000001 NOPNT: .BLKB 1
7578 020121 000001 BT.TYPE: .BLKB 1
7579 020122 000001 P8.TMP: .BLKB 1
7580 020123 000001 ERADDR: .BLKB 1
7581
7582 ; CURRENT KLINIK STATE SWITCH: ENABLE = 2
7583 ; PROTECT = 6
7584 ; DISABLE = 4
7585
7586 020124 000001 KLNKSW: .BLKB 1
7587
7588 020125 000002 APASS: .BLKB 2 ; (5.2D) ADDRESS OF POINTER IN PASSWORD
7589 020127 000001 PWNOK: .BLKB 1 ; (5.2D) FLAG INDICATING VALIDITY OF PW ENTERED
7590
7591 ;KPWPNT:.BLKB 2 ; (5.2D) REPLACED BY APASS, PWNOK,
7592 ;KPWCNT:.BLKB 1 ; (5.2D) PNUM
7593
7594 020130 000001 WATCHC: .BLKB 1
7595 020131 000001 CMDS..: .BLKB 1
7596 020132 000005 UNITNM: .BLKB 5
7597 020137 000005 TAPEUNIT: .BLKB 5
7598 020144 000005 SKP.GO: .BLKB 5
7599 020151 000001 BRKON: .BLKB 1
7600 020152 000002 BRKDT: .BLKB 2
7601 020154 000002 ERRCD: .BLKB 2
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 199-1
STORE.M80 *SM10 DATA STORAGE PARAMETERS*
7602 020156 000001 USRMD: .BLKB 1
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 200
STORE.M80 *SM10 DATA STORAGE PARAMETERS*
7604
7605 020157 000001 RPEND: .BLKB 1
7606 020160 000001 RPCNTR: .BLKB 1
7607 020161 000001 BFCNT: .BLKB 1
7608 020162 000001 STPPD: .BLKB 1
7609 020163 000001 EIFLAG: .BLKB 1
7610 020164 000001 DIFLAG: .BLKB 1
7611 020165 000001 RNFLG: .BLKB 1
7612 020166 000001 CHKPAR: .BLKB 1
7613 020167 000001 CHKREF: .BLKB 1
7614 020170 000002 ECSAV: .BLKB 2
7615 020172 000010 RM100: .BLKB 8
7616 020202 000001 BTMSK: .BLKB 1
7617 020203 000001 BTNUM: .BLKB 1
7618 020204 000001 EOL: .BLKB 1
7619 020205 000002 AM.AI: .BLKB 2
7620 020207 000002 RPBUFS: .BLKB 2
7621 020211 000002 RPLST: .BLKB 2
7622 020213 000001 RPTON: .BLKB 1
7623 020214 000001 CHRCNT: .BLKB 1
7624 020215 000002 BUF.: .BLKB 2
7625 020217 000002 HLSAVE: .BLKB 2
7626 020221 000002 CMD..: .BLKB 2
7627 020223 000002 .ARG1: .BLKB 2
7628 020225 000002 CMCNT: .BLKB 2
7629 020227 000002 FIRST: .BLKB 2
7630 020231 000002 CHKHLT: .BLKB 2
7631 020233 000002 OCTSV: .BLKB 2
7632 020235 000005 SHRTAD: .BLKB 5
7633 020242 000005 RHBASE: .BLKB 5
7634 020247 000001 CSLMODE: .BLKB 1
7635 020250 000001 KACNTR: .BLKB 1
7636 020251 000001 MMFLG: .BLKB 1
7637 020252 000001 MAILFG: .BLKB 1
7638 020253 000001 VERCNT: .BLKB 1
7639 020254 000001 UBANUM: .BLKB 1
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201
STORE.M80 *SM10 DATA STORAGE PARAMETERS*
7641
7642 ; RESTART INDICATOR - 1 - KA FAILED TO CHANGE
7643 ; 2 - FORCED RELOAD
7644 ; 3 - POWER FAIL
7645 ; 4 - BOOT BUTTON PUSHED
7646
7647 020255 000001 GOCODE: .BLKB 1
7648
7649 ; NO AUTOMATIC RELOAD FLAG (SET BY OPERATOR IF DESIRED)
7650
7651 020256 000001 SECRET: .BLKB 1
7652
7653 020257 000001 DIECNT: .BLKB 1
7654 020260 000001 CNTLQ.ON: .BLKB 1
7655 020261 000001 APTANS: .BLKB 1
7656 020262 000007 PASSWORD: .BLKB 7 ; CURRENT PASSWORD SET
7657
7658 020271 000001 PNUM: .BLKB 1 ; (5.2D) NUMBER OF PW CHARACTERS ENTERED SO FAR
7659
7660 ; FLAGS TO INDICATE THAT EXINT SHOULD SET RUN ALSO THEN EXECUTING THE
7661 ; JRST 1000 TO REBOOT THE SYSTEM AFTER A FORCED RELOAD. AND THAT THE
7662 ; CO CMD THAT GETS EXECUTED AFTER THAT SHOULD NOT SET CONTINUE.
7663
7664 020272 000001 HSBFL1: .BLKB 1 ; (5.2E) HSB FLAG 1
7665 020273 000001 HSBFL2: .BLKB 1 ; (5.2E) HSB FLAG 2
7666
7667 ; FLAG TO ENSURE ?NXM DOES NOT PRINT ON POWER UP - WHAT REALLY HAPPENS
7668 ; THERE IS THAT INTERNAL MODE IS SET SO AS TO NOT PRINT IT - THEN IF A
7669 ; CONTROL-\ IS TYPED THE 8080 GETS OUT OF INTERNAL MODE TO HANDLE THIS
7670 ; CHARACTER AND THEN WHEN IS RETURNS FROM THE INTERRUPT INTERNAL MODE
7671 ; IS NOW OFF AND THE ERROR MESSAGE PRINTS.
7672
7673 020274 000001 NXMFLG: .BLKB 1 ; (5.2C) NXM PRINT FLAG
7674
7675 020275 000002 T80DT: .BLKB 2 ; (5.2) LOCATION MOVED TO PROVIDE SPACE AT TOP
7676
7677 ;KPWBUF:.BLKB 6 ; (5.2D) PASSWORD TYPED IN
7678
7679 020277 000001 PWRTRY: .BLKB 1 ; PASSWORD RETRY COUNT
7680 020300 000001 KLLINE.ON: .BLKB 1 ; STATE OF KL FLAG (ON/OFF)
7681 020301 000001 E.CNT: .BLKB 1
7682 020302 000020 CRMBF: .BLKB ^D16
7683 020322 000020 CRMTM: .BLKB ^D16
7684 020342 000002 KATIM1: .BLKB 2
7685 020344 000002 .IIF DF,SCECOD,SCEADR: .BLKB 2 ; LAST FAILING ADDRESS
7686 020346 000002 MODDIS: .BLKB 2
7687 020350 000002 NOREND: .BLKB 2
7688 020352 000002 ENVPNT: .BLKB 2
7689 020354 000001 PARBT: .BLKB 1
7690 020355 000001 TRAPEN: .BLKB 1
7691 020356 000001 MTAUBA: .BLKB 1
7692 020357 000001 DSKUBA: .BLKB 1
7693 020360 000001 STATE: .BLKB 1
7694 020361 000001 LSTMSG: .BLKB 1
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-1
STORE.M80 *SM10 DATA STORAGE PARAMETERS*
7695 020362 000005 DEN.SLV: .BLKB 5
7696 020367 000005 MTBASE: .BLKB 5
7697 020374 000005 DSBASE: .BLKB 5
7698 020401 000031 RPINI: .BLKB ^D25
7699 020432 000062 RPTBFI: .BLKB ^D50
7700 020514 000132 BUFBG: .BLKB ^D90
7701 020646 000001 BUFEN: .BLKB 1
7702 020647 000002 E.BUF: .BLKB 2
7703 020651 000140 E.BEG: .BLKB ^O140
7704 021011 000001 ENVMNO: .BLKB 1
7705 021012 000001 ENVCHK: .BLKB 1
7706 021013 000106 ENVBUF: .BLKB 70 ; EB IS LONGEST COMMAND WITH 67. CHARS
7707 021121 000002 SYSIN: .BLKB 2
7708 021123 000002 SYSOUT: .BLKB 2
7709 021125 000200 SYSBUF: .BLKB ^O200
7710 021325 000001 SYSEND: .BLKB 1 ; AND EMPTY BYTE TO HOLD END OF LIST
7711 001 .IF DF,SCECOD
7712 021326 000001 SC.OFF: .BLKB 1 ; RECOVERY ON OR OFF FLAG
7713 021327 000050 RHSAVE: .BLKB 40. ; BUFFER FOR SAVING RH STUFF
7714 000 .ENDC
7715 021377 FREE:
7716 000000 .END ; END STATEMENT
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-2
STORE.M80 CROSS REFERENCE TABLE
A =%000007 548 583 595 647 655 675 678 681 682 685 689 691 692
694 698 706 715 721 737 738 739 740 741 751 752 757
765 769 770 783 786 788 796 806 818 845 853 868 894
896 904 962 1014 1018 1035 1038 1049 1062 1095 1113 1139 1155
1173 1177 1187 1188 1200 1235 1273 1275 1277 1295 1303 1305 1313
1323 1332 1354 1375 1411 1425 1430 1438 1440 1459 1465 1467 1476
1483 1485 1494 1495 1496 1500 1526 1543 1585 1608 1626 1632 1825
1831 1834 1855 1863 1871 1879 1881 1894 1904 1922 1923 1938 1949
1965 2004 2008 2012 2016 2020 2054 2056 2064 2066 2072 2119 2156
2162 2165 2171 2175 2179 2188 2192 2198 2199 2203 2215 2217 2220
2223 2224 2232 2235 2242 2247 2252 2259 2265 2292 2295 2302 2323
2336 2356 2359 2367 2369 2378 2383 2386 2389 2396 2407 2414 2418
2427 2432 2581 2590 2591 2594 2602 2631 2638 2657 2660 2667 2672
2677 2684 2690 2703 2716 2722 2775 2778 2797 2800 2857 2862 2864
2870 2875 2881 2887 2891 2911 2915 2962 2967 2969 2972 2975 2981
2987 2993 2998 3039 3044 3047 3064 3069 3072 3093 3102 3153 3155
3156 3169 3177 3179 3195 3216 3228 3243 3257 3281 3286 3319 3323
3344 3345 3350 3353 3359 3371 3391 3394 3405 3420 3436 3447 3449
3458 3460 3492 3494 3497 3500 3511 3513 3525 3527 3532 3534 3537
3544 3546 3548 3556 3560 3572 3581 3583 3589 3592 3608 3611 3616
3635 3648 3651 3679 3685 3695 3729 3736 3738 3757 3759 3769 3789
3849 3864 3866 3880 3959 3986 3993 4026 4029 4048 4063 4064 4068
4070 4087 4107 4119 4139 4140 4161 4198 4213 4240 4254 4265 4277
4285 4302 4305 4313 4314 4319 4320 4324 4329 4330 4335 4338 4344
4358 4359 4365 4464 4475 4504 4529 4564 4584 4587 4596 4598 4608
4615 4625 4639 4658 4661 4666 4671 4678 4688 4789 4851 4856 4865
4867 4869 4873 4875 4884 4885 4887 4889 4891 4903 4912 4919 4921
4929 4951 5025 5037 5047 5051 5072 5089 5100 5101 5103 5110 5113
5172 5223 5225 5286 5291 5326 5340 5347 5366 5372 5395 5396 5397
5412 5446 5461 5508 5518 5531 5559 5575 5610 5630 5650 5652 5653
5655 5665 5672 5687 5693 5712 5725 5730 5737 5750 5831 5860 5877
5897 5899 5935 5940 5967 5968 5991 5996 5998 6060 6177 6185 6186
6206 6210 6212 6214 6238 6253 6255 6257 6258 6260 6267 6269 6271
6295 6298 6301 6305 6313 6317 6334 6335 6351 6353 6368 6379 6380
6396 6397 6409 6426 6430 6447 6448 6450 6471 6482 6510 6512 6513
6533 6541 6578 6591 6627 6628 6692 6696 6824 6827 6842 6865 6867
6883 6912 6946 6953 6963 6969 6977 6986 6996 6999 7011 7023 7024
7030 7038 7049 7053 7061 7063 7087 7096 7194 7199 7210 7213 7245
7248 7282 7294 7297 7298 7305 7306 7314 7332 7333 7338 7340 7348
7349 7354 7355 7379 7386
ACK 016574 2209 7264#
ACK.EN 016571 7241 7262#
ACTION 016625 7175 7178 7281#
ADATP 015572 2868 2970 4252 4276 5452 6795#
ADATT 015565 2772 2791 6789#
ALT = 000033 127# 7177 7269 7278
AM.AI 020205 2866 2918 7619#
APASS 020125 2484 2567 2570 2589 7588#
APTANS 020261 7073 7086 7283 7655#
APT.WT 016311 7086# 7088
ARBRES= 000020 90# 2781 2804 2894 3001
ARG = 000000 5789# 5795# 5797# 5801# 7401# 7402# 7403# 7405# 7408# 7409# 7411# 7412# 7413#
7414# 7417# 7419# 7421# 7422# 7423# 7424# 7425# 7426# 7427# 7429# 7434# 7454#
7455# 7456# 7457# 7459# 7461# 7464# 7465# 7466# 7467# 7468# 7470# 7471# 7472#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-3
STORE.M80 CROSS REFERENCE TABLE
7473# 7474# 7475# 7476# 7478# 7480# 7483# 7485# 7492# 7493# 7495# 7496# 7497#
7498#
ARGBEG 014627 6299 6302#
ARGBG1 014630 6296 6303#
ARGQQ 014737 6359# 6371
ARG1 = 000000 5789# 5795# 5797# 5801# 7401# 7402# 7403# 7405# 7408# 7409# 7411# 7412# 7413#
7414# 7417# 7419# 7421# 7422# 7423# 7424# 7425# 7426# 7427# 7429# 7434# 7454#
7455# 7456# 7457# 7459# 7461# 7464# 7465# 7466# 7467# 7468# 7470# 7471# 7472#
7473# 7474# 7475# 7476# 7478# 7480# 7483# 7485# 7492# 7493# 7495# 7496# 7497#
7498#
ARG16. 014230 3151 3165 3191 3241 3279 3317 3343 3369 3470 3483 3894 3984 4135
4311 4580 4964 6026#
ARG96 014613 3839 6295#
ARROW = 000076 145#
AUTOMS 017760 993 7546#
A.BTER 015165 4613 4793 4824 5049 6496#
A.CRMO 013212 5572 5622#
A.CRMZ 013224 5627#
A0003 = 000113 77# 2243 2379 2668 2871 2973 3540 6813
A0411 = 000111 76# 3539 6809
A1219 = 000107 75# 2237 2371 2662 3538 6805
A16PK 014736 6357# 6374
A2027 = 000105 74# 2236 2370 2661 3495 3535 4868 6801
A256 000224 743# 753 759
A2835 = 000103 73# 2234 2368 2659 3493 3533 4866 6797
B =%000000 622 674 698 706 739 746 785 789 792 799 808 811 817
1038 1040 1188 1215 1411 1842 1855 1857 1863 1871 1881 1894 1904
1923 2008 2012 2016 2030 2108 2162 2172 2179 2190 2192 2195 2295
2302 2336 2356 2359 2407 2712 2719 2734 2745 2864 2870 2969 2972
3286 3293 3323 3582 3598 3602 3609 3610 3612 3613 3633 3653 3796
3799 3867 3868 3879 4121 4196 4208 4234 4244 4985 4986 4996 5085
5095 5098 5122 5123 5167 5188 5205 5230 5232 5276 5283 5344 5345
5371 5378 5380 5383 5384 5399 5401 5406 5410 5422 5424 5425 5427
5434 5436 5441 5460 5467 5470 5472 5474 5485 5486 5487 5491 5492
5511 5512 5529 5537 5655 5663 5681 5684 5688 5692 5750 5754 5875
5889 5959 5976 5978 6037 6051 6069 6077 6080 6085 6095 6111 6119
6123 6130 6162 6169 6179 6182 6187 6208 6241 6242 6280 6288 6311
6356 6369 6373 6386 6404 6409 6417 6530 6538 6550 6566 6617 6621
6631 6634 6648 6651 6672 6912 6932 6960 7029 7030 7048 7061 7108
7114 7116 7321 7332 7333 7340
BBLOOP 011567 4898 4918#
BB1 017635 6480 7530#
BCA.ER 013355 5519 5692#
BCB.ER 013362 5690 5695#
BCCMD 012744 1747 5501#
BCC.ER 013342 5682 5686#
BC.ALP 012770 5512# 5533 5547
BC.BER 013336 5667 5683#
BC.BLP 013051 5557# 5561
BC.BL1 013065 5566# 5577
BC.CER 013326 5595 5606 5680#
BC.CLP 013137 5591# 5613
BC.DB2 013041 5543 5549#
BC.2ND 013046 5538 5556#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-4
STORE.M80 CROSS REFERENCE TABLE
BC.3RD 013120 5581#
BELL = 000007 122# 2473
BFCNT 020161 2019 2023 2063 2067 2465 7607#
BFOVR 001734 1514# 2022
BFRST 004115 727 1010 1964 2133 2460# 4511 6600 7109
BIT15 = 100000 96# 1659 1661 1663 1665 1668 1670 1672 1676 1679 1683 1685 1687
1691 1702 1751 1787
BLKADR 020112 4780 4812 7420 7575#
BLKNUM 020105 4782 4790 4814 7418 7574#
BLKRDR 011336 4800 4811#
BOOT 010615 1082 4527#
BOOTSW= 000301 47# 969 1078 1088 2091 2643
BPI16 = 002000 87#
BPI8 = 001000 88#
BREAK 014155 3688 5823 5990#
BRKDT 020152 3677 3687 7600#
BRKON 020151 3680 3684 3700 7599#
BSLASH= 000134 141# 1629
BTAUT 010620 994 4528#
BTCHOI 010712 4533 4560 4578#
BTCMD 010630 1744 4533#
BTERR1 015172 6499# 6514
BTFAIL 017522 6501 7518#
BTINT 011401 4715 4774 4832#
BTMSG1 017527 4527 7519#
BTMSK 020202 6157 6196 7616#
BTNUM 020203 6205 7617#
BT.BIT= 000001 97# 4851 4938 5037
BT.GO 010733 4569 4592# 4619 4709
BT.GO1 010741 1342 4594#
BT.SRC 010633 4534# 5027
BT.TYP 020121 4852 4937 5061 7578#
BUFBG 020514 2460 7110 7700#
BUFEN 020646 7701#
BUF. 020215 1993 2006 2070 2461 4512 7624#
BUSAD 020042 2770 2773 2795 2826 2838 5507 5509 5523 5544 7567#
BUSARB= 000115 66# 2248 2384 2673 2776 2876 2976 3498 3542 4278
BUSCTL= 000210 59# 905 2261 2391 2686 2704 2723 2779 2802 2889 2912 2996 3501
3545 3561 3573 7380 7387
BUSRES 015231 2781 2804 2808 2894 2897 2902 3001 3006 6520#
BV 017410 1514 7505#
BYTCNT 020006 7559#
B.BTER 015163 4801 6494#
B2CMD 011755 1789 5025#
C =%000001 689 692 738 743 788 806 809 957 979 1035 1049 2444 2449
3635 3648 3651 3844 3858 4230 4233 4248 4883 4892 5284 5377 5382
5442 5530 5531 5546 5629 5630 5633 5652 5693 5935 5940 6043 6046
6164 6203 6266 6274 6321 6340 6366 6379 6396 6401 6410 6670 7210
7215 7216 7217 7221 7237 7240
CADWR 006267 3525# 3915 4855 4911 5078 5566 5626 5920
CARRIE= 000302 48# 1069
CARRLO= 000003 104# 7011
CCHR = 000103 136# 2454 2835
CECMD 005661 1695 3277#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-5
STORE.M80 CROSS REFERENCE TABLE
CEDIS 005712 3277 3300#
CHCMD 006176 1717 1827 3457#
CHECKS 002534 782 807 1809#
CHKADD 016166 7029# 7054
CHKBIT 012730 5400 5426 5435 5484#
CHKERR 000355 825 842#
CHKHLT 020231 1112 1126 3949 4092 7630#
CHKHOM 011356 4784 4792 4823#
CHKKA 001236 1117 1244 1251#
CHKPAR 020166 1094 1100 5763 7612#
CHKREF 020167 1137 1149 6545 7613#
CHKSM0= 112317 206# 525# 1809
CHKSM1= 141417 207# 526# 1810
CHKSM2= 161563 208# 527# 1811
CHKSM3= 002015 209# 528# 1812
CHKSTK 014764 6370 6379#
CHNXCT 012407 4945 5242 5275# 5843 5867 5906 5927 5955
CHOOSE 005717 3302# 3333 3360 3383 4162
CHRBUF 020035 2231 2250 2656 2675 7566#
CHRCNT 020214 6303 6395 7623#
CHRRDY 003574 1237 2278#
CLEAN 014771 6306 6385#
CLKCTL= 000206 58# 3180 3450 3461 5726
CLRBYT 015117 599 6470#
CLRLP 000111 644# 649
CLRRN 015255 3457 5780 6538#
CLRT1 015631 6825# 6828
CLRUSE 003305 2102 2117# 3922 4046 5764 6546
CMCNT 020225 1978 2053 2057 2079 7628#
CMDDI 012550 5315 5371#
CMDEI 012472 5317 5326#
CMDEN 012666 5320 5451#
CMDERC 012646 5319 5434#
CMDGO 001624 1427 1445#
CMDGO9 001644 1455 1465#
CMDLI 012476 5316 5331#
CMDLI1 012477 5327 5332#
CMDLST 002143 1190 1655#
CMDNG 017415 1222 2599 7506#
CMDS.. 020131 1429 2464 4375 7595#
CMDTWA 012630 5321 5422#
CMDUBA 012532 5322 5360#
CMDWAI 012577 5318 5394#
CMD.. 020221 4606 4698 4706 7626#
CMNBUF 002732 1900 1921#
CMPLP 015426 6648# 6654
CMP36 015416 910 2825 3774 4827 5592 5603 6642#
CNBCK = 000034 121# 1984 2086 2126 2627
CNTC 004103 1968 2452#
CNTLC = 000003 134# 1967
CNTLO = 000017 133# 1928
CNTLQ = 000021 132# 1943
CNTLQ. 020260 7337 7654#
CNTLS = 000023 131# 1940
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-6
STORE.M80 CROSS REFERENCE TABLE
CNTLU = 000025 130# 1956
CNTLY = 000031 129# 1873 1909
CNTLZ = 000032 128# 1953
CNTS 003476 1941 2214#
CNTSL 003507 2223# 2226
CNTZ 003324 1954 2132#
COCMD 007542 1378 1706 4086#
COINT 007557 4092# 4124
COLLEC 016422 7159 7174#
COL.LP 016446 7192#
COMMA = 000054 119# 1973 2074 6106 6107 6586 7121
CONT.I 014143 5969 5981#
CPCMD 005507 1719 3164#
CPMLT 005515 3169# 3175
CPUCTL= 000212 60# 659 1826 3437 4032 4091 4108
CP1 005527 3164 3173 3177# 3712 3727 4238 5080 5568
CRCHR = 000015 117# 1548 1645 1987 2561 7050 7180
CRLFIN 002136 1638 1645#
CRMAD 020004 3268 3519 3823 3825 3834 3836 5067 5070 5079 5200 7558#
CRMBF 020302 3582 3842 3862 5086 5642 5643 5644 5646 5647 5648 5657 5672 7682#
CRMCTL= 000204 56# 1832 3178 3448 3459 3512 3514 3526 3528 3547 3549 5832
CRMFN 020010 3472 3503 3867 4255 4857 4878 4896 4904 4923 5631 7560#
CRMTM 020322 3840 3843 7683#
CRM.AD 006264 3489 3519# 3726 3861 4237 4242
CSCMD 006163 1715 3446# 3917 5982
CSLMOD 020247 1161 1532 1560 1898 2180 2296 2347 2443 4153 4170 6923 6992 7000
7634#
CTYCTL= 000201 61# 702 719 1554 1854 2341 2428
CTYDAT= 000200 62# 724 1571 1575 1892 2360
CTYONL 003673 2293 2328#
CTYOUT 003747 2349 2359#
CTYPCH 003716 2341# 2342
C.BTER 015161 4538 4946 4955 5035 5915 6492#
C80AD 020002 3091 3096 3101 3110 3112 3134 3139 3141 3154 7557#
D =%000002 572 623 642 646 648 685 693 694 708 741 861 862 870
1190 1199 1202 1212 1213 1214 1273 1277 1335 1389 1400 1416 1434
1605 1606 2029 2105 2106 2107 2711 2714 2717 2733 2860 2908 2938
2939 2942 2965 3019 3020 3024 3042 3067 3556 3558 3599 3601 3687
3842 3872 3907 4022 4075 4195 4205 4206 4243 4246 4250 4275 4348
4458 4469 4561 4772 4773 4775 4776 4969 4970 4980 4987 4997 5086
5101 5103 5105 5106 5114 5117 5166 5189 5197 5234 5277 5280 5281
5293 5297 5299 5300 5360 5361 5385 5396 5407 5409 5411 5413 5451
5459 5469 5471 5473 5475 5660 5822 5876 5888 5905 5907 5913 5960
5990 5993 6000 6003 6004 6017 6038 6050 6070 6084 6096 6110 6131
6155 6175 6176 6186 6189 6206 6218 6250 6287 6339 6343 6345 6346
6347 6359 6398 6400 6412 6413 6427 6429 6432 6433 6445 6454 6456
6616 6622 6632 6633 6646 6653 6677 6721 6724 6725 6728 6729 6732
6733 6736 6737 6741 6742 6759 6760 6762 6764 6766 6768 6770 6772
6774 6776 6778 6795 6796 6798 6800 6802 6804 6806 6808 6810 6812
6814 6882 6888 7077 7110 7115 7117 7313
DATACK= 000001 91# 2808 2902
DBCMD 004563 1674 2767# 5513
DBCOM 004715 2817 2836#
DBERR 004713 2785 2835#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-7
STORE.M80 CROSS REFERENCE TABLE
DBRDIN 004676 2784 2811 2822#
DB1 004574 2768 2772#
DCCMD 007047 1661 3838#
DCHR = 000104 137# 2816
DCLP 007130 3868# 3881
DCODE 001145 1028 1187# 1504 4992 7254
DCODL 001163 1199# 1216
DECEX1 016325 7094# 7251
DECEX2 016325 3425 7095#
DECNET 016174 1166 2726 2729 2748 3600 5231 6484 7037# 7258
DEFLTE= 000174 94# 853 882 4596
DELAY. 015661 3401 3920 6863#
DEN.SL 020362 4476 4485 4669 7460 7695#
DEPSHT 014203 2199 4063 4064 4070 4119 4661 4666 4671 6012# 7024
DEV 000315 774 806#
DEVERR 012654 5418 5429 5441#
DEVEXI 012676 5447 5455#
DEVLP 000265 784# 797
DFCMD 006220 1685 3481#
DIAG = 000205 57# 1840 2284 3504 3559 4600
DICMD 005335 1670 3061#
DIECNT 020257 1296 1352 1366 7653#
DIEING 001463 1291 1352#
DIFLAG 020164 2986 2999 3070 7610#
DILOCL 012565 5373 5385#
DI.LP 014104 5960# 5979
DI1 005341 3064# 5387 5950 5977
DKCMD 005471 1676 3151#
DLIST 015103 6443 6460#
DLYLP 015665 6867# 6870
DMCMD 005147 1663 2959#
DMCONT 005221 2988 2996#
DMDAT 020047 2155 2960 2979 3062 3905 4062 4067 4117 4268 4654 4655 4665 4670
5385 5585 5949 5960 7020 7568#
DMEM2C 011427 4540 4851# 5917
DMGO 005217 2993# 4280
DMINT 005162 2967# 3908 6021
DM1 005153 2962# 4271
DM2 005157 2965# 5600
DNCMD 005246 1659 3018#
DNDC 007040 3031 3834#
DNDI 005332 3029 3060#
DNDK 005462 3030 3139#
DNDM 005142 2957# 3028
DNEXT 020033 2963 3018 3065 3157 3865 7565#
DNF 007436 3438 4035# 4100
DNLST 005262 3019 3028#
DN2ND 005164 2969# 3073
DOLLAH= 000044 142# 7174
DONE.B 016765 7350 7356 7364#
DRCMD 005633 1763 3252#
DRCVD 017464 2841 7513#
DSBASE 020374 4404 4844 7697#
DSCMD 010310 1767 4387#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-8
STORE.M80 CROSS REFERENCE TABLE
DSCON 012413 5280# 5311
DSKDFT 011412 4777 4840# 5859
DSKSEQ 017041 5241 7396#
DSKUBA 020357 4396 4840 7692#
DSLST 012452 5292 5315#
DSXFR 012353 4816 4823 5241#
DS1 010331 4389 4398#
DS2 010350 4400 4406#
DTARB = 000114 65# 2257 2387 2682 2982 4027
DTIME 001346 1246 1310#
DTM1 001352 1306 1312#
DTR = 000101 53# 897 3409 7010
D.BTER 015157 4593 6490#
D0003 = 000103 72# 6738
D0411 = 000003 71# 6734
D1219 = 000002 70# 6730
D2027 = 000001 69# 3567 6726
D2835 = 000000 68# 3563 6722
D772 = 000772 187# 7456 7459 7461 7464 7466 7468 7470 7472 7474 7476 7478 7480
7483 7485 7492 7495 7497
D776 = 000776 186# 5795 5797 5801 7403 7405 7408 7411 7414 7417 7419 7421 7423
7425 7427 7429 7434
E =%000003 570 647 678 707 740 1275 1280 1414 1436 2940 3022 3583 3592
3615 3616 3870 4350 4563 4564 5099 5100 5291 5295 5397 5412 5658
6187 6188 6208 6216 6253 6266 6338 6452 6675
EBCMD 004436 907 1731 2703#
EBHED 017430 2725 7509#
EB.RDI 004457 2714# 2720
EB1 004523 2736# 2746
ECBEE 006713 3739 3757# 3778
ECCMD 006627 1729 3720#
ECLP 006661 3736# 3752
ECSAV 020170 3744 3751 7614#
ECVER 017473 3782 7514#
EC1 006637 3724# 3826
EC2 006651 3721 3729#
EICMD 005272 1727 3035#
EIFLAG 020163 2880 2892 3045 7609#
EIGHT = 000070 156#
EIGHT0 010533 4458 4487#
EI1 005302 3036 3039# 3054 5353 5408 5423 5869
EJCMD 006452 1733 3631# 3713
EJLP 006462 3635# 3654
EJLST 006517 3632 3662#
EJ1 006465 3638#
EKCMD 005376 1681 3086#
EK1 005405 3086 3093# 3113
EMBUF 020012 911 1260 1289 2193 2291 2321 2331 2335 2706 2908 3947 4020 4022
4811 4813 4829 4872 4881 4918 4985 5097 5139 5222 5484 5593 5604
5889 6093 7561#
EMCMD 004747 1725 2854#
EMCONT 005017 2882 2889#
EMINT 004764 2862# 6019
EM.CRM 005000 2871# 4870
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-9
STORE.M80 CROSS REFERENCE TABLE
EM1 004755 906 2854 2857# 2933
EM2 004761 2860# 5184 5591 5602
ENACOM 005703 3293# 3327
ENCMD 005116 1721 2937#
ENDIN 003145 1852 2028#
END.US 003243 2091# 2632
ENEC 007026 2949 3823#
ENEI 005324 2947 3053#
ENEK 005431 2948 3110#
ENEM 005106 2931# 2946
ENEXT 020031 2858 2937 3040 3094 3730 7564#
ENLST 005132 2938 2946#
ENVBUF 021013 881 7047 7079 7098 7706#
ENVCHK 021012 7071 7705#
ENVMNO 021011 3422 7042 7045 7077 7249 7704#
ENVPNT 020352 1542 1546 7099 7688#
ENV.LP 016505 7219# 7222
EN2ND 004766 2864# 3048
EOCML 015330 1449 4521 6330 6575# 6893
EOL 020204 1000 1176 1493 2055 4509 7111 7618#
EOLCH = 000377 89# 4199 4214 6583 7126 7232
EOLCM 015357 6600#
EOLYS 015362 6584 6587 6604#
EOL.LK 001126 1163 1172#
EOMRK 003164 1985 1988 1991 2051#
ERADDR 020123 3196 3197 3244 3256 7580#
ERCMD 005540 1759 3189#
ERRCD 020154 1001 1002 1503 4284 4679 5444 5503 5504 5517 5686 5689 5694 5697
6499 6502 7376 7601#
ERRMSG 017570 5696 7524#
ERRRTN 017005 2847 7376# 7384 7390
ER.LOC 020070 3214 3217 3219 7571#
ER.UTL 005612 2715 3204 3227# 5738
ER1 005552 3189 3197#
EXAMSH 014202 1256 1372 2152 2289 2329 3935 3954 4794 4826 6011#
EXCMD 007406 1751 4019#
EXECUT 016471 7181 7209#
EXINT 007415 4024# 4076
EXINTM 007412 1377 4022#
EXIT4 010722 4585# 4588
EXMHL 014211 4807 6016#
EXMS 017514 4045 7517#
EXM1 020117 7576#
E.BEG 020651 4980 6984 7108 7212 7238 7703#
E.BUF 020647 6985 7192 7195 7281 7702#
E.CNT 020301 6983 7197 7209 7681#
FAKLIT 001334 1243 1302#
FICMD 011667 1787 4964#
FILEIN 011252 1336 4565 4773# 4971
FILESH 011257 4776# 5914
FINARG 015042 6411 6420#
FIRST 020227 1191 1509 2462 7629#
FIVE = 000005 153#
FIXLP 015035 6416# 6418
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-10
STORE.M80 CROSS REFERENCE TABLE
FIXPNT 015036 6402 6417#
FI.GET 011715 4981# 5000
FI.MOV 011727 4986# 4999
FI.NXT 011744 4989 4996#
FNDARG 010604 1192 4519#
FOUR = 000004 152#
FRCMSG 017724 1322 7538#
FREE 021377 7715#
FRELOA 001360 1262 1321#
FRMERR 017330 4678 7482#
FXNXT 001724 1502 1507#
GATHER 012216 4982 5088 5166#
GENLP 007066 3848# 3859
GETEN 014671 6316 6328#
GETLP 014650 6313# 6323
GOCODE 020255 1324 1376 2154 2200 4066 4530 7647#
GOODPK 011316 4785 4794#
G.SKP 012245 5174 5184#
H =%000004 549 558 559 561 571 573 584 586 596 598 609 610 612
624 641 645 675 682 690 691 700 736 744 757 765 773
782 794 807 810 812 819 823 860 869 958 1005 1007 1028
1041 1043 1067 1068 1072 1140 1142 1165 1167 1251 1288 1311 1314
1339 1341 1345 1347 1352 1388 1395 1401 1415 1417 1418 1435 1437
1459 1465 1467 1479 1481 1482 1486 1493 1504 1508 1541 1544 1547
1586 1627 1644 1852 1853 1978 2005 2024 2028 2069 2079 2104 2142
2155 2173 2174 2197 2214 2443 2446 2448 2460 2483 2495 2569 2575
2600 2710 2718 2732 2737 2742 2838 2843 2846 2941 3023 3096 3111
3140 3170 3174 3227 3228 3232 3257 3399 3404 3406 3488 3490 3494
3534 3608 3632 3642 3646 3734 3737 3746 3758 3770 3773 3777 3824
3835 3843 3854 3855 3856 3862 3871 3873 3898 3947 4030 4067 4072
4088 4207 4221 4313 4349 4351 4354 4355 4358 4365 4376 4378 4457
4465 4468 4509 4515 4651 4655 4660 4662 4664 4679 4695 4696 4779
4781 4805 4853 4854 4867 4873 4875 4878 4885 4887 4896 4908 4909
4910 4912 4915 4919 4921 4923 4927 4929 4944 5066 5071 5072 5110
5113 5115 5135 5139 5170 5172 5180 5181 5182 5185 5186 5196 5200
5214 5223 5225 5235 5241 5245 5249 5252 5278 5283 5285 5292 5296
5309 5310 5337 5342 5343 5363 5378 5379 5381 5441 5456 5457 5458
5466 5476 5493 5523 5556 5558 5559 5565 5567 5570 5573 5574 5575
5609 5610 5622 5623 5627 5628 5635 5653 5657 5659 5661 5664 5666
5683 5685 5687 5697 5709 5736 5842 5856 5866 5886 5887 5896 5902
5903 5904 5926 5936 5954 5957 5958 5962 5974 5975 5996 5998 6005
6036 6052 6058 6059 6067 6071 6083 6093 6097 6109 6118 6132 6163
6165 6168 6171 6178 6184 6195 6215 6246 6251 6258 6260 6262 6264
6265 6272 6285 6286 6302 6322 6336 6339 6344 6349 6354 6387 6399
6416 6428 6434 6443 6448 6450 6453 6470 6473 6502 6509 6524 6563
6575 6593 6605 6614 6652 6671 6673 6676 6678 6698 6819 6825 6840
6841 6866 6889 6896 6954 6964 6970 6984 6987 6998 7013 7022 7031
7047 7059 7098 7111 7145 7159 7193 7197 7212 7214 7220 7236 7252
7297 7305 7309 7312 7314 7322 7329 7348 7358 7365 7375 7383 7389
HACMD 007573 1329 1370 1704 4107#
HANGUP 016123 2619 6962 7008#
HLSAVE 020217 6167 6227 7625#
HLTCM 007226 1115 3920# 4109
HLTMS 017505 3946 7516#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-11
STORE.M80 CROSS REFERENCE TABLE
HOMEWD 011235 4725# 4828
HRDERR 013500 5731 5742 5763# 5824
HSBFL1 020272 1345 4030 7664#
HSBFL2 020273 4088 7665#
INBUF 010556 4449 4497 4509#
INCLP 015461 6695# 6699
INC36 015451 2931 2957 3075 3077 4272 6686#
INDIRE= 000077 4526#
INFOBT 010704 1343 4573#
INIER 017402 919 7504#
INIMS 002544 899 1817#
INRDY 010601 4515 4518#
INTCH 002674 1865 1892# 2419 2433
INTON 000020 558#
INTRP 002621 626 1852#
INT2KS= 000116 67# 2266 2267 2397 2398 2691 2692
IOAD 020024 3042 3067 3076 3078 3125 5335 5337 5360 5963 5966 7563#
IORGS 004553 2711 2732 2753#
IOUT 003263 2105# 2143
IO.INC 005363 3053 3060 3075#
KACNTR 020250 1288 7635#
KAMSG 017717 1367 7537#
KATIMX= 000043 42# 1355
KATIM1 020342 860 1252 1302 1310 1312 7684#
KCHR 002052 1584# 2125 7074 7075
KCHR0 002056 1588# 1613 1905 7339
KCHR1 002057 1589# 1591
KILL.K 016121 1071 2309 2476 7007#
KILNM 015134 4315 4471 6331 6480#
KLCMD 007631 1755 4131#
KLDIS 007664 4131 4160#
KLINE 002072 1601# 2475 2482 2599 2612 7264 7272
KLINE1 002077 1605# 1614 7078
KLIRST 004316 2604 2619#
KLLINE 020300 2637 4145 4147 4160 6959 7680#
KLNKLT 015723 1042 6912#
KLNKSW 020124 1039 1912 3390 4173 4185 6913 7007 7586#
KLOFF 007650 4141 4147#
KLPCHR 003651 2304 2316# 2317
KLTOO 003735 2353# 2354
KL.ACT= 000002 105# 6996
KL.DSP 002670 1874 1885#
KL.LAM 015753 6936# 6961
KL.LON 015751 6932# 6949
KL3435 004357 2628 2655#
KPAINI= 003244 41# 876 1251
KSPRMT 017442 1022 4094 4168 7510#
KS.PAR 005704 3294# 3998 4597
L =%000005 681 699 751 818 1303 1305 1313 3153 3169 3195 3229 3243 3255
3281 3319 3344 3371 3405 3492 3532 3611 3986 3993 3996 4139 4319
4865 4889 4891 4984 4998 5107 5284 5377 5442 5488 5650 5665 5673
6001 6256 6257 6338 6446 6447 6471 7315
LACMD 005443 1668 2855 3117# 4056
LBCMD 010660 1749 4560#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-12
STORE.M80 CROSS REFERENCE TABLE
LBINT 010663 4548 4561#
LBSIGN= 000043 125#
LB.GO 010644 4548#
LB.GO1 010647 1349 4549# 4620
LCCMD 005654 1665 3267# 3722 4236
LCHKR 000217 737# 831
LFCHR = 000012 118# 1646 1990 7334
LFCMD 006211 1683 3470#
LICMD 005450 1672 3037 3124#
LIGHTS= 000101 52# 1282 3392 3395 6568
LIVE10 001212 1156 1234#
LKCMD 005455 1679 3133#
LOAD4 010726 4578 4587#
LRCMD 005623 1761 3241#
LSTMSG 020361 3421 7236 7694#
LTCMD 006057 1753 3390#
LTDLY 006073 3393 3399#
LTFLT 015301 5781 6498 6549#
LTLOOP 006076 959 1068 1341 3401# 3407 5736 7014
L.BTER 015215 1337 4567 4634 4644 4972 6509#
M =%000006 548 560 570 572 583 595 611 644 743 786 809 811 868
1204 1290 1295 1346 1348 1353 1354 1390 1414 1416 1434 1436 1440
1483 1485 1494 1496 1543 1545 1585 1626 1979 2004 2072 2080 2156
2175 2198 2215 2220 2223 2444 2445 2449 2568 2576 2590 2601 2602
2716 2940 2942 3022 3024 3102 3155 3736 3757 3769 3870 3872 4031
4033 4068 4089 4090 4198 4213 4222 4329 4348 4350 4510 4657 4658
4663 4680 4689 4879 4897 4924 5136 5286 5295 5297 5339 5340 5346
5347 5365 5366 5380 5382 5658 5660 5897 5965 5967 6060 6162 6164
6177 6197 6212 6214 6242 6269 6271 6313 6317 6335 6351 6353 6386
6397 6426 6430 6452 6454 6472 6511 6512 6523 6562 6578 6649 6670
6672 6675 6677 6695 6696 6826 6842 6865 6886 7023 7049 7060 7112
7131 7194 7198 7199 7213 7219 7232 7237 7245 7282 7321 7323 7354
MAD000 007333 912 2792 3907 3967# 5451
MAILFG 020252 1550 6982 7037 7097 7637#
MA1000 011230 4550 4724# 4859 4977 5064 5588
MBCMD 011173 1773 4706#
MBINT 011021 4618 4625# 4708
MEMAD 020017 2860 2932 2958 2965 3118 4058 4264 4266 4273 4275 4860 4864 4926
4928 4978 5065 5169 5183 5187 5589 5608 5612 5680 7562#
MEM2CR 011431 4616 4852#
MICROP 011247 4534 4772# 5034
MISS2 001175 1212# 1396
MKCMD 007776 1687 4233#
MMCMD 006116 1791 3419# 6485
MMERR 015137 1224 5699 5719 6481# 6581
MMERR1 015151 1880 6485# 7081 7084
MMFLG 020251 1017 1878 1913 2118 2164 2630 3423 6481 7636#
MMOUT 016637 7143 7294#
MM.PNT 016733 7335 7340#
MODDIS 020346 1885 2496 7001 7160 7686#
MODE0 004135 879 2473# 6964
MODE1 004150 2482# 2606 6954
MODE2 004327 2627# 6998
MODE3 002732 1920# 6970
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-13
STORE.M80 CROSS REFERENCE TABLE
MODE4 016376 6987 7141#
MORE. 016716 7333# 7360
MOSMSG 017562 6547 7523#
MOVLP 015007 6397# 6405
MOVREG 015403 5890 5961 6620 6627#
MOV18B 012707 5362 5386 5466#
MOV18X 012717 5472# 5477
MRCMD 002564 1713 1824# 3901 4835 5501
MRINT 002572 663 1831#
MRKCM 010000 4231 4234#
MRKRT 010034 4250#
MSCMD 010366 1769 4421#
MSG10 017451 2836 7512#
MS1 010407 4423 4432#
MS1.5 010426 4434 4439#
MS2 010445 4441 4448#
MS2.5 010512 4466 4476#
MS3 010515 4451 4478#
MTARST 017352 5252 7492#
MTASEQ 017204 5245 7454#
MTAUBA 020356 4430 4716 7691#
MTBASE 020367 4438 4720 7696#
MTCH1 001536 1205 1388#
MTCH2 001550 1391 1400#
MTCMD 010757 1765 4606#
MTRESE 012401 4682 5252#
MTSETU 011210 4607 4707 4715# 5046
MTSKOK 011037 4631 4639#
MTXFR 012362 4609 4626 5048 5245#
MT.BIT= 000002 98# 4615 5051
MT.1 011003 4610 4615#
MV.ALL 016340 4991 7108# 7247
MV.CNT 016374 7122 7131#
MV.INP 016346 7110#
MV.IN1 016356 7114# 7127
M.ACK 016602 7264 7266#
M.NACK 016620 7272 7275#
M11 003051 1974 1984#
M4.0 016376 7142#
M4.1 016411 7145 7153#
M5B 015405 5878 6628# 6629
NACK 016612 7272#
NACK.E 016607 7201 7227 7271#
NBR 017623 7381 7528#
NEEDRM= ****** U 5505
NEWPAG 011450 4858# 4933
NEXTCR 011630 4932 4937# 5178
NINE = 000071 157#
NIXEX 017033 7389#
NIXOM 017025 2898 3007 7386#
NOA 017607 7373 7526#
NOACCS 017737 2475 7540#
NOACK 016777 2809 2903 7373#
NOACTN 004022 2307 2333 2399#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-14
STORE.M80 CROSS REFERENCE TABLE
NOARB 017011 2782 2806 2895 3002 7379#
NOECH 003130 2010 2014 2019#
NONFAT 011140 4612 4633 4643 4678# 4954
NONXME= 000100 92# 2897 3006
NOPNT 020120 559 610 1004 1321 1365 1525 1935 1937 2101 2914 3588 5695 5724
6500 6544 7577#
NORDIS 001737 1501 1515#
NOREFR 015267 1141 6544#
NOREND 020350 1009 1515 7253 7687#
NORML 001677 1194 1417 1493# 4695 6479
NOROOM= ****** U 7504
NOTBUS 016707 7299 7329#
NOTRK 014760 6367 6373#
NOTSAM 013652 5836#
NR 013475 5759# 5844
NRSCE 013616 5759 5815#
NUL = 000000 5789# 5795# 5797# 5801# 7401# 7402# 7403# 7405# 7408# 7409# 7411# 7412# 7413#
7414# 7417# 7419# 7421# 7422# 7423# 7424# 7425# 7426# 7427# 7429# 7434# 7454#
7455# 7456# 7457# 7459# 7461# 7464# 7465# 7466# 7467# 7468# 7470# 7471# 7472#
7473# 7474# 7475# 7476# 7478# 7480# 7483# 7485# 7492# 7493# 7495# 7496# 7497#
7498#
NULKL 003665 2298 2323#
NULLJ 000660 1015 1019 1028# 1083 1247 1267 1283 1297 1350 1356 1380 2142 5984
NULLW 000663 1029# 1178 4354 4516
NXMDC 001204 1201 1222#
NXMFLG 020274 7673#
NXMMSG 017615 7388 7527#
NX2 001015 1090 1099#
NX3 001047 1108 1125#
NX4 001076 1133 1148#
N0 000757 1057 1063 1078#
N0.5 000766 971 1082#
N00 000727 1051 1061#
N1 000774 1080 1088# 1506
N2 001021 1097 1106#
N3 001053 1118 1131#
N4 001102 1143 1154#
OCHR = 000117 147# 1934
OCTAL 014416 3747 6040 6073 6098 6133 6155#
OCTLC 014466 6195# 6223
OCTL1 014442 6175# 6180
OCTL3 014510 6208# 6219
OCTL4 014515 6212# 6217
OCTL5 014534 6204 6227#
OCTSV 020233 6190 6209 7631#
OFFMSG 017543 3303 7521#
OFFSET= 000261 1000# 1001# 1002# 1003# 1004# 1073# 1296# 1321# 1365# 1366# 1503# 1912# 1913#
1948# 2101# 2117# 2200# 2463# 2464# 2465# 2485# 2486# 2614# 3390# 3683# 3700#
3949# 4173# 4185# 4833# 4834# 5503# 5504# 5695# 5724# 5763# 6500# 6544# 6545#
6959# 7007# 7073#
OKDN 016565 7252 7257#
OKSCE 013627 5816# 5855
ONE = 000001 149#
ONES 011242 3904 4726# 5584 5605
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-15
STORE.M80 CROSS REFERENCE TABLE
PADLP 015024 6410# 6414
PARBT 020354 2177 3287 3294 3300 3324 3331 3910 3963 3994 4003 4833 7689#
PARDIS 007367 3982 4003#
PARMSG 017550 5765 7522#
PASSME 011055 4641 4646#
PASSSR 011060 4574 4651#
PASSWO 020262 2483 4195 4220 6945 7656#
PASS1 = ****** U 1799
PASS2 = 000000 1808
PCCOM 007305 3439 3953#
PCHR 001743 551 847 1524# 1637 2017 2073 3798 6045 6079 6121
PCHROV 002046 1562 1574#
PCHR0 001755 1527 1532#
PCHR1 002012 1534 1554# 1556
PCHR1Z 002011 1553# 7342
PCHR2 002031 1566# 1568
PCMSG 017501 3956 7515#
PCRAM 006761 3760 3789#
PCRLP 006775 3797# 3800
PECMD 007340 1693 3982#
PERCNT= 000045 143# 7083
PHALF 014366 6102 6108 6118#
PICKUP 010544 4388 4399 4407 4422 4433 4440 4479 4497#
PLACE 015046 3848 3852 6426#
PLNE 002111 574 1623#
PLN1 002113 1626# 1639 3640
PLN2 002127 1630 1638#
PMCMD 006616 1742 3710#
PNT.ON 005726 3302 3305#
PNUM 020271 2485 2580 2584 7658#
POKE10 004014 2396# 7025
POKMSG 017753 2612 7544#
PRMLST 000420 861 875#
PSW =%000011 621 772 781 804 829 843 1114 1116 1236 1242 1450 1468 1474
1487 1524 1529 1540 1553 1569 1574 1588 1593 2031 2109 2166 2202
3199 3203 3215 3218 3797 4681 4683 5332 5348 5710 5715 6018 6020
6039 6044 6049 6068 6078 6086 6094 6112 6120 6129 6202 6319 6357
6444 6457 6549 6553 6839 6853 6864 6868 6869 6871 7019 7021
PULSE 006620 3691 3712#
PWCMD 007717 1775 4185#
PWLEN 017732 4219 7539#
PWNOK 020127 2486 2575 2593 7589#
PWOK1 004225 2571 2580#
PWRCHK 000530 914 955#
PWRTRY 020277 2600 2614 7679#
PWRUP 000100 540 637#
PW.CLR 007761 4190 4220#
PW.ERR 004261 2583 2592 2599#
PW.LOO 007734 4198# 4209
PW.OK 004303 2595 2611#
PW.OUT 004313 2614# 2621
PW.SET 007724 4194#
PW.TST 004242 2562 2589#
PW.WAI 004176 2495 2561#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-16
STORE.M80 CROSS REFERENCE TABLE
P.00 = 000000 166# 5795 5801 5804 7411 7425 7427 7434 7466 7476 7485
P.02 = 000002 167# 5805 7421 7472
P.04 = 000004 168# 5806 7423 7470 7495
P.06 = 000006 169# 5807 7417 7464 7474 7497
P.10 = 000010 170# 5808 7403 7408 7456 7492
P.12 = 000012 171# 5797 7405 7414 7429 7461 7468 7478 7483
P.14 = 000014 172# 7480
P.16 = 000016 173#
P.20 = 000020 174#
P.22 = 000022 175#
P.24 = 000024 176#
P.26 = 000026 177#
P.30 = 000030 178#
P.32 = 000032 179# 5809 7459
P.34 = 000034 180# 5810 7419
P.36 = 000036 181#
P.40 = 000040 182#
P.42 = 000042 183#
P.44 = 000044 184#
P.46 = 000046 185#
P16 014303 3097 5201 5215 5698 5857 6068# 6503
P16LP 014316 6078# 6081
P16. 014300 3595 3643 3791 5227 6067#
P18 014402 3948 6129#
P36 014336 2839 2844 2919 6094#
P36L2 014371 6120# 6124
P36RH 014356 6108# 6137
P36. 014333 2727 2922 3957 6093#
P8BIT 014240 2736 2741 6036#
P8BITA 014270 3200 3593 4010 5206 5769 5774 6058#
P8BIT1 014241 6037# 6061
P8CRLF 007400 3103 3208 4010# 5779
P8LP 014253 6044# 6047
P8.TMP 020122 6059 7579#
QMXFR 012373 4640 4952 5249#
QPW 017745 2482 7542#
QQLOOP 011520 4885# 4893
QTXFR 017264 5249 7470#
QUES = 000077 144# 7080
QUO = 000042 124#
QXFR 017135 4944 7421#
Q.DEN 017701 4448 7535#
Q.OUT = 000000 115# 1970
Q.RH 017650 4398 4432 7532#
Q.SLV 017710 4478 7536#
Q.TCU 017672 4439 7534#
Q.UBA 017641 4387 4421 7531#
Q.UNIT 017662 4406 7533#
Q.1 = 000000 888# 889# 890# 3967# 4724# 4725# 4726# 5549# 5789# 5795# 5797# 5801# 7401#
7402# 7403# 7405# 7408# 7409# 7411# 7412# 7413# 7414# 7417# 7419# 7421# 7422#
7423# 7424# 7425# 7426# 7427# 7429# 7434# 7454# 7455# 7456# 7457# 7459# 7461#
7464# 7465# 7466# 7467# 7468# 7470# 7471# 7472# 7473# 7474# 7475# 7476# 7478#
7480# 7483# 7485# 7492# 7493# 7495# 7496# 7497# 7498#
Q.2 = 000000 888# 889# 890# 3967# 4724# 4725# 4726# 5549# 5789# 5795# 5797# 5801# 7401#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-17
STORE.M80 CROSS REFERENCE TABLE
7402# 7403# 7405# 7408# 7409# 7411# 7412# 7413# 7414# 7417# 7419# 7421# 7422#
7423# 7424# 7425# 7426# 7427# 7429# 7434# 7454# 7455# 7456# 7457# 7459# 7461#
7464# 7465# 7466# 7467# 7468# 7470# 7471# 7472# 7473# 7474# 7475# 7476# 7478#
7480# 7483# 7485# 7492# 7493# 7495# 7496# 7497# 7498#
Q.3 = 000377 888# 889# 890# 3967# 4724# 4725# 4726# 5549#
Q.4 = 000007 888# 889# 890# 3967# 4724# 4725# 4726# 5549#
RAG 017631 6478 7529#
RAMMER 000404 862# 871
RAMST = 020000 40# 637 641 999 2452 4694 7555
RAMXCT 005573 3214# 3231 3260
RAMX1 020054 1785 7569#
RAMX2 020062 7570#
RBOUT = 000177 135# 1994
RCCMD 006366 1738 3579#
RCINT 006370 3581# 3783 5081 5569
RCLP 006374 3583# 3618
RCNOP 006431 3590 3607#
RDATP 015475 2909 6720#
RDATT 015470 2705 2822 6712#
RDLST 007010 3734 3806#
RDYMS 003274 2103 2115#
RD.EXM 011461 4865# 4931
READC 006331 3556# 3584 3638 3743 3764 3771 3790 4241 5992
READ.T= 000071 201# 4608 4639 4951 5047
RECVR 013666 5855#
REFERR= 000101 51# 1131 5751
REINI 000600 880 920 963 999# 1007 1333 1915 2104 2455 5782 6483 6486 6505
REMARG 001652 1451 1474#
REMAR1 001675 1477 1487#
REMCTL= 000203 63# 710 722 895 1566 1589 1856 2316 2353 2415
REMDAT= 000202 64# 725 1570 1594 1869 2322 2357
RESET = 000100 50# 1835 3295 3912 3964 5861
RETRY. 017325 4688 7481#
RHBASE 020242 4653 4721 4845 5334 7633#
RHSAVE 021327 5888 5933 5936 5941 5948 5959 7713#
RH.EXE 013600 5801# 5875 5954
RH.LP 013744 5889# 5908
RH.TST 013561 5795# 5842
RM100 020172 2710 2733 4562 4585 5026 5876 5898 5904 7615#
RNCOM 015251 6535# 6542
RNFLG 020165 5711 6535 7611#
RN. 017575 5718 7525#
ROMMSG 000350 841# 842
RPAREN= 000051 126#
RPBUFS 020207 4379 6333 6350 6385 6420 7620#
RPCMD 010124 1657 4301#
RPCNTR 020160 4303 4333 4339 7606#
RPEND 020157 961 1952 2463 3683 3694 4306 4323 7605#
RPFOO 010273 4304 4334 4341 4376#
RPGO 010265 4360 4367#
RPINCB 014716 6343# 6381
RPINI 020401 1005 4376 7698#
RPLST 020211 1006 1433 1441 1480 4328 4352 4377 7621#
RPNEW 010267 1431 4374#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-18
STORE.M80 CROSS REFERENCE TABLE
RPTBFI 020432 4378 7699#
RPTON 020213 1003 1172 4308 4345 6304 7622#
RPTPAR 013421 1096 5724#
RPTRTN 010166 1174 4323# 4336 4342
RP.OUT 010233 4325 4344#
RP0 010130 4303# 4321
RP1 010151 4301 4311#
RP2 010175 4309 4328#
RP4 010240 4331 4348#
RRARG 015126 1461 6478#
RTNDIS 015061 587 6443#
RUB 003203 1995 2063#
RUNFP = 000300 44# 1106 1325 3432 3923 4038
R.BUSY= 000102 54# 5747
R.RESE= 000102 55#
SAVLST 013606 5804# 5886 5957
SCCMD 005771 1793 3341#
SCDIS 006017 3341 3357#
SCEADR 020344 5822 5836 5856 5919 7685#
SCECOD= 000000 877 878 5728 5784 7685 7711
SCE.GO 014000 5900 5912#
SC.OFF 021326 3351 3354 3357 5729 7712#
SC.TOF 006011 3346 3353#
SECRET 020256 1331 7651#
SEEPAG 011605 4914 4926#
SEMIC = 000073 120# 6580
SEPCHR 015641 1403 4519 6328 6839#
SEPYS 015643 6841# 6844 6849
SETDIS 016115 7001# 7146
SETM 016112 6955 6965 6971 6988 7000#
SETM0 016005 6915 6947 6959#
SETM1 015775 2620 6948 6953#
SETM2 016070 1914 2210 2611 4155 4172 6928 6992#
SETM2X 016105 6994 6998#
SETM3 016027 2648 6969#
SETM4 016037 2124 3419 6976# 7184 7250 7262 7271 7284
SETOUT 016773 7324 7367#
SETRN 015241 3446 3942 6530#
SETUSE 003354 2132 2147# 4086 4120 4167
SEVEN = 000007 155#
SHCMD 007601 1771 4115#
SHRGO 014542 6240#
SHRTAD 020235 6016 6017 7632#
SHR24 014542 3850 6239#
SHR36 014540 5140 5524 5937 5942 6238# 6363
SICMD 006142 1708 3432#
SIX = 000006 154#
SIXTN 010537 4469 4488#
SKP.GO 020144 5246 7477 7598#
SKP.TA= 000031 196# 4625
SKP2 002764 1929 1940#
SKP6 003001 1944 1952#
SKP8 003030 1957 1967#
SLASH = 000057 140# 2071 2738 2921 3099 3201 3594 3792 5203
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-19
STORE.M80 CROSS REFERENCE TABLE
SMCMD 007150 1710 3890#
SMERR 017535 3930 7520#
SMFINI 007325 1837 3932 3963# 5981
SMPAR = 000100 49# 854 5737 5767
SMSTS = 000301 46# 1234 6521
SMVER 007254 3926 3934#
SM1 007161 3890 3898# 4592
SM1.5 007164 1340 3896 3899#
SOFTER 013635 5755 5822#
SP =%000010 637 999 2110 2111 2452 4694 6244 6245 6248 6249
SPACE = 000040 139# 2744 3644 3645 3951 3952 5209 5211 5218 5220 5770 5775
STAR = 000052 123#
STATE 020360 1272 1281 3408 6509 6561 6567 7008 7693#
STATEM 015312 1843 4122 6531 6539 6551 6560# 6936
STBIT = 000004 107# 1279 6530
STCK.Y 016670 7307 7312#
STCMD 007457 1702 4056#
STINT 007470 4062# 4555
STMSK = 000373 106# 1274
STPPD 020162 1948 2214 7608#
STRCMP 015676 4459 4470 6882# 6890
STREND 015712 6884 6892#
SYNC = 000001 116# 7074 7075 7142 7154 7183 7266 7267 7275 7276
SYSBUF 021125 7309 7329 7709#
SYSEND 021325 7312 7710#
SYSIN 021121 7304 7310 7347 7359 7366 7707#
SYSOUT 021123 7296 7330 7367 7708#
SYSUP 000531 957#
SYSUP1 000533 958# 980
S16CHK 010476 4460 4468#
S36BL 014566 6264# 6281
S36LP 014572 6269# 6275
TAB = 000011 138#
TAPDEV 011652 4939 4951#
TAPEUN 020137 4446 4646 7458 7494 7597#
TARG1 015444 1602 6013 6392 6675# 6687 6714 6754 6790 6821
TARG2 015440 6618 6643 6670#
TECMD 005735 1697 3315#
TEDIS 005761 3315 3331#
TEN = 000012 158#
TENCHR 003515 2087 2231#
THREE = 000003 151#
TMPBF2 020073 3767 3776 4059 4073 4075 4551 6171 6184 6195 7572#
TMPB2 020100 2823 2827 2843 3565 3570 3607 3724 3746 3766 3775 4243 4393 4403
4412 4427 4437 4445 4484 4503 5226 5995 6067 7573#
TPCMD 006027 1699 3367#
TPDIS 006047 3367 3381#
TP.SET 010751 3377 4599#
TR 006561 3684# 3696
TRAPEN 020355 1839 2158 2283 3381 3557 4599 4834 7690#
TRCMD 006541 1736 3675#
TRLP 006577 3686 3691#
TRPDEF= 000020 93# 883 4598
TR1 006555 3675 3682#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-20
STORE.M80 CROSS REFERENCE TABLE
TSKGO 016232 7051 7059#
TSKGO1 016251 7069 7071#
TSKLP 016220 7032 7049#
TSK2TS 016254 7073# 7093
TTCMD 007673 1777 4167#
TTERMS 004066 2429 2437#
TTERMZ 004066 2443#
TTERR 004024 1859 2407#
TTERR1 004046 2410 2423#
TTM 017423 2447 7508#
TTOCOM 003754 2324 2368#
TTYSW = 000300 45# 671
TWO = 000002 150#
T80DT 020275 784 795 1426 1475 3253 3258 3899 3914 6027 6029 7675#
U 003343 2141 2144# 4095 4169
UBANUM 020254 4656 4717 4841 5338 5364 7639#
UBA.RD 013553 5789# 5866 5926
UCHR = 000125 146# 1962
UMCMD 007771 1691 4230#
UNITNM 020132 4413 4573 7404 7410 7596#
UPARR = 000136 148# 1933 1961 2453
UP.LO 003153 2002 2037# 2563 4204
USER 003236 1924 2086#
USRMD 020156 1013 1154 1921 2117 2204 2417 2431 6976 7602#
VDCMD 011765 1783 5034#
VERCNT 020253 5090 5135 7638#
VERCRA 012015 5038 5060#
VERLST 012171 5085 5147#
VERRPT 012260 5116 5196#
VTCMD 012000 1779 5046#
V.BCLP 013302 5658# 5674
V.BLP 012101 5095# 5128 5142
V.BLP1 012104 5097#
V.DONW 012037 5070# 5125
V.ERR 012132 5108 5116#
V.GO 012047 5068 5078#
V.NXME 012071 5088# 5137
V.NXT 012150 5135#
V.VER 013247 5571 5642#
WAITLP 012602 5399# 5414
WATCHC 020130 1056 1061 1073 7594#
WDATP 015537 4024 6759#
WDATT 015532 2794 2978 6753#
WFNC1 006240 3497# 4257
WFUNC 006232 3492# 3876 4877 4895 4922 5632
WRD.DP 003436 2182 2190#
WRD.PR 003413 2167 2172#
WRD31 003354 2151#
WRD34 016145 6997 7012 7019#
W.CRMZ 013221 5557 5626#
W.LOC 013230 5624 5629#
W.LP 013232 5630# 5634
W0003 = 000112 82# 2240 2376 2665 6777
W0411 = 000110 81# 2239 2375 2664 6773
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-21
STORE.M80 CROSS REFERENCE TABLE
W1219 = 000106 80# 2238 2374 2663 6769
W2027 = 000104 79# 2253 2373 2678 6765
W2835 = 000102 78# 2251 2372 2676 6761
XCTMTA 012365 5246# 5250
XCTNOW 012356 5242# 5247 5253
XFRRT 012445 5299 5309#
XXX230 000372 835 853#
XXX235 000461 864 894#
YSRUN 013413 3434 5713 5718#
ZEROB 020000 7556#
ZEROES 007333 3966# 5594
ZMCMD 010050 1740 4264# 5581
ZM1 010071 4272# 4286
Z.TBUF 016765 3424 7365#
. = 021377 536# 546# 557# 568# 581# 593# 608# 619# 633# 7555# 7556# 7557# 7558#
7559# 7560# 7561# 7562# 7563# 7564# 7565# 7566# 7567# 7568# 7569# 7570# 7571#
7572# 7573# 7574# 7575# 7576# 7577# 7578# 7579# 7580# 7586# 7588# 7589# 7594#
7595# 7596# 7597# 7598# 7599# 7600# 7601# 7602# 7605# 7606# 7607# 7608# 7609#
7610# 7611# 7612# 7613# 7614# 7615# 7616# 7617# 7618# 7619# 7620# 7621# 7622#
7623# 7624# 7625# 7626# 7627# 7628# 7629# 7630# 7631# 7632# 7633# 7634# 7635#
7636# 7637# 7638# 7639# 7647# 7651# 7653# 7654# 7655# 7656# 7658# 7664# 7665#
7673# 7675# 7679# 7680# 7681# 7682# 7683# 7684# 7685# 7686# 7687# 7688# 7689#
7690# 7691# 7692# 7693# 7694# 7695# 7696# 7697# 7698# 7699# 7700# 7701# 7702#
7703# 7704# 7705# 7706# 7707# 7708# 7709# 7710# 7712# 7713#
.ARG1 020223 1409 1507 4194 4513 4518 4520 6310 6329 6576 6892 7627#
.ARG16 014625 6301# 6462
.ARG36 014620 6298# 6464
.CLRRM 015620 6465 6819#
.CRLF 002135 1644# 6461
.DSBAS 000452 890# 4116
.IN = 000333 108# 3229
.MODE0= 000001 99# 2297 6963 6993
.MODE1= 000002 100# 2297 6953 6993
.MODE2= 000004 101# 2181 4171 6999
.MODE3= 000010 102# 1561 2181 2297 2348 4154 6924 6969
.MODE4= 000020 103# 1162 1533 1899 6986
.MOV5B 015365 6460 6614#
.MTBAS 000445 889#
.OUT = 000323 109# 3255
.RET = 000311 110# 3216
.RUN.. 013400 5709# 6463
.SETM1 015760 6918 6945#
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-22
STORE.M80 CROSS REFERENCE TABLE
ARG16 445# 3090 3133 3252 3267 3676 6026
ARG36 455# 2769 2959 3061 3117 3124 4019 4502
BUSRES 320# 2781 2804 2808 2894 2897 2902 3001 3006
CLINE 265#
CLRB 511# 1000 1001 1002 1003 1004 1073 1296 1321 1365 1366 1503 1912 1913 1948
2101 2117 2200 2463 2464 2465 2485 2486 2614 3390 3683 3700 3949 4173 4185
4833 4834 5503 5504 5695 5724 5763 6500 6544 6545 6959 7007 7073
CLRRM 461# 3724 4062 4220 4264 4268 5507 7020
CRLF 440# 848 1021 1963 2051 2728 2747 2845 2923 3307 3596 3656 3692 3802 3958
4011 4528 5228 5858 6504
D 325# 888 889 890 3967 4724 4725 4726 5549
DEPOS 474# 2199 4063 4064 4070 4119 4661 4666 4671 7024
DI. 371# 7402 7409 7412 7413 7422 7424 7426 7455 7457 7465 7467 7471 7473 7475
7493 7496 7498
DI.IND 385# 7404 7410 7418 7420 7458 7460 7477 7494
EI. 357# 5795 5797 5801 7405 7427 7429 7434 7461 7468 7478 7480 7483
ENDCMD 306# 1845 2749 2924 3011 3119 3126 3135 3158 3181 3269 3296 3352 3355 3451
3462 3473 3515 3622 3660 3701 3714 3804 3882 4012 4291 7377
ENDLST 427# 5790 5799 5802 7436 7487 7499
ERRTST 406# 5796 5798 7430 7435 7481 7482 7484 7486
EXAM 467# 1256 1372 2152 2289 2329 3935 3954 4794 4826
INTOFF 249# 918 955 1259 1330 1379 2153 2290 2330 3936 3955 4290 4594 4983 5198
5445 5453 5870 5983
INTON 256# 900 1254 1328 1369 2151 2278 2328 3934 3953 4270 4832 4981 5233 5275
5502 5868 5912
KCHAR 225# 7074 7075
KLINE 241# 2475 2482 2599 2612 7264 7272
LI. 343# 7403 7408 7411 7414 7417 7419 7421 7423 7425 7456 7459 7464 7466 7470
7472 7474 7476 7485 7492 7495 7497
LONG.D 499# 1068 1341 5736
MOV5B 435# 3765 3903 4057 4115 4402 4436 4549 4652 4668 4719 4843 4858 4976 5063
5333 5542 5583 5587 5947
PCHAR 217# 1645 1646 1933 1934 1961 1962 2071 2453 2454 2738 2744 2816 2835 2921
3099 3201 3305 3306 3594 3644 3645 3792 3951 3952 5203 5208 5209 5210 5211
5218 5219 5220 5770 5775 6106 6107
PCRLF 272# 848 1021 1963 2051 2728 2747 2845 2923 3307 3596 3656 3692 3802 3958
4011 4528 5228 5858 6504
PLINE 233# 842 899 919 993 1022 1222 1322 1367 1514 2103 2141 2447 2725 2836
2841 3303 3782 3930 3946 3956 4045 4094 4095 4168 4169 4219 4387 4398 4406
4421 4432 4439 4448 4478 4527 5696 5718 5759 5765 5855 6478 6480 6501 6547
7373 7381 7388
PSLASH 299# 2071 2738 2921 3099 3201 3594 3792 5203
PSPACE 291# 2744 3951 3952 5209 5211 5218 5220 5770 5775
PTAB 285#
RD.REG 482#
RUN.. 450# 2767 3035 3481 3579 3631 3682 3710 3720 3838 4235
SETZM 487#
SSCLK 278#
TSTRDY 492# 2316 2341 2353
TWAIT 392# 7406 7416 7462
UBA. 414# 5789 7401 7454
WAIT 399# 7407 7415 7428 7463 7469 7479
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-23
STORE.M80 CROSS REFERENCE TABLE
ACI 5102 6259 6449
ADC 6695
ADD 770 2247 2383 2672 4031 4563 5099 5346 6256 6446 7029 7219
ADI 1936 6199 6352 6490 6492 6494 6496
ANA 690 693 699 707 752 962 1014 1018 1062 1095 1113 1139 1155 1173 1235
1332 1425 1430 1476 1608 1879 1922 2064 2119 2165 2199 2217 2224 2292 2418
2591 2594 2631 2638 2881 2915 2987 3345 3359 3589 3685 3695 3738 3759 3959
4048 4063 4064 4070 4119 4140 4161 4285 4314 4324 4335 4359 4661 4666 4671
5326 5372 5488 5493 5518 5712 5730 6197 6210 6267 6305 6380 6482 6523 6562
6591 6883 6946 6977 7024 7038 7053 7087 7294 7298 7306 7338 7349 7355
ANI 758 970 974 1030 1036 1050 1070 1079 1089 1107 1132 1274 1279 1304 1326
1466 1555 1567 1590 1858 1864 1870 1893 1899 2096 2181 2194 2297 2316 2341
2353 2408 2423 2647 3285 3288 3301 3322 3325 3332 3376 3382 3433 3569 3636
3911 3925 3987 3995 4004 4040 4247 4364 4874 4913 4920 4930 5073 5096 5111
5173 5224 5290 5468 5560 5576 5611 5741 5749 5753 5773 5778 5934 5964 5997
6315 6431 6740 6993 7009 7044 7064 7226
CALL 663 727 847 906 907 910 959 994 1010 1068 1082 1166 1192 1246 1256
1336 1340 1341 1342 1343 1349 1370 1372 1377 1378 1403 1449 1502 1602 1613
1637 1827 1837 1843 1905 1914 1964 2002 2017 2073 2102 2124 2125 2132 2133
2152 2199 2209 2289 2309 2324 2329 2475 2482 2563 2599 2611 2612 2619 2620
2705 2715 2726 2727 2729 2736 2741 2748 2772 2781 2784 2791 2794 2804 2808
2811 2822 2825 2839 2844 2855 2868 2894 2897 2902 2909 2919 2922 2931 2957
2970 2978 3001 3006 3037 3053 3060 3075 3077 3097 3151 3165 3173 3191 3200
3204 3208 3219 3231 3241 3260 3279 3317 3343 3369 3393 3401 3419 3424 3438
3446 3457 3470 3483 3489 3584 3593 3595 3600 3638 3640 3643 3688 3691 3712
3713 3722 3726 3727 3743 3747 3764 3771 3774 3790 3791 3798 3839 3848 3850
3852 3861 3876 3894 3901 3908 3915 3917 3920 3922 3935 3942 3948 3954 3957
3984 4010 4024 4046 4056 4063 4064 4070 4076 4086 4119 4120 4122 4135 4167
4204 4236 4237 4238 4241 4242 4252 4271 4272 4276 4280 4304 4311 4388 4399
4407 4422 4433 4440 4449 4459 4470 4479 4497 4511 4519 4533 4534 4540 4548
4560 4565 4569 4580 4592 4597 4607 4609 4612 4616 4618 4619 4626 4633 4640
4643 4661 4666 4671 4707 4708 4709 4715 4774 4777 4784 4792 4794 4800 4807
4816 4823 4826 4827 4835 4855 4870 4877 4895 4911 4922 4932 4945 4952 4954
4964 4971 4982 4991 5034 5046 5048 5078 5080 5081 5088 5140 5178 5184 5201
5206 5215 5227 5231 5242 5353 5362 5386 5387 5400 5408 5423 5426 5435 5452
5501 5513 5524 5557 5566 5568 5569 5571 5572 5581 5591 5592 5600 5602 5603
5626 5632 5698 5736 5738 5764 5769 5774 5779 5780 5781 5823 5843 5857 5859
5867 5869 5878 5890 5906 5914 5917 5920 5927 5937 5942 5950 5955 5961 5977
5981 5982 5992 6013 6040 6045 6073 6079 6098 6102 6108 6121 6133 6328 6330
6363 6392 6484 6485 6498 6503 6531 6539 6546 6551 6600 6618 6620 6643 6687
6714 6754 6790 6821 6893 6936 6961 6962 6997 7012 7024 7074 7075 7078 7109
7247 7250 7251 7258 7262 7264 7271 7272 7342
CC 6019
CMA 672 787 1034 1099 1125 1148 1278 1439 2058 2216 3220 3358 3564 3568 3924
4039 4047 4307 4374 5651 5654 5740 5748 5752 5768 5772 5777 6522 6534 6723
6727 6731 6735 6739 7043 7062
CMC 4367 5455
CMP 1040 1204 1290 1390 2568 4680 4689 5107 5115 5673 6001 6005 6649 6886 7240
CNC 1451 6021
CNZ 1042 1071 1115 1141 1329 4341 5116 6629 6928 6948 7339
CP 1237 1243
CPI 830 863 1162 1355 1533 1548 1561 1629 1873 1909 1928 1940 1943 1953 1956
1967 1970 1973 1984 1987 1990 1994 2021 2037 2039 2074 2086 2303 2306 2332
2348 2473 2561 2582 2603 2627 3617 4154 4199 4214 4340 4938 4988 5532 6580
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-24
STORE.M80 CROSS REFERENCE TABLE
6583 6586 6843 6848 6914 6917 6924 7050 7068 7080 7083 7092 7121 7126 7142
7154 7174 7177 7180 7183 7200 7334
CZ 1431 1638 1941 1985 1988 1991 4155 4334 4682 7122
DAD 746 792 808 817 2939 3020 4970 5281 5293 5663 6189 7313
DCR 611 769 796 979 1495 1500 2066 2080 2719 2745 3653 3799 3858 3880 4338
4510 4879 4892 4897 4924 4998 5136 5476 5537 5633 6046 6080 6123 6179 6188
6203 6216 6218 6255 6274 6280 6340 6366 6369 6373 6401 6404 6410 6417 6628
6653 6827 6867 7215 7216 7217 7221
DCX 646 1311 1395 1481 1482 2069 3174 3404 3610 3613 4221 5117 5214 5342 5343
5344 5379 5381 5470 5471 5474 5475 5485 5486 6215 6248 6249 6272 6434 6825
6840
DI 539 620 1255 1371 2279 2325 7346
EI 908 1011 1257 1373 2032 2113 2221 2310 2399 7041 7257 7341
IN 671 724 725 969 973 1029 1033 1069 1078 1088 1106 1131 1234 1325 1554
1566 1589 1854 1856 1869 1892 2091 2316 2341 2353 2643 3432 3563 3567 3923
4038 5747 5751 5767 5771 5776 6521 6722 6726 6730 6734 6738
INR 560 845 1215 1353 1979 2020 2054 2576 2581 2601 3615 3866 4208 4320 4330
5530 5899 5968 6321 7063 7131 7198
INX 549 571 573 584 596 645 744 789 794 810 812 869 870 1202 1212
1213 1214 1347 1388 1400 1401 1415 1435 1437 1508 1544 1586 1606 1627 2005
2110 2111 2173 2174 2197 2569 2717 2718 2737 2742 2941 3023 3111 3140 3737
3758 3770 3824 3835 3854 3855 3856 3871 3873 4206 4207 4349 4351 4781 4909
4927 4996 4997 5071 5098 5106 5122 5186 5296 5310 5383 5384 5411 5491 5558
5574 5609 5659 5661 5664 5902 5974 6003 6163 6165 6176 6178 6244 6245 6246
6322 6336 6345 6346 6347 6387 6399 6400 6413 6416 6428 6429 6433 6453 6524
6563 6633 6634 6651 6652 6671 6673 6676 6678 6698 6725 6729 6733 6737 6762
6766 6770 6774 6798 6802 6806 6810 6841 6866 6888 6889 7022 7031 7059 7116
7117 7193 7214 7220 7322 7358
JC 1194 1262 1337 1461 2768 2854 3036 3086 3164 3189 3277 3315 3341 3367 3675
3721 3890 3982 4131 4190 4389 4400 4423 4434 4441 4451 4538 4567 4578 4593
4801 4824 4946 4972 5035 5049 5125 5128 5533 5844 5915
JM 1283 1356 1501 2010 3739 3760 5538 6411
JMP 540 551 574 587 599 626 835 871 920 1057 1083 1097 1118 1143 1216
1224 1297 1306 1350 1380 1396 1506 1614 1639 1915 2143 2210 2226 2455 2476
2606 2621 2817 2847 2933 3048 3054 3073 3103 3113 3175 3327 3333 3360 3377
3383 3425 3439 3752 3783 3826 3896 3932 3998 4100 4109 4124 4162 4231 4257
4309 4321 4466 4516 4521 4555 4574 4588 4620 4933 4992 5000 5027 5038 5068
5142 5247 5250 5253 5311 5327 5418 5429 5447 5547 5624 5682 5690 5699 5719
5782 5908 5979 5984 6061 6137 6223 6296 6299 6323 6371 6414 6479 6486 6505
6514 6542 6699 6890 6955 6965 6971 6988 7014 7025 7032 7146 7254 7284 7324
7360 7384 7390
JNC 1267 1455 4301 4610 4631 4641 6331 7201
JNZ 649 753 759 774 797 825 831 963 980 1015 1019 1080 1090 1096 1108
1117 1133 1156 1163 1174 1247 1333 1534 1562 1859 1865 1874 1880 1924 1929
1944 1957 1974 2087 2298 2307 2333 2349 2410 2419 2429 2433 2592 2628 2632
2746 2782 2785 2806 2882 2895 2898 2988 3002 3007 3302 3407 3590 3618 3654
3800 3859 3926 4209 4315 4325 4331 4342 4460 4471 4613 4634 4644 4793 4893
4939 4955 4989 4999 5108 5414 5477 5519 5595 5606 5667 5674 5713 5731 6047
6081 6124 6180 6217 6219 6275 6281 6306 6316 6374 6405 6418 6654 6828 6870
6949 7054 7127 7143 7227 7307 7335
JP 2014 2720 3881 4172 4360 4898 5373 5634 6367 6381 7069 7222
JZ 864 914 971 975 1031 1051 1063 1178 1201 1205 1244 1291 1391 1427 1477
1527 1556 1568 1591 1630 1900 1954 1968 1995 2022 2167 2182 2293 2304 2317
2342 2354 2562 2571 2583 2595 2604 2648 2809 2903 3346 3434 3686 3696 3778
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-25
STORE.M80 CROSS REFERENCE TABLE
4141 4286 4336 4785 4914 4931 5137 5174 5561 5577 5613 5742 5755 5824 5900
5969 6204 6370 6402 6483 6581 6584 6587 6844 6849 6884 6915 6918 6947 6994
7051 7081 7084 7088 7093 7175 7178 7181 7184 7241 7299 7350 7356
LDA 795 961 1013 1017 1039 1061 1094 1112 1137 1154 1161 1172 1176 1260 1272
1289 1331 1429 1475 1525 1532 1560 1839 1878 1898 1921 1935 2019 2053 2063
2118 2154 2158 2164 2177 2180 2193 2250 2283 2291 2296 2321 2331 2335 2347
2417 2431 2580 2593 2630 2637 2675 2880 2914 2986 3197 3256 3258 3287 3300
3324 3331 3357 3381 3408 3503 3557 3588 3684 3694 3910 3963 3994 4003 4066
4153 4160 4170 4284 4323 4333 4393 4412 4427 4445 4484 4562 4656 4716 4840
4937 5338 5364 5517 5711 5729 5933 5963 6196 6205 6304 6395 6481 6561 6923
6945 6976 6992 7008 7037 7042 7079 7086 7209 7238 7337
LDAX 862 1199 1389 1605 2714 3879 4246 4986 5095 5105 5114 5123 5205 5345 5371
5467 5472 5487 5492 6000 6004 6175 6631 6648 6760 6764 6768 6772 6776 6796
6800 6804 6808 6812 6882 7114
LHLD 1191 1302 1310 1433 1480 1507 1515 1542 1885 1993 2567 2589 2918 2937 3018
3101 3110 3139 3154 3519 3607 3751 3823 3834 3914 4194 4328 4512 4518 4573
4646 4698 4811 4813 4864 4872 4881 4918 4926 5070 5097 5169 5222 5484 5608
5680 5919 5995 6029 6209 6227 6310 6333 6350 6385 6576 7192 7281 7296 7304
7347
LXI 559 610 637 641 642 674 736 782 799 807 860 861 958 999 1005
1007 1028 1068 1190 1251 1288 1335 1339 1341 1345 1352 1417 1493 1504 1852
1978 2079 2104 2142 2155 2214 2443 2452 2460 2483 2495 2575 2600 2710 2711
2732 2733 2838 2843 2846 2860 2908 2938 2965 3019 3042 3067 3096 3399 3582
3632 3633 3687 3734 3746 3842 3843 3862 3867 3898 3907 3947 4022 4030 4067
4072 4075 4088 4195 4243 4275 4354 4376 4378 4458 4469 4509 4515 4561 4655
4679 4694 4695 4772 4779 4853 4878 4896 4923 4944 4969 4980 4985 5066 5085
5086 5135 5139 5181 5200 5241 5245 5249 5252 5280 5292 5299 5337 5360 5385
5451 5511 5523 5556 5570 5623 5628 5657 5697 5736 5822 5842 5856 5866 5875
5876 5886 5888 5889 5904 5913 5926 5936 5954 5957 5959 5960 6017 6059 6067
6093 6155 6171 6184 6195 6311 6443 6502 6509 6954 6964 6970 6984 6987 6998
7013 7047 7077 7098 7108 7110 7111 7145 7159 7197 7212 7236 7252 7309 7312
7329 7365 7375 7383 7389
MOV 548 570 572 583 595 647 675 678 681 682 685 689 691 692 694
698 706 738 739 740 741 743 751 757 765 786 788 806 809 811
818 868 1035 1038 1049 1188 1273 1275 1277 1295 1303 1305 1313 1354 1411
1414 1416 1434 1436 1440 1459 1465 1467 1483 1485 1494 1496 1543 1585 1626
1855 1863 1871 1881 1894 1904 1923 2004 2008 2012 2016 2072 2156 2162 2175
2179 2192 2198 2215 2220 2223 2295 2302 2336 2356 2359 2407 2444 2449 2590
2602 2716 2864 2870 2940 2942 2969 2972 3022 3024 3102 3153 3155 3169 3195
3228 3243 3257 3281 3286 3319 3323 3344 3371 3405 3492 3494 3532 3534 3556
3583 3592 3608 3611 3616 3635 3648 3651 3736 3757 3769 3870 3872 3986 3993
4068 4139 4198 4213 4313 4319 4329 4348 4350 4358 4365 4564 4658 4865 4867
4873 4875 4885 4887 4889 4891 4912 4919 4921 4929 5072 5100 5101 5103 5110
5113 5172 5223 5225 5283 5284 5286 5291 5295 5297 5340 5347 5366 5377 5378
5380 5382 5396 5397 5412 5441 5442 5531 5559 5575 5610 5630 5650 5652 5653
5655 5658 5660 5665 5687 5693 5750 5897 5935 5940 5967 5996 5998 6060 6162
6164 6177 6186 6187 6206 6208 6212 6214 6242 6253 6257 6258 6260 6266 6269
6271 6313 6317 6335 6338 6339 6351 6353 6379 6386 6396 6397 6409 6426 6430
6447 6448 6450 6452 6454 6471 6512 6578 6670 6672 6675 6677 6696 6842 6865
6912 7023 7030 7049 7061 7194 7199 7210 7213 7237 7245 7282 7297 7305 7314
7321 7332 7333 7340 7348 7354
MVI 644 715 721 783 785 853 894 896 957 1323 1346 1348 1375 1545 1831
1834 1842 2171 2188 2203 2232 2242 2252 2259 2265 2323 2367 2378 2386 2389
2396 2414 2427 2445 2657 2667 2677 2684 2690 2703 2712 2734 2778 2797 2800
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-26
STORE.M80 CROSS REFERENCE TABLE
2862 2875 2887 2967 2975 2981 2993 3039 3044 3047 3064 3069 3072 3093 3156
3177 3179 3216 3229 3255 3353 3391 3420 3436 3449 3458 3500 3511 3525 3544
3546 3560 3679 3729 3789 3796 3844 3849 3864 4026 4029 4033 4087 4090 4121
4196 4222 4230 4233 4240 4254 4265 4277 4464 4475 4529 4584 4587 4596 4598
4608 4615 4625 4639 4663 4678 4688 4789 4851 4856 4869 4883 4903 4951 4984
5025 5037 5047 5051 5089 5461 5466 5508 5546 5565 5629 5672 5681 5684 5737
5831 5877 5991 6043 6077 6119 6238 6295 6298 6301 6356 6470 6472 6510 6513
6530 6538 6550 6627 6646 6824 6826 6932 6953 6960 6963 6969 6986 6996 6999
7011 7048 7060 7112 7232 7248 7323
NOP 537 538 4035 4036
ORA 648 700 708 819 1177 1200 1280 1314 1526 1632 1857 2172 2190 2195 2432
3170 3293 3406 3558 3996 4248 4657 5339 5365 5413 5666 5688 5754 5965 6511
6566 6896 7315
ORI 701 709 846 1484 7070
OUT 659 702 710 719 722 854 895 897 905 1282 1570 1571 1575 1594 1826
1832 1835 1840 2234 2236 2237 2238 2239 2240 2243 2248 2251 2253 2257 2261
2266 2267 2284 2322 2357 2360 2368 2370 2371 2372 2373 2374 2375 2376 2379
2384 2387 2391 2397 2398 2415 2428 2659 2661 2662 2663 2664 2665 2668 2673
2676 2678 2682 2686 2691 2692 2704 2723 2776 2779 2798 2802 2871 2876 2889
2912 2973 2976 2982 2996 3178 3180 3295 3392 3395 3409 3437 3448 3450 3459
3461 3493 3495 3498 3501 3504 3512 3514 3526 3528 3533 3535 3538 3539 3540
3542 3545 3547 3549 3559 3561 3573 3912 3964 4027 4032 4091 4108 4278 4600
4866 4868 5726 5832 5861 6568 6761 6765 6769 6773 6777 6797 6801 6805 6809
6813 7010 7380 7387
PCHL 1182 1469 1516 1886 2114 2944 3026 4368 4699 5302 6125 6228 6458
POP 561 612 804 823 829 843 1043 1072 1116 1142 1167 1242 1468 1486 1487
1529 1540 1547 1569 1574 1593 1644 2024 2028 2029 2030 2031 2105 2106 2107
2108 2109 2202 2448 3203 3218 3232 3490 3601 3602 3646 3777 3797 4244 4465
4468 4662 4664 4683 4775 4805 4908 4915 5180 5185 5188 5189 5232 5234 5235
5309 5348 5363 5401 5409 5410 5424 5427 5436 5456 5457 5458 5459 5460 5529
5573 5635 5683 5685 5692 5709 5715 5896 5907 5962 5978 5993 6020 6044 6049
6050 6051 6052 6078 6083 6084 6085 6086 6109 6110 6111 6112 6118 6120 6168
6182 6264 6285 6286 6287 6288 6302 6344 6354 6357 6456 6457 6473 6553 6593
6605 6614 6621 6622 6742 6778 6814 6819 6853 6869 6871 7021
PUSH 558 586 598 609 621 622 623 624 772 773 781 1041 1067 1114 1140
1165 1236 1418 1450 1474 1479 1524 1541 1553 1588 1853 2166 2446 3199 3215
3227 3488 3598 3599 3642 3773 4234 4355 4457 4651 4660 4681 4696 4773 4776
4854 4910 5166 5167 5170 5182 5196 5197 5230 5276 5277 5278 5285 5300 5332
5361 5399 5406 5407 5422 5425 5434 5512 5567 5622 5627 5710 5887 5903 5905
5958 5975 5976 5990 6018 6036 6037 6038 6039 6058 6068 6069 6070 6071 6094
6095 6096 6097 6129 6130 6131 6132 6169 6202 6241 6250 6251 6262 6265 6319
6343 6349 6444 6445 6549 6575 6616 6617 6721 6759 6795 6839 6864 6868 7019
RAL 683 684 1261 1266 1460 3282 3283 3284 3320 3321 3372 3373 3374 3375 3988
3989 3990 3991 5124 5127
RAR 676 677 679 680 4005 4006 4007 4008 4886 4890 5288 5289 6213 6270
RC 4408 4480 4498 5349 6894
RET 562 613 1315 1488 1510 1530 1551 1572 1576 1595 1647 1845 2033 2045 2059
2081 2127 2269 2311 2400 2420 2450 2466 2497 2585 2615 2694 2749 2828 2924
3011 3079 3119 3126 3135 3158 3181 3209 3221 3233 3245 3261 3269 3296 3304
3308 3352 3355 3410 3451 3462 3473 3515 3550 3575 3622 3660 3701 3714 3804
3882 3965 4012 4049 4146 4156 4175 4223 4291 4346 4380 4414 4486 4505 4586
4601 4672 4710 4722 4817 4830 4836 4846 4916 4947 4956 5190 5236 5243 5354
5367 5388 5462 5478 5494 5615 5636 5675 5716 6006 6022 6030 6053 6087 6113
6289 6421 6435 6474 6526 6536 6554 6569 6594 6606 6625 6635 6655 6680 6743
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-27
STORE.M80 CROSS REFERENCE TABLE
6779 6815 6829 6854 6873 6897 6938 7002 7100 7132 7202 7265 7273 7368 7377
RLC 2159 2160 2161 4394 4395 4428 4429
RM 2038
RNC 4953 6697
RNZ 1549 1910 2075 2097 2916 4077 4690 5074 5402 5428 5489 6002 6650 6887 6978
RP 2040
RRC 766 767 768 844 1037 2178 2191 3649 3650
RST 842 848 899 900 918 919 955 993 1000 1001 1002 1003 1004 1021 1022
1073 1222 1254 1259 1296 1321 1322 1328 1330 1365 1366 1367 1369 1379 1503
1514 1645 1646 1912 1913 1933 1934 1948 1961 1962 1963 2051 2071 2101 2103
2117 2141 2151 2153 2200 2278 2290 2328 2330 2447 2453 2454 2463 2464 2465
2485 2486 2614 2725 2728 2738 2744 2747 2767 2769 2816 2835 2836 2841 2845
2921 2923 2959 3035 3061 3090 3099 3117 3124 3133 3201 3252 3267 3303 3305
3306 3307 3390 3481 3579 3594 3596 3631 3644 3645 3656 3676 3682 3683 3692
3700 3710 3720 3724 3765 3782 3792 3802 3838 3903 3930 3934 3936 3946 3949
3951 3952 3953 3955 3956 3958 4011 4019 4045 4057 4062 4094 4095 4115 4168
4169 4173 4185 4219 4220 4235 4264 4268 4270 4290 4387 4398 4402 4406 4421
4432 4436 4439 4448 4478 4502 4527 4528 4549 4594 4652 4668 4719 4832 4833
4834 4843 4858 4976 4981 4983 5063 5198 5203 5208 5209 5210 5211 5218 5219
5220 5228 5233 5275 5333 5445 5453 5502 5503 5504 5507 5542 5583 5587 5695
5696 5718 5724 5759 5763 5765 5770 5775 5855 5858 5868 5870 5912 5947 5983
6026 6106 6107 6478 6480 6500 6501 6504 6544 6545 6547 6959 7007 7020 7073
7373 7381 7388
RZ 1609 1633 1971 2065 2120 2205 2218 2225 2474 2639 2812 3171 3689 4041 4200
4215 4684 5437 7039 7155 7295 7316
SHLD 1006 1009 1252 1312 1409 1441 1509 1546 2006 2070 2461 2462 2484 2496 2570
2866 3112 3141 3214 3472 3744 3825 3836 3899 4073 4352 4377 4379 4513 4520
4606 4665 4706 4780 4782 4812 4814 4928 5067 5079 5183 5187 5226 5444 5612
5642 5643 5644 5646 5647 5648 5686 5836 6016 6157 6167 6190 6329 6420 6892
6985 7001 7099 7160 7195 7253 7310 7330 7359 7366 7367 7376
STA 784 1056 1100 1126 1149 1281 1324 1376 1426 1550 1937 1952 2023 2055 2057
2067 2204 2231 2584 2656 2858 2892 2963 2999 3040 3045 3065 3070 3094 3157
3196 3217 3244 3294 3351 3354 3421 3422 3423 3565 3570 3680 3730 3865 4092
4145 4147 4255 4266 4303 4306 4308 4339 4345 4375 4396 4413 4430 4446 4476
4485 4530 4585 4599 4717 4790 4841 4852 4857 4904 5026 5061 5090 5246 5509
5631 5689 5694 5898 5941 5966 6303 6499 6535 6567 6913 6982 6983 7000 7045
7071 7097 7249 7283
STAX 3609 3612 3868 4205 4250 4987 5469 5473 6359 6398 6412 6427 6432 6632 6724
6728 6732 6736 6741 7115
STC 3931 4366 4531 4806 5331 5454 6011 6604 6693
SUB 4089
SUI 2009 2013 2044 4171 6314 6318
XCHG 745 747 791 793 816 822 1412 1445 1624 2739 2743 2865 2867 2943 3025
3875 3877 4356 5213 5216 5298 5662 5671 6015 6156 6455 6645 6690 6823 7303
7320
XRA 655 737 904 1187 1438 1825 1938 1949 1965 2056 2235 2369 2660 2722 2775
2857 2891 2911 2962 2998 3350 3394 3447 3460 3497 3513 3527 3537 3548 3572
3581 4107 4302 4305 4344 4504 4884 5395 5446 5725 5860 6185 6334 6368 6533
6541 6692 7096 7379 7386
XTHL 547 550 569 582 585 594 597 1584 1587 1601 1603 1623 6012 6014 6161
6240 6247 6391 6393 6520 6525 6560 6564 6615 6624 6642 6644 6686 6689 6713
6715 6753 6755 6789 6791 6820 6822 6863 6872
.ADDR 842 876 879 880 881 899 911 912 919 993 1022 1222 1256 1322 1367
1372 1514 1657 1659 1661 1663 1665 1668 1670 1672 1674 1676 1679 1681 1683
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-28
STORE.M80 CROSS REFERENCE TABLE
1685 1687 1691 1693 1695 1697 1699 1702 1704 1706 1708 1710 1713 1715 1717
1719 1721 1725 1727 1729 1731 1733 1736 1738 1740 1742 1744 1747 1749 1751
1753 1755 1759 1761 1763 1765 1767 1769 1771 1773 1775 1777 1779 1783 1785
1787 1789 1791 1793 1809 1810 1811 1812 2103 2141 2152 2199 2289 2329 2447
2475 2482 2599 2612 2706 2725 2770 2773 2792 2795 2823 2826 2827 2836 2841
2932 2946 2947 2948 2949 2958 2960 2979 3028 3029 3030 3031 3062 3076 3078
3091 3118 3125 3134 3253 3268 3303 3677 3724 3766 3767 3775 3776 3782 3840
3904 3905 3930 3935 3946 3954 3956 4020 4045 4058 4059 4062 4063 4064 4070
4094 4095 4116 4117 4119 4168 4169 4219 4220 4264 4268 4273 4387 4398 4403
4404 4406 4421 4432 4437 4438 4439 4448 4478 4503 4527 4550 4551 4653 4654
4661 4666 4669 4670 4671 4720 4721 4794 4826 4828 4829 4844 4845 4859 4860
4977 4978 5064 5065 5315 5316 5317 5318 5319 5320 5321 5322 5334 5335 5507
5543 5544 5584 5585 5588 5589 5593 5594 5604 5605 5696 5718 5759 5765 5796
5798 5855 5948 5949 6027 6460 6461 6462 6463 6464 6465 6478 6480 6501 6547
7020 7024 7264 7272 7373 7381 7388 7404 7406 7407 7410 7415 7416 7418 7420
7428 7430 7435 7458 7460 7462 7463 7469 7477 7479 7481 7482 7484 7486 7494
.ASCII 7506 7510 7540 7542 7544
.ASCIZ 841 1817 2115 2144 3662 3663 3664 3665 4487 4488 5815 5816 7504 7505 7508
7509 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525
7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7546
.BLKB 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570
7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7586 7588 7589 7594 7595
7596 7597 7598 7599 7600 7601 7602 7605 7606 7607 7608 7609 7610 7611 7612
7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627
7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7647 7651 7653
7654 7655 7656 7658 7664 7665 7673 7675 7679 7680 7681 7682 7683 7684 7685
7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700
7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7712 7713
.BYTE 848 877 878 882 883 884 885 886 887 888 889 890 891 892 1000
1001 1002 1003 1004 1021 1073 1296 1321 1365 1366 1503 1645 1646 1656 1658
1660 1662 1664 1667 1669 1671 1673 1675 1678 1680 1682 1684 1686 1690 1692
1694 1696 1698 1701 1703 1705 1707 1709 1712 1714 1716 1718 1720 1724 1726
1728 1730 1732 1735 1737 1739 1741 1743 1746 1748 1750 1752 1754 1758 1760
1762 1764 1766 1768 1770 1772 1774 1776 1778 1782 1784 1786 1788 1790 1792
1794 1844 1912 1913 1933 1934 1948 1961 1962 1963 2051 2071 2101 2117 2126
2200 2453 2454 2463 2464 2465 2485 2486 2614 2728 2738 2744 2747 2753 2754
2755 2756 2757 2758 2759 2760 2767 2769 2781 2804 2808 2816 2835 2845 2894
2897 2902 2921 2923 2959 3001 3006 3035 3061 3090 3099 3117 3124 3133 3201
3252 3267 3305 3306 3307 3390 3402 3481 3579 3594 3596 3631 3644 3645 3656
3676 3682 3683 3692 3700 3710 3720 3724 3748 3749 3765 3792 3802 3806 3807
3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3838 3851 3903
3921 3949 3951 3952 3958 3967 4011 4019 4057 4062 4115 4123 4173 4185 4220
4235 4264 4268 4402 4436 4502 4528 4549 4652 4668 4719 4724 4725 4726 4833
4834 4843 4858 4976 5063 5141 5147 5148 5149 5150 5151 5152 5153 5154 5155
5156 5157 5203 5208 5209 5210 5211 5218 5219 5220 5228 5333 5503 5504 5507
5525 5542 5549 5583 5587 5695 5724 5763 5770 5775 5789 5790 5795 5796 5797
5798 5799 5801 5802 5804 5805 5806 5807 5808 5809 5810 5811 5858 5938 5943
5947 6026 6041 6042 6074 6075 6099 6100 6106 6107 6134 6135 6364 6500 6504
6532 6540 6544 6545 6552 6937 6959 7007 7020 7073 7074 7075 7266 7267 7268
7269 7270 7275 7276 7277 7278 7279 7401 7402 7403 7404 7405 7406 7407 7408
7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423
7424 7425 7426 7427 7428 7429 7430 7434 7435 7436 7454 7455 7456 7457 7458
7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473
7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7492
VER 5.2 KS10 CONSOLE PROGRAM CROSS - MICRO PROCESSOR ASSEMBLER 6(31) 5-JAN-81 09:51 PAGE 201-29
STORE.M80 CROSS REFERENCE TABLE
7493 7494 7495 7496 7497 7498 7499 7507 7511 7541 7543 7545
.END 7716
.ENDC 1000 1001 1002 1003 1004 1073 1296 1321 1365 1366 1503 1805 1813 1912 1913
1948 2101 2117 2200 2463 2464 2465 2485 2486 2614 3390 3683 3700 3949 4173
4185 4833 4834 5503 5504 5695 5700 5724 5761 5763 5985 6500 6544 6545 6959
7007 7073 7714
.IF 1000 1001 1002 1003 1004 1073 1296 1321 1365 1366 1503 1799 1808 1912 1913
1948 2101 2117 2200 2463 2464 2465 2485 2486 2614 3390 3683 3700 3949 4173
4185 4833 4834 5503 5504 5505 5695 5724 5728 5763 5784 6500 6544 6545 6959
7007 7073 7711
.IFF 1000 1001 1002 1003 1004 1073 1296 1321 1365 1366 1503 1912 1913 1948 2101
2117 2200 2463 2464 2465 2485 2486 2614 3390 3683 3700 3949 4173 4185 4833
4834 5503 5504 5695 5724 5763 6500 6544 6545 6959 7007 7073
.IFT 1000 1001 1002 1003 1004 1073 1296 1321 1365 1366 1503 1912 1913 1948 2101
2117 2200 2463 2464 2465 2485 2486 2614 3390 3683 3700 3949 4173 4185 4833
4834 5503 5504 5695 5724 5763 6500 6544 6545 6959 7007 7073
.IIF 877 878 7504 7685
.LIST 35 888 889 890 1000 1001 1002 1003 1004 1073 1296 1321 1365 1366 1503
1912 1913 1948 2101 2117 2200 2463 2464 2465 2485 2486 2614 3390 3683 3700
3949 3967 4173 4185 4724 4725 4726 4833 4834 5503 5504 5549 5695 5724 5763
6500 6544 6545 6959 7007 7073
.MACRO 217 225 233 241 249 256 265 272 278 285 291 299 306 320 325
343 357 371 385 392 399 406 414 427 435 440 445 450 455 461
467 474 482 487 492 499 511
.NLIST 34 888 889 890 1000 1001 1002 1003 1004 1073 1296 1321 1365 1366 1503
1912 1913 1948 2101 2117 2200 2463 2464 2465 2485 2486 2614 3390 3683 3700
3949 3967 4173 4185 4724 4725 4726 4833 4834 5503 5504 5549 5695 5724 5763
6500 6544 6545 6959 7007 7073
.RADIX 165 189 888 889 890 1256 1372 2152 2199 2289 2316 2329 2341 2353 3935
3954 3967 4063 4064 4070 4119 4661 4666 4671 4724 4725 4726 4794 4826 5146
5158 5549 5789 5790 5795 5796 5797 5798 5799 5801 5802 7024 7401 7402 7403
7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418
7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7434 7435 7436
7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468
7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483
7484 7485 7486 7487 7492 7493 7494 7495 7496 7497 7498 7499
.SBTTL 30 85 113 212 531 532 629 666 730 997 1185 1227 1383 1650 1797
1820 1848 2229 2272 2403 2698 2699 2763 2850 2927 2952 2953 3014 3033 3057
3058 3082 3108 3115 3122 3128 3137 3146 3160 3184 3236 3248 3263 3272 3311
3335 3363 3386 3413 3428 3442 3453 3465 3476 3577 3625 3668 3704 3716 3821
3829 3830 3885 3971 4015 4052 4082 4102 4111 4127 4165 4179 4226 4260 4294
4382 4417 4524 4558 4604 4702 4729 4849 4959 5020 5029 5041 5055 5256 5497
5704 6468 6476 6857 6875 6941 7135 7163 7371 7394 7439 7550
.TITLE 1815
ERRORS DETECTED: 0
*FOR22.DAT,KNS10.PNT/M80/OCT/CRF/EQ:PASS2:SCECOD=CONDEF.M80,CHKSMS.M80,HCORE.M80,CMDS.M80,SUBRTN.M80,DR.M80,MSG.M80,STORE.M80
RUN-TIME: 10 20 3 SECONDS
CORE USED: 21K
READ I/O 0
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
!R DATA 28 ! R DATA 29 !! R DATA 30 ! R DATA 31 ! R DATA 32 !! R DATA 33 ! R DATA 34 ! R DATA 35 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
READ I/O 1
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
!R DATA 20 ! R DATA 21 !! R DATA 22 ! R DATA 23 ! R DATA 24 !! R DATA 25 ! R DATA 26 ! R DATA 27 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
READ I/O 2
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
!R DATA 12 ! R DATA 13 !! R DATA 14 ! R DATA 15 ! R DATA 16 !! R DATA 17 ! R DATA 18 ! R DATA 19 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
READ I/O 3
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
!R DATA 4 ! R DATA 5 !! R DATA 6 ! R DATA 7 ! R DATA 8 !! R DATA 9 ! R DATA 10 ! R DATA 11 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
READ I/O 100
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! REC PE ! UBA3 PE !! SPARE ! CRAM ! MEM !! DP PARITY ! CRA PARITY ! UBA2 PE !
! L ! L !! ! PARITY ERR ! PARITY ERR !! ERR L ! ERR L ! L !
! ! !! L ! L ! L !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
READ I/O 101
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! MMC REF !
! PI REQ 1 ! PI REQ 2 !! PI REQ 3 ! PI REQ 4 ! PI REQ 5 !! PI REQ 6 ! PI REQ 7 ! ERR B !
! ! !! ! ! !! ! ! H !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
READ I/O 102
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! R AC LO ! R RESET !! R MEM BUSY ! R I/O BUSY ! R BAD DATA !! R COM ADR ! R I/O DATA ! R DATA !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
READ I/O 103
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! UBA1 PE ! UBA4 PE !! R PAR RIGHT ! R PAR LEFT ! R DATA 0 !! R DATA 1 ! R DATA 2 ! R DATA 3 !
! L ! L !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
READ I/O 300
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! CTY ! CTY CHAR !! KLINIK ! KLINIK ! DPM !! RUN (1) ! EXECUTE ! CONTINUE !
! BIT # ! LENGTH !! BIT # ! LENGTH ! HALT LOOP !! H ! H ! H !
! (SW) ! (SW) !! (SW) ! (SW) ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
READ I/O 301
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! 10 ! NXM !! SPARE ! BUS ! PE (1) !! CONSOLE ! BOOT ! DATA ACK !
! INTERRUPT ! H !! ! REQ ! H !! ENABLE H ! H ! H !
! H ! !! H ! ! !! (SW) ! (SW) ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
READ I/O 302
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! REMOTE !! REMOTE EN ! TERMINAL ! KLINIK !
! 0 ! 0 !! 0 ! 0 ! PROTECT H !! H ! CARRIER ! CARRIER !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
READ I/O 303
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! R CLK !! CRAM CLK ! DPE/M CLK ! RAM !
! 0 ! 0 !! 0 ! 0 ! ENB (0) !! ENA ! ENABLE ! ERROR !
! ! !! ! ! H !! H ! L ! L !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT I/O 204
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! CRAM ! CRM ADR ! SS !! DP ! STACK ! CRAM !
! 0 ! 0 !! WRITE ! LOAD ! MODE !! RESET ! RESET ! RESET !
! ! !! ! ! !! H ! H ! H !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT I/O 205
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! MAINT ! !! CLR 10 ! ! !! ! ! !
! CLK ! MAINT !! INTERRUPT ! TRAP ! DIAG 10 !! DIAG 4 ! DIAG 2 ! DIAG 1 !
! PULSE ! ENB !! L ! EN ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT I/O 206
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! 0 ! 0 !! 0 ! 0 ! 0 !! 0 ! SINGLE ! CLK RUN !
! ! !! ! ! !! ! CLK H ! H !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT I/O 210
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! CHECK ! CONSOLE !! XMIT ADR ! XMIT DATA ! CRA T CLK !! CRA R CLK ! LATCH ! CLOSE !
! NXM ! REQ !! (1) ! (1) ! ENB (1) !! ENB (1) ! DATA ! LATCHS !
! ! !! ! ! !! ! (1) ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT I/O 212
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! 0 ! 0 !! 0 ! 0 ! 0 !! RUN ! EXECUTE ! CONTINUE !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT 100
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! RESET ! PE DETECT !! CRM PE ! DP PE ! CACHE !! 1 MSEC ! 0 ! 0 !
! ! ENABLE !! DETECT ! DETECT ! ENABLE !! ENABLE H ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT 101
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! MODEM !! ! ! !
! 0 ! 0 !! 0 ! 0 ! DTR !! STATE ! REMOTE ! FAULT !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT 102/103 DATA/ADR
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! DATA 28 ! DATA 29 !! DATA 30 ! DATA 31 ! DATA 32 !! DATA 33 ! DATA 34 ! DATA 35 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT 104/105 DATA/ADR
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! DATA 20 ! DATA 21 !! DATA 22 ! DATA 23 ! DATA 24 !! DATA 25 ! DATA 26 ! DATA 27 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT 106/107 DATA/ADR
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! DATA 12 ! DATA 13 !! DATA 14 ! DATA 15 ! DATA 16 !! DATA 17 ! DATA 18 ! DATA 19 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT 110/111 DATA/ADR
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! DATA 4 ! DATA 5 !! DATA 6 ! DATA 7 ! DATA 8 !! DATA 9 ! DATA 10 ! DATA 11 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT 112/113 DATA/ADR
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! 0 ! 0 !! 0 ! 0 ! DATA 0 !! DATA 1 ! DATA 2 ! DATA 3 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT 114/115 ADR/DATA
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! 0 ! 0 !! 0 ! 0 ! BAD DATA !! COM/ADR ! I/O DATA ! DATA !
! ! !! ! ! CYCLE !! CYCLE ! CYCLE ! CYCLE !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT 116
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! CSL INTERRUPT !
! 0 ! 0 !! 0 ! 0 ! 0 !! 0 ! 0 ! THE 10 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT I/O 200 CTY UART WRITE STATUS REGISTER(DATA BUFFER IS I/O 201)
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! HUNT MODE ! UART !! REQUEST ! RESET ! SEND !! RECEIVE ! TERMINAL ! TRANSMIT !
! ON(SYNC) ! RESET !! TO SEND L ! ERRORS ! BREAK CHAR !! ENABLE ! READY ! ENABLE !
! ! !! ! ! H !! ! L ! !
******************************************************************************************************************************
WRT I/O 200 CTY UART READ STATUS REGISTER(DATA BUFFER IS I/O 201)
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! DATA SET ! BRK/SYNC !! FRAMING ! OVERRUN ! PARITY !! TRANSMITTER ! RECEIVER ! TRANSMITTER !
! READY ! DETECT !! ERROR ! ERROR ! ERROR !! EMPTY ! READY ! READY !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************
WRT I/O 202 REMOTE UART WRITE STATUS REGISTER(DATA BUFFER IS I/O 203)
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! HUNT MODE ! UART !! REQUEST ! RESET ! SEND !! RECEIVE ! TERMINAL ! TRANSMIT !
! ON(SYNC) ! RESET !! TO SEND L ! ERRORS ! BREAK CHAR !! ENABLE ! READY ! ENABLE !
! ! !! ! ! H !! ! L ! !
******************************************************************************************************************************
WRT I/O 202 REMOTE UART READ STATUS REGISTER(DATA BUFFER IS I/O 203)
******************************************************************************************************************************
! DBUS7 ! DBUS6 !! DBUS5 ! DBUS4 ! DBUS3 !! DBUS2 ! DBUS1 ! DBUS0 !
! ! !! ! ! !! ! ! !
! ! !! ! ! !! ! ! !
! DATA SET ! BRK/SYNC !! FRAMING ! OVERRUN ! PARITY !! TRANSMITTER ! RECEIVER ! TRANSMITTER !
! READY ! DETECT !! ERROR ! ERROR ! ERROR !! EMPTY ! READY ! READY !
! ! !! ! ! !! ! ! !
******************************************************************************************************************************