1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 1 (RDUDOFILE) F 28 Receive String Checker The following are from F= 28 L 343 RECFOUND LABEL ***** LINES WITH ERRORS = 1 ***** ***** LINES WITH ERRORS = 1 ***** ***** LINES WITH ERRORS = 1 ***** 1 INPUT $$$LOGO. 1 2 3 4 5 6 7 8 9 10 * ......... BBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 11 * ................. BBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 12 * ..........##......... BBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTTTTTTTTTTTTTT IIIIIIIIIIII 13 * ............##........... BBBBBB BBBBBB TTTTTT TTTTTT TTTTTT IIIIII 14 * .............##............ BBBBBB BBBBBB TTTTT TTTTTT TTTTT IIIIII 15 * .............##............ BBBBBB BBBBBBB TTTT TTTTTT TTTT IIIIII 16 * ..............##............. BBBBBBBBBBBBBBBBBBB TTTTTT IIIIII 17 * ..............##............. BBBBBBBBBBBBBBBBB TTTTTT IIIIII 18 * ..............##............. BBBBBBBBBBBBBBBBBBB TTTTTT IIIIII 19 * .............##.............. BBBBBB BBBBBB TTTTTT IIIIII 20 * ...........##.............. BBBBBB BBBBBB TTTTTT IIIIII 21 * ..........##............... BBBBBB BBBBBB TTTTTT IIIIII 22 * ........##............... BBBBBB BBBBBBB TTTTTT IIIIII 23 * .....##.............. BBBBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 24 * ................. BBBBBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 25 * ......... BBBBBBBBBBBBBBBBBBBB TTTTTTTTTTTT IIIIIIIIIIII 26 * 27 * 28 * ****** Copyright 1982, 1983, 1984, 1985, 1986, 1987, 1988, 29 * 1989, 1990, 1991 BTI Computer Systems ****** 30 * 31 * This document and the program it describes are the exclusive property 32 * of and proprietary to BTI Computer Systems. No use, reproduction, or 33 * disclosure of this document or its contents, either in full or in part, 34 * by any means whatsoever regardless of purpose may be made without the 35 * prior written consent of BTI Computer Systems. 36 * 37 * BTI Computer Systems 38 * Sunnyvale, California 94086 2 3 4 * RRRRRRRR DDDDDD UU UU 5 * RR RR DD DD UU UU 6 * RR RR DD DD UU UU 7 * RR RR DD DD UU UU 8 * RRRRRRRR DD DD UU UU 9 * RR RR DD DD UU UU 10 * RR RR DD DD UU UU 11 * RR RR DD DD UU UU 12 * RR RR DDDDDD UUU 1 Assembler C9101 24-Jul-92 15:15 PAGE 2 F 0 14 15 RDUP BLOCK 16 17 INPUT $$$VIRTDEFS 18 INPUT $$$XREQINFOMACS 19 INPUT $$$MACROS 1 * Including MACROS.ASSEM Version A8607. 20 INPUT REVISIONS 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 3 (REVISIONS) F 6 3 4 ********************************************************************************** 5 * * 6 * Revision Date * 7 * -------- ---- * 8 * 2.12 28 Nov 83 * 9 * More revisions to session logger. * 10 * Hardware Note: Rev 12 of the SSU will clear its UART * 11 * input buffer when it sends a NAK. * 12 * 2.13 03 Aug 84 * 13 * 1. Addition of display options T and Z for * 14 * double and single word time displays. * 15 * 2. Changes to log routines to make them * 16 * compatible with line printers. * 17 * 3. EXITNP command added to allow exiting * 18 * without the log file being printed. * 19 * 4. Changed DL command to not skip lines * 20 * between output. * 21 * 5. Added time and date stamp to session log. * 22 * 6. Display command allows for type change, accepts * 23 * some changes in memory locations to be in same * 24 * type as displayed (hex, decimal, ascii, PAK6, * 25 * and time). * 26 * 7. Changes to trace calls. * 27 * 8. Bus error messages corrected. * 28 * 9. Timer calls removed from character gathering loop. * 29 * 10. Added help and ? commands. * 30 * 2.14 28 Aug 84 * 31 * Added breakpoint commands (BPI, CLEARBPI, CLEARBPIS), * 32 * and changed STEP command to merge in with breakpoints. MH * 33 * Added NOLOG parameter to RDU call, and EXITP command. * 34 * A8408 29 Aug 84 * 35 * Changed version format to date code. * 36 * A8408a 31 Aug 84 * 37 * Change breakpoint set and restore routines to check MSR * 38 * for CPU being in OS code. * 39 * A8409 04 Sep 84 * 40 * Fix step command to remove steps from table. Interactive * 41 * command sets breakpoints, GO singlesteps over breakpoints. * 42 * A8409a 04 Sep 84 * 43 * Change RESPCHEK subroutine, and WRU command to catch * 44 * bad bus error message caused by DSUB opcode. * 45 * A8409b 05 Sep 84 * 46 * Change dial command to facilitate tandem dialing. * 47 * A8409c 06 Sep 84 * 48 * Changes in dialer routines to add phone line class * 49 * code to SITEFILE and DIALFILE and lengthen modem * 50 * address to allow a predial phone number. * 51 * A8409d 07 Sep 84 * 52 * Change Hangup, Powerreset, and Dial commands to check * 53 * LOGFLAG to determine if log file should be printed. * 54 * Changed the previous 3 and all Exit commands to see if * 55 * transmission errors occurred and if so print the number. * 56 * RDULOST prints number of transmission errors and checks * 57 * LOGFLAG to see if log file should be printed. * 58 * A8409e 10 Sep 84 * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 4 (REVISIONS) F 6 59 * Fix bug in logdate routine. * 60 * A8409f 11 Sep 84 * 61 * Fix bug in FAILPRINT. * 62 * A8409g 20 Sep 84 * 63 * Fix bug in LOGLOOP (was weirding out on long (>96) lines) * 64 * A8409h 26 Sep 84 * 65 * Clear BPITABLE before a boot. * 66 * A8410 01 Oct 84 * 67 * Store MASPTR in memory display command. Fix LEAVE * 68 * in IN subroutine to preserve stack. * 69 * A8410a 03 Oct 84 * 70 * Change CLOSEM to check LOGPRINT before closing * 71 * BATCHLUN, and then call CLOSEM everywhere a new * 72 * session log might be started. * 73 * Miscellaneous fixes in user interface. * 74 * A8410b 09 Oct 84 * 75 * Change dialfile and sitefile to .TEXT. * 76 * A8410c 26 Oct 84 * 77 * Check for and report errors on changing displayed fields. * 78 * Additional parameter to the interactive command * 79 * to set the exit character. Clear time interrupts * 80 * when a bad password error is returned. Log exitchar * 81 * when terminating an interactive session. * 82 * A8411 01 Nov 84 * 83 * Add SYNECOUNT to FAILCOUNT. Don't put in STEP * 84 * breakpoint if breakpoint is already set. * 85 * Add Break and Dwell receiving features. * 86 * Added NSCAN to MCU commands. Send single-step * 87 * before GO on interactive command. Print modem * 88 * and dialer port names when used by DIAL. * 89 * Turn on symbols when BPI is hit. * 90 * A8411a 11 Nov 84 * 91 * Use circular buffer to keep track of pointers followed. * 92 * A8411b 16 Nov 84 * 93 * Get modem name from MODNAME instead of PORTNAME. * 94 * Move version number to RDUMESS and first word past start. * 95 * A8411c 26 Nov 84 * 96 * Change to dwell and break receiving for PORTZERO * 97 * data to correspond with the new SSU. * 98 * A8412 03 Dec 84 * 99 * Move TELLMODEM to before call to DIALIT. * 100 * A8412a 13 Dec 84 * 101 * Put KLUDGE in CHEKRESP for SSU returning dwell * 102 * and break count either right or left justified. * 103 * A8501 15 Jan 85 * 104 * Increased dialer buffer length to 34 and put in * 105 * check for overflow in DIALCHR. * 106 * A8503 08 Mar 85 * 107 * Clear breakpoints before doing a bootcopy. * 108 * Call RELOCATE before displaying instruction. * 109 * A8504 26 Apr 85 * 110 * New command WRUALL. Lots of internal cleanup. * 111 * A8505 14 May 85 * 112 * Added DO file processing. Increased the delay for * 113 * waiting for selftest reponse. CHeck for SMU when * 114 * setting SLOTTYPES and add new device type code for SMU. * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 5 (REVISIONS) F 6 115 * Add WRU 1 analysis to WRU display. * 116 * Change session log name to date code. * 117 * Add ability to enter negative decimal numbers. * 118 * New STATUS command for entire system status. * 119 * Changed old STATUS command to C STATUS. * 120 * Added S STATUS and P STATUS commands. * 121 * A8505a 16 May 85 * 122 * Change SSUSTAT to pick up words individually * 123 * from SSU (no more block reading). * 124 * Bug fix in RESTART command causing wrong PPU * 125 * slot number to be listed when PPU fails selftest. * 126 * A8505b 29 May 85 * 127 * Patch to RDU to only send 2 characters at a time * 128 * of interactive data. * 129 * A8505c 30 May 85 * 130 * Bug fix in concurrent process. * 131 * A8506 05 Jun 85 * 132 * Changes to concurrent process handling. * 133 * Addition of concurrent process sending RDU commands. * 134 * Changes to timeout values. Bug fix in REPORTCLOCK. * 135 * Bug fix in SEND(*) commands. * 136 * Added check for breaks in send and waits commands. * 137 * Changes to TRACE to put entries in session log. * 138 * TRACE command to turn on tracing. * 139 * New subroutine HEXTOCHAR provides more * 140 * flexibility than HEXOUT. * 141 * A8506a 12 Jun 85 * 142 * Addition of C SCAN and C NSCAN commands. * 143 * A8506b 14 Jun 85 * 144 * Changed SHINTO, LINTO, EMPTYTO, and NAKTO from * 145 * EQU to VFD to make them easier to patch. * 146 * Put a tilde (~) at the beginning of TRACEBUFF. * 147 * A8506c 25 Jun 85 * 148 * Fix CPUSTAT to display correct first instruction's * 149 * address when listing current instructions. * 150 * A8507 20 Jul 85 * 151 * Changed MCUTYPEB to the correct bit. * 152 * Bug fix in LOGLUNOPEN. * 153 * A8508 09 Aug 85 * 154 * Cleanups to the breakpoint code. * 155 * WRUALL complains if no map has been done. * 156 * WRU to an empty slot reports an error message. * 157 * Decode SSU's WRU(1) on bus error. * 158 * Report contents of SSU message buffers * 159 * on initial map. * 160 * A8508a 20 Aug 85 * 161 * Increased size of M scan and fill commands * 162 * address to 21 digits (for new 8 mb SMU). * 163 * Modified wait time calculations for these. * 164 * A8508b 20 Aug 85 * 165 * Broke the memory scans and fill into * 166 * chunks of about 20 seconds. Added break * 167 * processing to this. Added a delay to * 168 * the SYSINIT command (also used by BOOT) * 169 * to prevent timing out (the SSU is too * 170 * busy to talk to us). * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 6 (REVISIONS) F 6 171 * Made class and bcm codes symbolic. * 172 * A8509 20 Sep 85 * 173 * SENDFILE command added. * 174 * Help messages moved from RDUMESS into RDUHELP. * 175 * Removed PREPOUT and calls to it from log routines. * 176 * Split up RDUMAIN1, RDUMAIN2, RDUMAIN3, * 177 * RDUUSUB, RDUOSUB,RDUISUB. * 178 * A8509a 23 Sep 85 * 179 * RECEIVEFILE command added. * 180 * A8509b 24 Sep 85 * 181 * Massive reorganization of the memory display code. * 182 * - Changed D command to allow changing contents * 183 * without first displaying the location. * 184 * - DL command allows changing display type. * 185 * - DL command does not issue block read * 186 * when the necessary data is still around * 187 * from the previous block read. * 188 * - ZL command added. * 189 * - Register display commands have same * 190 * display format as memory display. * 191 * - Display commands that don't allow write to * 192 * their locations do not require CR terminator. * 193 * - Colon not required when changing data in a * 194 * displayed location iff the data is numeric. * 195 * - When a dot is used as a memory location * 196 * specifier a blank does not need to * 197 * separate it from the command. * 198 * - After displaying absolute address we can * 199 * redisplay current address. * 200 * A8509c 25 Sep 85 * 201 * Moved call to INITLOGLUN to before call to dial up * 202 * remote system. This way a trace of the dialup can * 203 * be kept in the session log. If dialup failed, * 204 * the log file is closed but not printed. * 205 * * 206 * A8510 13 Oct 85 * 207 * Modified RDU program to process the new * 208 * symbol information format. Het. * 209 * A8512 04 Dec 85 * 210 * Fix PERCENTDONE routine in file transfer to not die if * 211 * file size is not set yet. Moved POWERRESET command * 212 * to proper location in command table. * 213 * Added kludge to RESTART command to make up for a * 214 * hardware problem with the MCU (issues WRU4 to each * 215 * one, so MCU restores register wiped out by CLEARALL). * 216 * A8512a 16 Dec 85 * 217 * Changed IN subroutine to use BUFPT instead of IBPT. * 218 * This allowed concurrent process commands to work. * 219 * Removed restriction on WRU that requires a bus * 220 * device to be in the indicated slot. * 221 * Fixed MAPPER to set indicator in SLOTs that memory * 222 * has been found when an SMU has been found. * 223 * Added comma separator between PE1 and F2 on WRU1 * 224 * decode line. * 225 * Added four commands to be used for manipulating * 226 * the SMU error log and error file (EF,EL,CEF,CEL). * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 7 (REVISIONS) F 6 227 * Added flag to indicate if there is an open session * 228 * log. Use this flag instead of STATE to decide if * 229 * an entry should be written to the log. * 230 * A8512b 17 Dec 85 * 231 * Bug fix in SPECSAVE (was causing interactive data * 232 * to be logged twice). * 233 * A8601 21 Jan 86 * 234 * Removed KLUDGE in CHEKRESP for dwell and break count * 235 * being in the left most byte instead of the right byte. * 236 * Bug fix in DO file receive processing. * 237 * Lengthened timeout value for file transfer. * 238 * Fixed error message for file not found in RDUTRANSFER. * 239 * A8602 24 Feb 86 * 240 * Fix to prevent pretty session log header from wrapping * 241 * around. * 242 * Don't call CLOSEM until after dialup error message has * 243 * been reported (ensures that it appears in session log). * 244 * Moved status command to proper location in command list. * 245 * A8603 13 Mar 86 * 246 * Bug fix in DO file processing. * 247 * A8603a 26 Mar 86 * 248 * Changes in TRACE handling. * 249 * A8604 08 Apr 86 * 250 * Block structure added. * 251 * SHIPCOMxx and SHIPDATA subroutines changed to return * 252 * to an error address if an error is detected. * 253 * RESPERROR added as a generic system wide place which * 254 * handles SHIPCOMxx and SHIPDATA errors. * 255 * Added better error handling to breakpoint commands. * 256 * Added new MCU status command (also added to STATUS). * 257 * Removed the calls to turn off terminating characters * 258 * before calls to SSU/RDU protocol routines. * 259 * A8604a 09 Apr 86 * 260 * Addition of the PFL command. * 261 * A8604b 09 Apr 86 * 262 * Use the URFREELUN request to get a unit to open * 263 * the session log and batch file on. * 264 * A8604c 14 Apr 86 * 265 * Changes to more processing while dealing with * 266 * concurrent processes. * 267 * A8604d 22 Apr 86 * 268 * Fix STEP command so it will work with the changes done * 269 * to the breakpoint command. Added BPITO (breakpoint * 270 * timeout value). This is a shorter time out value * 271 * used for when breakpoints are in a running system. * 272 * A8605 06 May 86 * 273 * Bug fix in reporting dialer errors. * 274 * A8611 03 Nov 86 * 275 * Misc. corrections in the help messages. STATUS command * 276 * traps 'bus error' and 'command error' (excluded page) * 277 * in BCMBLKREAD of PC area. Allows STATUS to go on to * 278 * other modules. Prints a message if it was a bus error, * 279 * to distinguish from 'real' bus error ("FS confused"). * 280 * Passes remainder of RUN command line to concurrent * 281 * process as first communication. * 282 * A8611a 18 Nov 86 * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 8 (REVISIONS) F 6 283 * Now passes SLOTS table of "current" bus slots to * 284 * concurrent process as first communication (params are 2nd). * 285 * A8612 11 Dec 86 * 286 * Misc minor cleanups. * 287 * A8701 07 Jan 87 * 288 * Added FREELUN call at DIAL99 in DIAL command * 289 * to ensure SITEFILE is closed on dialing probs. * 290 * A8701a 09 Jan 87 * 291 * Changed handling of SLOTS so: slots scanned once rather * 292 * than three times, system SSU (rather than lowest slotted * 293 * SSU) is used, doing a MAP command doesn't reset slot * 294 * selections (but does fix up uninitialized ones). * 295 * A8705a 20 May 87 * 296 * All files now opened on local units. * 297 * A8706a 05 Jun 87 * 298 * ERRORFILE routine (EF command) display fixed * 299 * so line-feed term doesn't cause double spacing. * 300 * A8706b 10 Jun 87 * 301 * ERRORLOG routine (EL command) now decodes the * 302 * SMU error status on the screen. * 303 * A8706c xx Jun 87 * 304 * PATHMAKE fixed to get unit numbers right. Got * 305 * screwed up in A8705a. * 306 * A8707a xx Jul 87 * 307 * Fixed ERRORLOG so line is not garbled at end. * 308 * Changed ERRORLOG so line feed does same a ".". * 309 * A8709 17 Sep 87 * 310 * Fixed IODIAL and IODONTDIAL to not check remote * 311 * clock if more than one break was needed to get * 312 * link established (DIAL command). * 313 * A8709a 18 Sep 87 * 314 * Fixed so @0000 halts are reported. * 315 * A8802 08 Feb 88 * 316 * Added message if IODIAL opts not to check remote clock * 317 * because multiple breaks were sent (clearer to user). * 318 * Tidied TRACECOM. * 319 * A8804 12 Apr 88 * 320 * Changed EQTALKLUN of DIAL command to FRTCLRXOFF and disable * 321 * XON/XOFF processing. This cleans up the output buffer and * 322 * prevents hangs. * 323 * Changed FAILPRINT to zap error counts to prevent dup messages. * 324 * Subroutinized the MCU bug fix from RESTART command (each MCU * 325 * needs WRU4 to resuscitate it after CLEARALL, WRU0, etc). Now * 326 * called by commands that result in BCMGO (sub is FIXUPMCUS). * 327 * Made URDELAY time for PPU selftest symbolic (PPUSTWAIT), and * 328 * upped it to 6 from 5 because URDELAY UREQ is imprecise. * 329 * A8806 22 Jun 88 * 330 * Fixed LOGCHAR to make char 7-bit. Among other things, this * 331 * makes control char quoting easy and correct. * 332 * A8807 10 Jul 88 * 333 * Fixed READLINE to ensure new TIMER interrupt set up each * 334 * time the routine is entered. Was resulting in lost link * 335 * following HALTLOOK if user typed nothing for 1.5 minutes. * 336 * A8807a 27 Jul 88 * 337 * Fixed INITLOGLUN to cleanup so the first prompt after would use * 338 * the correct forms control (was using leftover char "U"). * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 9 (REVISIONS) F 6 339 * A8809 29 Sep 88 * 340 * Minor clean ups to XFERDEFS definitions. * 341 * A8810 27 Oct 88 * 342 * Changed NVM command to allow larger addresses on newer SSUs. * 343 * A8811 04 Nov 88 * 344 * Fixed P CA command to include controller BASEADDR in bus * 345 * command to store new value. * 346 * A8811a 07 Nov 88 * 347 * Cleaned up the MEMORY routine. * 348 * A8811b 09 Nov 88 * 349 * Fixed SLOTDISP routine to not try decode when slot number unknown * 350 * (e.g. on WRULIST1 of SSU bus error before SSUSLOT is known). * 351 * A8812 xx Dec 88 * 352 * Added ICURESP to trace entry. * 353 * A8901 xx Jan 89 * 354 * Fixed PPCOMTAB to use CAMEM for PPU Z command. This adds the * 355 * selected channel number to the pseudoaddress. * 356 * A8903 03 Mar 89 * 357 * Added 4 second delay right after RELDIALER in IODIAL to * 358 * give the phone line time to settle down. Helps to reduce * 359 * the number of (**can't check remote clock**) errors. RC * 360 * A8903a 03 Mar 89 * 361 * Fix to NVM size check code. RC. * 362 * A8903b 06 Mar 89 * 363 * Controller type B added to table as "video tape controller". RC * 364 * A8908 29 Aug 89 * 365 * Added ability to dial out through Hayes compatable type modem. If * 366 * the dialer name is HAYES then the modem will do the dialing. JB * 367 * A8909 18 Sep 89 * 368 * Changed EMPTYBUF routine to use the input buffer flush request * 369 * rather that read w/no suspend. Also move the set slow baud * 370 * rate into the SENDBREAK routine. This allows the Hayes * 371 * compatable modem to connect at highest possible baud rate. * 372 * A8911 17 Nov 89 * 373 * Change to allow a numeric rate in the baud rate flag in both * 374 * the SITEFILE and DIALFILE. The numeric rate indicates that the * 375 * RDU communication will always be at that rate. The SSU * 376 * microcode needs to be upgraded before this will work with * 377 * rates above 300. * 378 * A8911a 29 Nov 89 * 379 * Change to allow the RDU to dial with a Racal Vadic 3451 * 380 * auto-dial modem. The special dialer name is VADIC3451 * 381 * which is put into the dial file. * 382 * A8912 04 Dec 89 * 383 * Added delay of four seconds after connection with HAYES * 384 * or VADIC 3451 to allow the line to clear up. * 385 * A8912a 12 Dec 89 * 386 * Added delay after setting transmitter options so that any * 387 * upcoming buffer flushes do NOT flush any CIA commands as well. * 388 * A9001 24 Jan 90 * 389 * Added EXITNPD command. CG * 390 * A9001a 26 Jan 90 * 391 * Removed EXITNPD command (waaaaah). CG * 392 * A9009 28 Sep 90 * 393 * Changed LOGWRITETF to not print text with forms record * 394 * if the first character is a blank. * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 10 (REVISIONS) F 6 395 * A9104 18 Apr 91 * 396 * Addition of the type SCSI Disk Controller to the PPU STATUS * 397 * command. * 398 * A9201 17 Jan 92 * 399 * Modification of the Line protocol routines to allow for * 400 * multiple outstanding messages. Modified SHIPNOP to send * 401 * multiple NOPs iff SSU microcode rev is 16 or greater. * 402 * Added extra time to SelfTest. * 403 * A9202 04 Feb 92 * 404 * Modification of the initial callup code (IODIAL and IODONTDIAL * 405 * and associated SRs) to do the initial callup at a specified * 406 * baud rate and indicate to the SSU by the break length which * 407 * baud rate is being used. Will still work the old way for LOW * 408 * or HIGH specifiers in the dial file, otherwise, requires SSU * 409 * microcode version 16. * 410 * RESTART command modified to allow delay after issuing CLEARALL. * 411 * Modified Interactive mode to work harder at getting back * 412 * output characters from the remote machine. * 413 * DIALVADIC changed to force 1200 baud rate to keep the modem * 414 * as happy as possible. * 415 * A9202a 28 Feb 92 * 416 * Misc mods to the initial BREAK production. * 417 * OpCode WAIT changed to MEMAD type. DIAL command changed to * 418 * WAIT after hanging up from a previous call. * 419 * A9203 09 Mar 92 * 420 * Number of modem descriptions increased. Since each may now * 421 * have multiple rate entries, the original allowance became * 422 * too small. Mods to the HAYES response code packer. * 423 * More changes to baud rate stuff. * 424 * A9203a 18 Mar 92 * 425 * More changes to baud rate stuff. * 426 * A9203b 20 Mar 92 * 427 * DIALFILE and SITEFILE may now have comment records starting * 428 * with a "*". * 429 * A9207 14 Jul 92 * 430 * Sendfile fixed to properly send protected status of a * 431 * code file page. Symbol table initialized correctly. * 432 * A9207a 24 Jul 92 * 433 * Receive and Receive* changed to compare with all characters * 434 * received from the last Send or Send*. * 435 * * 436 *** Don't forget to change the TITLE at the beginning of this file!! ** * 437 * * 438 ********************************************************************************** 439 41393230 ABS 440 VERSIONHI EQU "A920" change number in title, too 37612020 ABS 441 VERSIONLO EQU "7a " 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 11 (REVISIONS) F 6 443 444 ********************************************************************************** 445 * * 446 * The program RDU has been modified to allow it to debug * 447 * code files that contain the symbol information format supported * 448 * by the new assembler and linker. The decision on which format * 449 * to use is resolved by looking at location 4 (the fifth word) on * 450 * page 128 of the code file. If this word is equal to 1 then the * 451 * new format is assumed. If the word is not equal to 1 then the * 452 * old format is assumed. Throughout the source code, any comment * 453 * referring to the OLD format means the format that RDU originally * 454 * accepted and references to the OLD assembler are to the FLAME * 455 * non-relocating assembler. Any references to the NEW format means * 456 * the format that DEBUG supports and is generated by the newer * 457 * assembler and the linker. Modifications were made to OLDDEBUG * 458 * as a test vehicle for placing them into the RDU program. The * 459 * RDU essentially contains a subset of the OLDDEBUG code and placing * 460 * the changes into OLDDEBUG first was considered an easier way to * 461 * debug the new code. * 462 * * 463 * When the new subprogram trees are mapped into memory they are * 464 * represented in the RDU with the following logical structure. * 465 * * 466 * ------------------------ * 467 * Created by | subprogram level 0 | * 468 * RDU | |=========> register symbols * 469 * | range 0 - 1FFFF | * 470 * ------------------------ * 471 * | * 472 * | * 473 * Logical top ------------------------ * 474 * of tree | subprogram logical | * 475 * in .CODE | level 0 | * 476 * file ------------------------ * 477 * | * 478 * | * 479 * ------------------------ * 480 * | subprogram logical | * 481 * | level 1 | * 482 * ------------------------ * 483 * * 484 * The subprogram descriptor at physical level 0 is created in the * 485 * RDU. Its main purpose is to point to the register symbols to * 486 * allow the debugger to recognize R0-R7, PC, PSR, IMR and IAD as * 487 * valid symbols. The RDU program won't support these symbols at this * 488 * point in time. The block is linked to the top of the subprogram * 489 * block at logical level 0 via a son pointer and linked back to via a * 490 * father pointer. The logical level 0 subprogram block is the top * 491 * of the .CODE file's subprogram tree. The logical level 1 subprogram * 492 * block is the one that contains the .DEBUG text file if any exists. * 493 * It also controls the listing of this text for all of its children. * 494 * A logical level 1 block is defined as a block whose grandfather is * 495 * the tree head, the physical level 0 block. The RDU program does * 496 * not support the listing of source text. * 497 * * 498 ********************************************************************************** 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 12 (XDEFS) F 7 21 INPUT XDEFS 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 13 (XDEFS) F 7 2 3 ********************************************************************************** 4 * * 5 * This file lists the definitions for SSU communication. Details * 6 * of SSU communication and protocol are available in the Remote * 7 * Front Panel manual. * 8 * * 9 ********************************************************************************** 10 11 ********************************************************************************** 12 * * 13 * Transmitted messages classes * 14 * The following definitions are for the placement of the * 15 * various fields within the double word message to the SSU. * 16 * * 17 ********************************************************************************** 18 00001040 BYTE 19 XMSGCLASS EQU BITS 8:11 location for message class 20 * transmitted classes 21 * ----------- ------- 00000000 ABS 22 KLAS0 EQU 0 direct commands to specified slot 23 * BCM = bus command, see defs below 00000001 ABS 24 KLAS1 EQU 1 command word sent as specified by VIRTUAL address 25 * BCM = bus command, see defs below 00000002 ABS 26 KLAS2 EQU 2 block mode commands 27 * BCM = specific command, see defs below 00000003 ABS 28 KLAS3 EQU 3 block mode commands, using VIRTUAL addresses 29 * BCM = specific command, see defs below 00000004 ABS 30 KLAS4 EQU 4 direct commands to the SSU 31 * BCM = bus command, see defs below 00000005 ABS 32 KLAS5 EQU 5 control signal to VRA bus 33 * BCM = specific command, see defs below 00000006 ABS 34 KLAS6 EQU 6 control of RFP interface 35 * BCM = specific command, see defs below 00000007 ABS 36 KLAS7 EQU 7 load data word operations (ACC0:ACC2) 37 * SLOT specifies which accumulator. These 38 * three words may be loaded into the SSU for 39 * subsequent use as operands to commands. 00000000 ABS 40 ACC0 EQU 0 accumulator 0 number 00000001 ABS 41 ACC1 EQU 1 accumulator 1 number 00000002 ABS 42 ACC2 EQU 2 accumulator 2 number 43 * only these three are defined by the SSU. 00000008 ABS 44 KLAS8 EQU 8 characters to the operating system 45 * slot specifies number of characters/nop/break/dwell 46 00001840 BYTE 47 XMSGSLOT EQU BITS 12:15 slot number field 48 * (following refer to second word) 00000040 BYTE 49 XMSGBCM EQU BITS 0:3 bus command field (or sub-op) 50 51 52 ********************************************************************************** 53 * * 54 * Bus Command (BCM) codes * 55 * The BCM field holds actual bus command values for * 56 * KLAS0, KLAS1, and KLAS4 operations. For KLAS2 and KLAS3 * 57 * operations, it contains the request code for the SSU * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 14 (XDEFS) F 7 58 * action. For KLAS5, it contains a request code for a * 59 * major SSU function. For KLAS6, it contains a request * 60 * code for an RFP function. For Klas7, it contains an * 61 * accumulator number. For Klas8, it contains a character * 62 * count or control field. * 63 * * 64 ********************************************************************************** 65 66 * The following are KLAS0, KLAS1, and KLAS4 BCM definitions. 00000000 ABS 67 BCMWRITE EQU 0 write to a bus device 00000002 ABS 68 BCMREAD EQU 2 read from a bus device 00000004 ABS 69 BCMWRU EQU 4 WRU (address indicates WRU #) 00000005 ABS 70 BCMSLFTST EQU 5 self test 00000006 ABS 71 BCMIPOLL EQU 6 interrupt poll 72 73 * The following are BCM values for block mode commands (KLAS2 and KLAS3) 00000000 ABS 74 BCMSTATUS EQU 00 status (returns CPU R0:R7,PC,MSR,CAR,IM) 00000002 ABS 75 BCMMAP EQU 02 map of system modules 00000003 ABS 76 BCMBLKREAD EQU 03 block read (MAXRESPS words) 00000004 ABS 77 BCMABSCAN EQU 04 abnormal data scan 00000005 ABS 78 BCMSCAN EQU 05 data scan 00000006 ABS 79 BCMSCANM EQU 06 masked scan 00000007 ABS 80 BCMFILL EQU 07 fill 00000008 ABS 81 BCMERRBLK EQU 08 get error block 00000009 ABS 82 BCMNSCAN EQU 09 negative scan 0000000A ABS 83 BCMNSCANM EQU 0A masked negative scan 84 85 * KLAS5 BCM defintions 00000000 ABS 86 BCMSTOP EQU 0 assert pause 00000001 ABS 87 BCMGO EQU 01 GO 00000003 ABS 88 BCMCALL EQU 03 clearall 00000004 ABS 89 BCMBOOTCOP EQU 04 boot copy 00000005 ABS 90 BCMPWRRST EQU 05 power reset 00000006 ABS 91 BCMSSTEP EQU 06 single step a CPU 00000007 ABS 92 BCMSINIT EQU 07 system initialization 93 94 * KLAS6 BCM defintions 00000000 ABS 95 BCM6VAL EQU 00 validate 00000001 ABS 96 BCM6NOP EQU 01 NOP 00000002 ABS 97 BCM6RATE EQU 02 set baud rate. 98 * Allowable modem rates are 150, 300, 1200, and 2400 99 * Allowable direct rates are 2400, 4800, 9600, and 19200. 00000003 ABS 100 BCM6TERM EQU 03 terminate session 101 102 * KLAS7 BCM defintions 00000000 ABS 103 BCM7NOP EQU 0 send 0 characters (nop, normally used for poll) 00000001 ABS 104 BCM7ONE EQU 1 send 1 character (CH0) 00000002 ABS 105 BCM7TWO EQU 2 send 2 characters (CH0,CH1) 00000003 ABS 106 BCM7THREE EQU 3 send 3 characters (CH0,CH1,CH2) 00000004 ABS 107 BCM7FOUR EQU 4 send 4 characters (CH0,CH1,CH2,CH3) 00000004 ABS 108 MAXOCHAR EQU 4 maximum number of output characters to remote 00000005 ABS 109 BCM7BREAK EQU 5 send a break to the operating system 00000006 ABS 110 BCM7DWELL EQU 6 send a dwell to the operating system 111 * data = duration 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 15 (XDEFS) F 7 113 114 ********************************************************************************** 115 * * 116 * Received message classes. * 117 * Response message format. The response message class * 118 * field (XMSGCLASS) is bit-encoded as follows, producing * 119 * RKLASes 0, 2, 4, 6, 7, 8, 9, and 0A. * 120 * * 121 ********************************************************************************** 122 00001010 BYTE 123 XRERR EQU BIT 8 whether bits 9:11 is error class code 00001230 BYTE 124 XRERRCODE EQU BITS 9:11 error class code 00001210 BYTE 125 XRLST EQU BIT 9 sez last item 00001410 BYTE 126 XRACK EQU BIT 10 ack response 00001610 BYTE 127 XRIOK EQU BIT 11 sez input okay 128 129 * received classes 130 * -------- ------- 00000000 ABS 131 RKLAS0 EQU 0 data w/ more to come (XMSGSLOT = word number 132 in multiple word response) 00000010 ABS 133 MAXRESPS EQU 16 the maximum number of returns 00000002 ABS 134 RKLAS2 EQU 2 ack w/ more to come 135 * XMSGSLOT field (RKLAS2, RKLAS6, RKLAS7) is coded 136 * EQU 00 acknowledge, the data word is 00000080 BYTE 137 SFP EQU BITS 0:7 control panel indicators 00001010 BYTE 138 STF EQU BIT 8 on if timer fence not updated in last 65 seconds 00001210 BYTE 139 SERR EQU BIT 9 on if HALT, STOP, or ERROR has occurred 00001410 BYTE 140 SNIT EQU BIT 10 on if SSU didn't complete system initialization 00001A10 BYTE 141 SBSE EQU BIT 13 the state of the BSE line 00001C10 BYTE 142 SPAU EQU BIT 14 the state of the PAUSE line 00001E10 BYTE 143 SINT EQU BIT 15 the state of the interrupt line 144 * EQU 01 one byte sent by OS is in data CH0 145 * EQU 02 two bytes sent by OS are in data CH0, CH1 146 * EQU 03 three bytes sent by OS are in data CH0, CH1, CH2 147 * EQU 04 four bytes sent by OS are in data CH0, CH1, CH2, CH3 00000005 ABS 148 REMBREAK EQU 05 (reserved for transmission of break from port 0) 149 * data = length to delay, in character times 00000006 ABS 150 REMDWELL EQU 06 (reserved for transmission of dwell from port 0) 151 * data = length to dwell, in character times 00000004 ABS 152 RKLAS4 EQU 4 data, last item 00000006 ABS 153 RKLAS6 EQU 6 ack, last item (see RKLAS2 XMSGSLOT) 00000007 ABS 154 RKLAS7 EQU 7 ack, last item, input okay (see RKLAS2 XMSGSLOT) 00000008 ABS 155 RKLAS8 EQU 8 error, bad command - data = code 156 * EQU 00 error in SSU's command processor 157 * EQU 01 class invalid 158 * EQU 02 BCM invalid 159 * EQU 03 address relocation invalid for this BCM 00000004 ABS 160 BADRELOC EQU 04 unsuccessful address relocation 161 * EQU 05 system not paused 162 * EQU 06 reserved 163 * EQU 07 port 0 input overflow 00000009 ABS 164 RKLAS9 EQU 9 error, no response - data = SSU WRU1 0000000A ABS 165 RKLASA EQU 0A error, bus error 22 23 NOLIST CREF 00138000 6 REG 24 SP EQU R6 define stack pointer 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 16 F 0 25 LIST CREF 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 17 F 0 27 28 RDU BLOCK RDU control section 29 30 ENTRY BLANK 31 ENTRY BLANKOUT 32 ENTRY BLANKOUTW 33 ENTRY BUFPT 34 ENTRY CBPT 35 ENTRY CNTLE 36 ENTRY CPI 37 ENTRY CPO 38 ENTRY CPW 39 ENTRY CR 40 ENTRY DECOUT 41 ENTRY DIALMESS 42 ENTRY TYPEMESS 43 ENTRY EQEXT 44 ENTRY EQNAME 45 ENTRY ERM500 46 ENTRY ERM502 47 ENTRY ERM503 48 ENTRY ERM505 49 ENTRY EVENTLEN 50 ENTRY FETCHAP 51 ENTRY FETCHDN 52 ENTRY FETCHNP 53 ENTRY FETCHITMF 54 ENTRY FILEGET 55 ENTRY HEXTOCHAR 56 ENTRY LOGIT 57 ENTRY LOGWRITETF 58 ENTRY MESCR 59 ENTRY MESSMOVE 60 ENTRY MESSMOVEZ 61 ENTRY MODMESS 62 ENTRY MSECSS 63 ENTRY NXTCHAR 64 ENTRY NULL 65 ENTRY OBPT 66 ENTRY OBUFF 67 ENTRY ONOFFGET 68 ENTRY OUT 69 ENTRY OUTCRLF 70 ENTRY OUTO 71 ENTRY PACKER 72 ENTRY PAK6OUT 73 ENTRY PAK12OUT 74 ENTRY PDFLAG 75 ENTRY RDU 76 ENTRY RDUERR 77 ENTRY RDUOK 78 ENTRY READFILE 79 ENTRY READLINE 80 ENTRY RECTYPE 81 ENTRY RTEOD 82 ENTRY RTTEXT 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 18 F 0 83 ENTRY RTTEXTF 84 ENTRY RFPBREAK 85 ENTRY SAVEEVENT 86 ENTRY SBCHARL 87 ENTRY SBUFFW 88 ENTRY SHIPBPT 89 ENTRY SHIPNOP 90 ENTRY STAR 91 ENTRY TALPH 92 ENTRY TEOL 93 ENTRY TERMEVENT 94 ENTRY TNUM 95 ENTRY TOFLAG 96 ENTRY TRACEFLAG 97 ENTRY TSTR 98 ENTRY UBREAK 99 ENTRY VALUE 100 ENTRY WPP 101 ENTRY XFERFLAG 102 ENTRY XFERPAGE 103 104 START RDU 105 106 ********************************************************************************** 107 * * 108 * This is the MOUSE Remote Diagnostic Utility program. If it looks * 109 * familiar to you, perhaps a little like the High Level Language * 110 * Debugger, that's because only the name is changed. Actually, * 111 * it is quite a bit different but the RDU program was developed * 112 * from the Debugger. Plagiarism is such fun!!! * 113 * * 114 ********************************************************************************** 115 116 INPUT RDUHEAD 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 19 (RDUHEAD) F 8 Variable definitions, storage allocation 3 4 ********************************************************************************** 5 * * 6 * Symbol definitions, page size, misc. crud * 7 * * 8 ********************************************************************************** 9 00000000 ABS 10 XREQ EQU 0 flag for executive requests 00000010 ABS 11 PSRMODIF EQU 1*BIT 27 modify arithmetic 00000004 ABS 12 PSRCARRY EQU 1*bit 29 00000010 ABS 13 MODIFBIT EQU 1*BIT 27 modified arithmetic 00400000 ABS 14 PATHBIT EQU 1*BIT 9 path data present 00000400 ABS 15 WPP EQU 0400 number of words per page 0001FFFF ABS 16 MAXADR EQU 01FFFF highest possible address 0001FC00 ABS 17 TOPPAGE EQU MAXADR+1-WPP last page of memory 0001AC00 ABS 18 PUREPAGE EQU TOPPAGE-WPP*20 need some pure-code pages 0001A800 ABS 19 IMPAGE EQU PUREPAGE-WPP and some impure area 00018400 ABS 20 XFERPAGE EQU IMPAGE-9*WPP pages for sendfile/receivefile buffers 00000061 ABS 21 BOTTOM EQU XFERPAGE/WPP bottom of our memory 00000080 ABS 22 DBDSKPAGE EQU 128 first page of debug data 00000004 ABS 23 NCPW EQU 4 number of characters per word 00000004 ABS 24 CPW EQU 4 number of characters per word 00000003 ABS 25 ROUNDCPW EQU 3 used to round up to nearest word 00000008 ABS 26 NBPC EQU 8 number of bits per character 00000020 ABS 27 NBPW EQU NCPW*NBPC number of bits per word 0000000C ABS 28 NCPR EQU 12 number of CPU registers 00000008 ABS 29 NPPR EQU 8 number of PPU registers 00000008 ABS 30 INITDELAY EQU 8 number of seconds to delay on a sysinit 00000005 ABS 31 CLEARDELAY EQU 5 number of seconds to delay on a clearall 00000005 ABS 32 SLFTDELAY EQU 5 number of seconds to delay on a selftest 33 34 TCNORM MACRO 35 LD R0 FRTSETTCS set terminating characters 36 LD R1 ADR(TCTABN) normal table 37 ST R1 TCGROUP remember the group we used 38 FREQ LUNAIN+XREQ for command level inputs 39 EMAC 40 41 TCDISP MACRO 42 LD R0 FRTSETTCS set terminating characters 43 LD R1 ADR(TCTABD) display input table 44 ST R1 TCGROUP remember group for restoration 45 FREQ LUNAIN+XREQ for inputting after display 46 EMAC 47 48 TCZERO MACRO 49 LD R0 FRTSETTCS set terminating characters 50 LD R1 ADR(TCTABZ) port zero table 51 ST R1 TCGROUP save group address 52 FREQ LUNAIN+XREQ for input from port zero 53 EMAC 54 55 TCNONE MACRO 56 LD R0 FRTSETTCS set terminating characters 57 LD R1 ADR(TCTABX) no terminators at all 58 FREQ LUNAIN+XREQ then make the change 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 20 (RDUHEAD) F 8 Variable definitions, storage allocation 59 EMAC 60 61 TCPROC MACRO 62 LD R0 FRTSETTCS set terminating characters 63 LD R1 ADR(TCTABP) just CR and CNTL-A 64 FREQ LUNAIN+XREQ make the switch 65 EMAC 66 67 TCRESTORE MACRO 68 LD R0 FRTSETTCS request to change characters 69 LD R1 TCGROUP get last group we used 70 FREQ LUNAIN+XREQ restore original terminators 71 EMAC 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 21 (RDUHEAD) F 8 Variable definitions, storage allocation 73 74 ********************************************************************************** 75 * * 76 * Register definitions * 77 * * 78 ********************************************************************************** 79 00134000 5 REG 80 OP EQU R5 op-code table pointer 00134000 5 REG 81 COM EQU R5 command table pointer 0012C000 3 REG 82 OBP EQU R3 output buffer pointer 00130000 4 REG 83 SYM EQU R4 symbol block pointer 00134000 5 REG 84 SUB EQU R5 subprogram block pointer 00130000 4 REG 85 SRC EQU R4 source block pointer 00130000 4 REG 86 BRK EQU R4 breakpoint table pointer 87 88 ********************************************************************************** 89 * * 90 * Lun dynamic status returned from Xreq's * 91 * * 92 ********************************************************************************** 93 94 *ERROR EQU BIT 0 sez Xreq error 95 *LUNFIELD EQU BITS 4:11 logical unit number 00002040 BYTE 96 RECTYPE EQU BITS 16:19 record type field 97 *RTSP EQU BIT 16 sez special (non-data) record 00000000 ABS 98 RTTEXT EQU 0 text record 00000001 ABS 99 RTTEXTF EQU 1 text with forms 00000002 ABS 100 RTBIN EQU 2 binary record 00000008 ABS 101 RTEOF EQU 8 file mark 00000009 ABS 102 RTEOD EQU 9 end of data 103 *ECFIELD EQU BITS 21:31 error code field 104 105 106 ********************************************************************************** 107 * * 108 * Terminating character control codes * 109 * * 110 ********************************************************************************** 111 00000000 ABS 112 TC EQU 0 CR, space 00000001 ABS 113 TD EQU 1 ., CR 00000002 ABS 114 TU EQU 2 ^, ., CR, LF 00000003 ABS 115 TR EQU 3 ., >, CR 00000004 ABS 116 TG EQU 4 >, <, ., ^, LF, CR 00000005 ABS 117 TA EQU 5 @, >, <, ^, ., LF, CR 00000006 ABS 118 TV EQU 6 ^, ., >, CR, LF 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 22 (RDUHEAD) F 8 Variable definitions, storage allocation 120 121 ********************************************************************************** 122 * * 123 * Module codes * 124 * * 125 ********************************************************************************** 126 00000001 ABS 127 DEVMCU EQU 1 device type code for MCU 00000002 ABS 128 DEVCPU EQU 2 device type code for CPU 00000003 ABS 129 DEVPPU EQU 3 device type code for PPU 00000004 ABS 130 DEVSSU EQU 4 device type code for SSU 00000005 ABS 131 DEVSMU EQU 5 device type code for SMU 132 00000040 BYTE 133 DEVTYPEB EQU BITS 0:3 bits in WRU 0 indicating device type 00001610 BYTE 134 MCUTYPEB EQU BIT 11 bit indicating new MCU (SMU) 00003080 BYTE 135 DEVREV EQU BITS 24:31 WRU 0 field indicating ucode revision 0000000F ABS 136 WRUMAX EQU 0F maximum number of WRUs 137 00002040 BYTE 138 WRUMEMINC EQU BITS 16:19 says the number of words of memory 139 * described by each bit of the WRU4 response: 140 * 0 => 32K words, 1 => 64K words, 141 * 2 => 128K words, 3 => 256K words, etc. 142 00000000 ABS 143 CORESIZE EQU 0 size of core chunks of memory 144 * EQU 2 size of chunks for PEBX memory 00002E10 BYTE 145 WRUMEMNO0 EQU BIT 23 1 if memory address zero not installed 146 * on this memory controller. 147 148 ********************************************************************************** 149 * Format of the WRU 4 response from a MCU. In the * 150 * following description, "n" means 2 POWER (15+WRUMEMINC). * 151 ********************************************************************************** 152 00002C10 BYTE 153 WRUMEMNONE EQU BIT 22 no memory is attached to this MCU 00002E10 BYTE 154 WRUMEMBAD EQU BIT 23 memory is improperly attached 00003080 BYTE 155 WRUMEMHERE EQU BITS 24:31 bits describing what memory is attached: 156 * bit 31 => words 0.. n-1 are useable 157 * bit 30 => words n..2*n-1 are useable 158 * bit 29 => words 2*n..3*n-1 are useable 159 * ... 160 * bit 24 => words 7*n..8*n-1 are useable 161 00000001 ABS 162 SMC EQU DEVMCU slot code for MCU 00000002 ABS 163 SCP EQU DEVCPU slot code for CPU 00000003 ABS 164 SPP EQU DEVPPU slot code for PPU 00000004 ABS 165 SSS EQU DEVSSU slot code for SSU 166 167 0000000F ABS 168 MAXSLOT EQU 0F maximum slot address 00000003 ABS 169 MAXPORT EQU 3 maximum port number 170 00001C10 BYTE 171 BANKBIT EQU BIT 14 top bit of memory addresses 00003610 BYTE 172 RELOBIT EQU BIT 27 MSR user/monitor relocation 173 00010000 ABS 174 CPPF EQU 010000 CPU page file address 00000008 ABS 175 CPPC EQU 000008 CPU program counter 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 23 (RDUHEAD) F 8 Variable definitions, storage allocation 00000009 ABS 176 CPMSR EQU 000009 CPU monitor state register 177 00000E10 BYTE 178 THEBIT EQU BIT 7 bit in SSU WRU 0: 179 * 1 if NOT the master SSU 00000 020DF401 180 SSUREVPTR PTR ICURUCR SSU ucode revision 00100000 @ 181 SSUREV EQU @SSUREVPTR 00000010 ABS 182 SSUREVMM EQU 16 lowest rev that can do multiple messages 183 00000080 BYTE 184 ERF1 EQU BITS 0:7 error word field 1 00001010 BYTE 185 ERF2 EQU BIT 8 error word field 2 00001560 BYTE 186 ERF3 EQU BITS 10:31 error word field 3, error code 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 24 (RDUHEAD) F 8 Variable definitions, storage allocation 188 189 ********************************************************************************** 190 * * 191 * Various useful characters * 192 * * 193 ********************************************************************************** 194 00000001 ABS 195 CNTLA EQU 001 control-A 00000005 ABS 196 CNTLE EQU 005 control-E 197 *BS EQU 008 backspace 0000000A ABS 198 LF EQU 00A line feed 0000000D ABS 199 CR EQU 00D carriage return 0000003B ABS 200 SEMI EQU 03B semi-colon (single-step) 0000007F ABS 201 DEL EQU 127 delete key 0000003A ABS 202 COLON EQU ":" sub/sym delimiter 00000000 ABS 203 NULL EQU 000 nothing 0000002C ABS 204 COMMA EQU "," comma 00000020 ABS 205 BLANK EQU " " blank 0000002B ABS 206 PLUS EQU "+" add 0000002D ABS 207 MINUS EQU "-" subtract 0000002A ABS 208 STAR EQU "*" multiply 0000002F ABS 209 SLASH EQU "/" divide 0000002E ABS 210 DOT EQU "." period 00000040 ABS 211 ATSIGN EQU "@" bull's eye 00000028 ABS 212 LPAREN EQU "(" open 00000029 ABS 213 RPAREN EQU ")" close 0000003D ABS 214 EQUAL EQU "=" equal sign 0000003C ABS 215 LESS EQU "<" less than 0000003E ABS 216 GREATER EQU ">" greater than 00000027 ABS 217 QUOTE EQU "'" single quote 00000022 ABS 218 QUOTES EQU 022 double-quote marks 0000007E ABS 219 TILDE EQU "~" last printing character 0000005E ABS 220 UPARROW EQU "^" up arrow 0000005E ABS 221 CARAT EQU UPARROW also called a carat 0000003F ABS 222 QUESTION EQU "?" handy special character 00000023 ABS 223 HATCH EQU "#" tic-tac-toe board 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 25 (RDUHEAD) F 8 Variable definitions, storage allocation 225 226 ********************************************************************************** 227 * * 228 * Under-program register definitions * 229 * * 230 ********************************************************************************** 231 00000000 ABS 232 UPR0 EQU 00 R0 00000001 ABS 233 UPR1 EQU 01 R1 00000002 ABS 234 UPR2 EQU 02 R2 00000003 ABS 235 UPR3 EQU 03 R3 00000004 ABS 236 UPR4 EQU 04 R4 00000005 ABS 237 UPR5 EQU 05 R5 00000006 ABS 238 UPR6 EQU 06 R6 00000007 ABS 239 UPR7 EQU 07 R7 00000008 ABS 240 UPPC EQU 08 PC 00000009 ABS 241 UPPSR EQU 09 PSR 0000000A ABS 242 UPIMR EQU 0A IMR 0000000B ABS 243 UPIAD EQU 0B IAD 244 245 ********************************************************************************** 246 * * 247 * Symbol types (found in Symbol blocks base SYM) * 248 * * 249 ********************************************************************************** 250 251 * EQU 0 undefined 252 * EQU 1 constant 00000002 ABS 253 SYMTYPEREG EQU 2 register (PC,IMR,IAD,PSR) 254 * EQU 4 BYTE (BITS x:y) 00000005 ABS 255 SYMTYPEGD EQU 5 22-bit goodie word 256 257 258 ********************************************************************************** 259 * * 260 * Symbol mode types for 22-bit goodie words * 261 * * 262 ********************************************************************************** 263 264 *MODEMA EQU 0 direct memory address 265 *MODEIMLZ EQU 1 immediate LJZF 266 *MODEIMRZ EQU 2 immediate RJZF 267 *MODEIMRW EQU 3 immediate RJWF 268 *MODEZBM EQU 4 zig-zag byte mode 00000005 ABS 269 MODECBM EQU 5 circular byte mode 270 *MODEIND EQU 8 indirect 00000009 ABS 271 MODEREG EQU 9 register 272 *MODEPAIR EQU 0A register pair 273 *MODESRO EQU 0B single register offset 274 *MODEDRO EQU 0D double register offset 275 *MODEDROE EQU 0E double register offset 276 *MODESTAK EQU 0F stack mode 277 *MODEID EQU 010 indexed-direct 278 *MODEII EQU 018 indexed-indirect 279 280 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 26 (RDUHEAD) F 8 Variable definitions, storage allocation 281 ********************************************************************************** 282 * * 283 * Symbol display types * 284 * * 285 ********************************************************************************** 286 00000000 ABS 287 DISTYPEDEF EQU 00 use default 288 *DISTYPEI EQU 01 instruction (op-code) 289 *DISTYPED EQU 02 decimal integer 290 *DISTYPED2 EQU 03 double-precision decimal 291 *DISTYPEF EQU 04 floating point 292 *DISTYPEF2 EQU 05 double-precision f.p. 293 *DISTYPEP6 EQU 06 PACK-6 294 *DISTYPEP12 EQU 07 PACK-12 295 *DISTYPEA EQU 08 ASCII 296 *DISTYPEA2 EQU 09 2-word ASCII 0000000A ABS 297 DISTYPEH EQU 0A hexadecimal 298 *DISTYPEO EQU 0B octal 299 *DISTYPEADR EQU 0C 17-bit address 300 *DISTYPEOPN EQU 0D operand (22-bit) 301 *DISTYPEPTR EQU 0E pointer word 302 *DISTYPEN EQU 010 numeric (COBOL/RPG) 303 *DISTYPES EQU 011 string 304 *DISTYPESC EQU 012 scaler 00000013 ABS 305 DISTYPEPC EQU 013 program counter special 306 *DISTYPEHC EQU 014 hexadecimal constant 307 *DISTYPESDF EQU 015 definition of symbol 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 27 (RDUHEAD) F 8 Variable definitions, storage allocation 309 310 ********************************************************************************** 311 * * 312 * The following are the templates for the various block * 313 * structures used within the Debugger. These blocks * 314 * are read in from the .CODE file, pointers are adjusted * 315 * as necessary, and linked into various structures for * 316 * Debugger use. * 317 * * 318 * The first template is the Subprogram ident block definition * 319 * * 320 * ** NOTE: Any changes here must be reflected in "Syms". * 321 * * 322 ********************************************************************************** 323 324 BASE SUB Subprogram block 00174800 5 BASE 325 SUBFPTR BSS 1 "father" pointer 00174801 5 BASE 326 SUBBPTR BSS 1 "brother" pointer 00174802 5 BASE 327 SUBSPTR BSS 1 "son" pointer 0017400C 5 CACH 328 SUBLEVEL BSSB 8 level number 329 BSSB 7 source language 00095F13 5 ZBM 330 SUBBASE BSSB 17 base address 00094014 5 ZBM 331 SUBDBSRC BSSB 1 sez debug source exists 00094214 5 ZBM 332 SUBSRCLST BSSB 1 sez to list source text 00094414 5 ZBM 333 SUBSYMS BSSB 1 sez symbols exist 334 BSSB 5 (open) 335 BSSB 4 source file pointer 00095834 5 ZBM 336 SUBNAMEL BSSB 3 length of name field 00095F14 5 ZBM 337 SUBHIGH BSSB 17 high core address 338 BSSB 16 low source ident block 339 BSSB 16 high source ident block 00174806 5 BASE 340 SUBNAME BSS 1 subprogram name 00174807 5 BASE 341 SUBSBLK BSS 0 small block length 342 BSS2 1 date and time of compilation 343 BSS2 1 debug source file name 0017480B 5 BASE 344 SUBBLK BSS 0 block length 345 DRCT 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 28 (RDUHEAD) F 8 Variable definitions, storage allocation 347 348 ********************************************************************************** 349 * * 350 * Symbol block definition * 351 * * 352 ********************************************************************************** 353 354 BASE SYM Symbol block 355 BSSB 1 sez trailer word present 356 BSSB 1 (open) 00090410 4 ZBM 357 SYMKILLED BSSB 1 sez symbol was killed 00090630 4 ZBM 358 SYMNAMEL BSSB 3 length of symbol name-1 00090C40 4 ZBM 359 SYMTYPE BSSB 4 symbol type 360 BSSB 5 symbol display type 00091F10 4 ZBM 361 SYMPTR BSSB 17 pointer to next block 00091F10 4 ZBM 362 SYMLEN EQU SYMPTR length of symbol block 00170801 4 BASE 363 SYMVALUE BSS 1 symbol value 00170802 4 BASE 364 SYMNAME BSS 1 symbol name (up to 8 words) 365 BSSB 1 sez same name exists 366 BSSB 4 (open) 367 BSSB 5 field length 368 BSSB 5 decimal point position 369 BSSB 17 group pointer, etc. 370 DRCT 371 372 373 ********************************************************************************** 374 * * 375 * Source statement ident block definition * 376 * * 377 ********************************************************************************** 378 00000010 379 SRCBLOCK BASE SRC Source Ident block 00170800 4 BASE 380 SRCINFO BSS 1 various information 381 *SRCLABEL EQU SRCINFO/BIT 0 sez statement has a label 382 *SRCJUMP EQU SRCINFO/BIT 1 sez statement may transfer 383 *SRCTYPE EQU SRCINFO/BITS 4:14 statement type 384 *SRCADDR EQU SRCINFO/BITS 15:31 statement address 00170004 4 CACH 385 SRCLEN BSSB 8 source text length on .RAF 00091181 4 ZBM 386 SRCRAFADR BSSB 24 source text .RAF address 387 DRCT 388 389 390 ********************************************************************************** 391 * * 392 * This defines the Concurrent Process command prototype * 393 * * 394 ********************************************************************************** 395 00000012 396 CPCOMMAND BASE R0 command from concurrent proc 00160000 0 CACH 397 CPDEST BSSC 1 destination of command 00160001 0 CACH 398 CPTIME BSSC 1 extra delay time 00160002 0 CACH 399 CPCLASS BSSC 1 command class 00160003 0 CACH 400 CPSLOT BSSC 1 slot number 00160801 0 BASE 401 CPDATA BSS 1 data for remote system 402 DRCT 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 29 (RDUHEAD) F 8 Variable definitions, storage allocation 403 404 ********************************************************************************** 405 * * 406 * Definition of the breakpoint table blocks. * 407 * * 408 ********************************************************************************** 409 00000014 410 BPIBLOCK BASE BRK 00090010 4 ZBM 411 BPIUSED BSSB 1 on if this breakpoint location is used 00090210 4 ZBM 412 BPIIN BSSB 1 on if breakpoint is in remote machine 413 BSSB 12 unused 00091D20 4 ZBM 414 BPIADDR BSSB 18 address of breakpoint 00170801 4 BASE 415 BPIINSTR BSS 1 instruction at breakpoint 416 DRCT 00000002 ABS 417 BPIBLKLEN EQU DISPW BPIBLOCK 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 30 (RDUHEAD) F 8 Variable definitions, storage allocation 419 420 ********************************************************************************** 421 * * 422 * Impure area allocation * 423 * * 424 ********************************************************************************** 425 426 ORG IMPAGE define impure storage 00000060 ABS 427 OKLEN EQU 96 use a 96 character line 0001A800 428 IBUFFW LABEL 0201A800 429 IBUFF BSSC OKLEN input buffer 0001A818 430 OBUFFW LABEL 0201A818 431 OBUFF BSSC OKLEN output buffer 00000060 ABS 432 SBMAXL EQU OKLEN maximum symbol length 0001A830 433 SBUFFW LABEL 0201A830 434 SBUFF BSSC SBMAXL symbol buffer 00000078 ABS 435 CBLEN EQU 120 max input buffering room 0201A848 436 LBUFF BSSC CBLEN log buffer 437 * RFP communications buffer 0201A866 438 CBUFF BSSC CBLEN plenty of buffering ability 439 0001A884 440 SHIPBPT BSS 1 buffer pointer for SHIPNOP to use 441 0201A885 442 RECBUFF BSSC OKLEN receive string buffer 0001A89D 443 RECENDPTR BSS 1 to end of string in RECBUFF 444 00000083 ABS 445 DOBUFLEN EQU OKLEN+35 want some extra room 0201A89E 446 DOBUFF BSSC DOBUFLEN buffer for remote machine reponses 0001A8BF 447 DOBUFBEG BSS 1 beginning index for DOBUFF 0001A8C0 448 DOBUFEND BSS 1 ending index for DOBUFF 0001A8C1 449 RECVACTIVE BSS 1 flag to indicate we might need these 450 * characters for a RECEIVE or RECEIVE* 451 00000009 ABS 452 BPIMAX EQU 9 maximum number of breakpoints 0001A8C2 453 BPITABLE BSS (BPIMAX+1)*BPIBLKLEN breakpoint table 0001A8D6 454 BPITABTOP LABEL end of the table 455 456 * 457 * Control information for old format, page 128 of code file. 458 * 459 SRCSTRT EQU NEWTREETOP start of source stmnt info 460 SRCTOP EQU NEWARRAYPT top of source stmnt info 461 SYMSTRT EQU NEWSYMFLAG start of sub/sym info 462 SYMTOP EQU NEWUNUSED top of sub/sym info 463 0001A8D6 464 STATE BSS 1 RDU state FFFFFFFF ABS 465 STATENDIAL EQU -1 not dialed in 00000000 ABS 466 STATEPORTZ EQU 0 sez port zero mode 00000001 ABS 467 STATESTOP EQU 1 sez RDU mode, system stopped 00000002 ABS 468 STATERUN EQU 2 sez RDU mode, system running 469 0001A8D7 470 CPSTATE BSS 1 concurrent procesing state 471 * -1 sez Local mode 472 * 0 sez RDU modes 473 * 1 sez C.P. operator/remote 474 * 2 sez C.P. concurrent/remote 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 31 (RDUHEAD) F 8 Variable definitions, storage allocation 475 1A8D8 00000000 476 MOREPROC VFD 0 one sez we are in more processing 477 0001A8D9 478 XFERFLAG BSS 1 file transfer is in progress 479 0001A8DA 480 DOFLAG BSS 1 flag says we are processing from a DO file 0001A8DB 481 DOLIST BSS 1 says we are listing do file commands 0001A8DC 482 DOSUPP BSS 1 says we are suppressing data display 0001A8DD 483 DOUNIT BSS 1 logical unit do file is opened on 484 0001A8DE 485 SYSSTAT BSS 1 remote system status 0001A8DF 486 MAPPED BSS 1 sez remote map recorded 0001A8E0 487 UBREAK BSS 1 user break flag 0001A8E1 488 IOK BSS 1 sez input ok from port zero 0001A8E2 489 INTFLAGS BSS 1 interrupt flags 0001A8E3 490 ORIGIN BSS 1 origin of last bus command 0001A8E4 491 CPZDATA BSS 1 character data from port zero 0001A8E5 492 BUFPT BSS 1 input buffer pointer 0001A8E6 493 LBUFPT BSS 1 last input buffer pointer 0001A8E7 494 TERMCHAR BSS 1 terminating character 0001A8E8 495 TIMETEMP BSS 2 place to keep parts of time 0001A8EA 496 TCGROUP BSS 1 terminating character group 0001A8EB 497 SBL BSS 1 symbol length in SBUFF (w-1) 0001A8EC 498 SBCHARL BSS 1 symbol length (in chars) in SBUFF 0001A8ED 499 VALUE BSS 2 value being looked for 0001A8EF 500 EXITCHAR BSS 1 exit character, initialize as cntl-A 0001A8F0 501 CONVAL BSS 1 constant value 0001A8F1 502 REGVAL BSS 1 register value 0001A8F2 503 TYPE BSS 1 symbol type 0001A8F3 504 DISPTYPE BSS 1 display type of memory display 0001A8F4 505 CALLCLASS BSS 1 class of phone call to use 0001A8F5 506 PHONERATE BSS 1 phone rate value 0001A8F6 507 PASSWORD BSS 2 password for remote site 0001A8F8 508 PHONEFLAG BSS 1 sez phone or port 0001A8F9 509 PHONE BSS SBMAXL/NCPW phone number or port number 0001A911 510 CPI BSS 1 input pointer 0001A912 511 CPO BSS 1 output pointer 0001A913 512 WAITTIME BSS 1 time to wait for I/O happening 0001A914 513 LINEMAX BSS 1 max output lines to terminal 0001A915 514 LINECNT BSS 1 current output line count 0001A916 515 ECHOMODE BSS 1 normal echo mode for RDU 0001A917 516 INLUN BSS 1 lun to use 0001A918 517 OUTLUN BSS 1 output lun to use 1A919 00000000 518 AUXLUN VFD 0 another lun word 0001A91A 519 EQUIPTYPE BSS 1 sez if AUXLUN was linked by RDU or user 0001A91B 520 PATHS BSS 2 input and output path units 0001A91D 521 PROC BSS 1 process number of concurrent 0001A91E 522 UNEQFLAG BSS 1 flag sez to unequip when done 0001A91F 523 ADDRESS BSS 1 address of memory location 0001A920 524 ENDADDRESS BSS 1 end address for scan 0001A921 525 REALADDR BSS 1 biased address of location 0001A922 526 BASEADDR BSS 1 base address for memory refs 0001A923 527 DATALOC BSS 1 location in DATA buffer 0001A924 528 SLOT BSS 1 slot number in use 0001A925 529 NEWSLOT BSS 1 new slot when changing slots 0001A926 530 NEWWRU BSS 1 WRU for new slot 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 32 (RDUHEAD) F 8 Variable definitions, storage allocation 0001A927 531 BANK BSS 1 bank select for memory address 0001A928 532 SUBPC BSS 1 sub pointer for current pc 0001A929 533 SUBADR BSS 1 sub pointer from last relocate 0001A92A 534 SYMSFLAG BSS 1 sez symbols being substituted 0001A92B 535 SYMBIAS BSS 1 bias for symbol output 0001A92C 536 LOCFLAG BSS 1 determines location listing 1A92D 00000000 537 TRACEFLAG VFD 0 1 sez to record trace events in session log 0001A92E 538 LOGFLAG BSS 1 sez whether to print log 0001A92F 539 BPINUM BSS 1 number of breakpoints set 0001A930 540 STEPSET BSS 1 flag if step is in 0001A931 541 BPISIN BSS 1 flag says breakpoint is in 0001A932 542 XCLASS BSS 1 message class 0001A933 543 XSLOT BSS 1 message slot 0001A934 544 XDATA BSS 1 message data 545 DATA EQU RESPBUFFER data area for ssu response 546 DATAW EQU DATA(1) for tricks 547 RTNCOUNT EQU RESPBINDX response item count 548 DATAHEAD EQU RESPBUFFH head of buffer (for send to CP) 0001A935 549 MAPDATA BSS 16*2 place for map data 1A955 00020000 550 MSROFFSET VFD 020000 bias for non-resident code 0001A956 551 MSRBIAS BSS 1 where to store current bias 552 0001A957 553 EQBUF LABEL file equip buffer 554 BSS 2 network 555 BSS 1 system 556 BSS 2 password 557 BSS 2 account 558 BSS 1 project 559 BSS 2 password 0001A961 560 EQNAME BSS 2 file name 0001A963 561 EQEXT BSS 1 extension 562 BSS 2 password 563 BSS 5 other junk 564 0001A96B 565 SLOTTYPE BSS 16 device type for each slot 0001A97B 566 SLOTS LABEL (ordered by device code) 1A97B 00000000 567 VFD 0 always zero 0001A97C 568 MCUSLOT BSS 1 slot number of MCU 0001A97D 569 CPUSLOT BSS 1 slot number of CPU 0001A97E 570 PPUSLOT BSS 1 slot number of PPU 0001A97F 571 SSUSLOT BSS 1 slot number of SSU 00000005 DISP 572 SLOTSNUM EQU DISP SLOTS size of table w/real devices 0001A980 573 PPUPORT BSS 1 port number of PPU 00001840 BYTE 574 PORTSPOT EQU BITS 12:15 place for port in address 0001A981 575 THESSU BSS 1 slot of THE SSU 0000001C ABS 576 SLOTSLEN EQU DISPC SLOTS byte length of table 577 578 * table giving max NVM addresses, defaults to small size 0000000D ABS 579 SSUNVMREV EQU 0D last SSU rev with 128 byte NVM 0001A982 580 SSUNVMMAX LABEL 1A982 0000007F 581 VFD 07F SSUNVMREV and older use this max address 1A983 000007FF 582 VFD 07FF after SSUNVMREV use this max address 1A984 00000000 583 SSUNVMIDX VFD 0 bit map indexed by slot# for SSUNVMMAX index 1A985 0049A984 584 SSUNVMIDXP PTR SSUNVMIDX/BIT 0 pointer to bit map 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 33 (RDUHEAD) F 8 Variable definitions, storage allocation 586 587 ********************************************************************************** 588 * * 589 * The following block definitions are for the predefined * 590 * symbols which are always recognized. The subprogram block * 591 * does not contain brother or son pointers, but is pointed * 592 * to by the global symbol block from the loader when that * 593 * block is loaded by the Debugger. The location TREETOP is * 594 * the very top of the symbol tree, and contains the symbols * 595 * which we have pre-defined. * 596 * The symbols included in TREETOP are the eight general * 597 * registers and the associated hardware registers for status * 598 * and interrupt control. * 599 * * 600 * ** Note: The subprogram and symbol blocks must be * 601 * built in accordance to the templates defined * 602 * previously for SUB and SYM blocks. * 603 * * 604 ********************************************************************************** 605 606 REGDEF MACRO 607 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEGD 608 VFDB 5:$(2),17:$(3) 609 VFD 10:0,5:MODEREG,3:UP$(1),14:0 610 ASCII 1,$(1) 611 EMAC 612 613 REGDEFSP MACRO 614 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEREG 615 VFDB 5:$(2),17:$(3) 616 VFD UP$(1) 617 ASCII 1,$(1) 618 EMAC 619 0001A986 620 TREETOP LABEL 1A986 00000000 621 VFD 0 father 1A987 00000000 622 VFD 0 brother 1A988 00000000 623 VFD 0 son 1A989 00000000 624 VFD 8:0,7:0,17:0 level,lang,base 1A98A 0001FFFF 625 VFDB 1:0,1:0,1:1,5:0,4:0,3:0,17:MAXADR 1A98B 00000000 626 VFDB 16:0,16:0 source ident stuff 1A98C 00000000 627 VFD 0 name (blank) 1A98E 00000000 628 VFD 0,0 date and time 1A990 00000000 629 VFD 0,0 debug source file 630 0001A991 631 SYMR0 LABEL 632 REGDEF R0,DISTYPEDEF,ADR SYMR1 1A990 00000005 632 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEGD 1A991 0141A994 632 VFDB 5:DISTYPEDEF,17:ADR SYMR1 1A992 00000000 632 VFD 10:0,5:MODEREG,3:UPR0,14:0 1A993 52302020 632 ASCII 1,R0 0001A994 633 SYMR1 LABEL 634 REGDEF R1,DISTYPEDEF,ADR SYMR2 1A993 00000005 634 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEGD 1A994 0141A997 634 VFDB 5:DISTYPEDEF,17:ADR SYMR2 1A995 00000000 634 VFD 10:0,5:MODEREG,3:UPR1,14:0 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 34 (RDUHEAD) F 8 Variable definitions, storage allocation 1A996 52312020 634 ASCII 1,R1 0001A997 635 SYMR2 LABEL 636 REGDEF R2,DISTYPEDEF,ADR SYMR3 1A996 00000005 636 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEGD 1A997 0141A99A 636 VFDB 5:DISTYPEDEF,17:ADR SYMR3 1A998 00000000 636 VFD 10:0,5:MODEREG,3:UPR2,14:0 1A999 52322020 636 ASCII 1,R2 0001A99A 637 SYMR3 LABEL 638 REGDEF R3,DISTYPEDEF,ADR SYMR4 1A999 00000005 638 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEGD 1A99A 0141A99D 638 VFDB 5:DISTYPEDEF,17:ADR SYMR4 1A99B 00000000 638 VFD 10:0,5:MODEREG,3:UPR3,14:0 1A99C 52332020 638 ASCII 1,R3 0001A99D 639 SYMR4 LABEL 640 REGDEF R4,DISTYPEDEF,ADR SYMR5 1A99C 00000005 640 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEGD 1A99D 0141A9A0 640 VFDB 5:DISTYPEDEF,17:ADR SYMR5 1A99E 00000000 640 VFD 10:0,5:MODEREG,3:UPR4,14:0 1A99F 52342020 640 ASCII 1,R4 0001A9A0 641 SYMR5 LABEL 642 REGDEF R5,DISTYPEDEF,ADR SYMR6 1A99F 00000005 642 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEGD 1A9A0 0141A9A3 642 VFDB 5:DISTYPEDEF,17:ADR SYMR6 1A9A1 00000000 642 VFD 10:0,5:MODEREG,3:UPR5,14:0 1A9A2 52352020 642 ASCII 1,R5 0001A9A3 643 SYMR6 LABEL 644 REGDEF R6,DISTYPEDEF,ADR SYMR7 1A9A2 00000005 644 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEGD 1A9A3 0141A9A6 644 VFDB 5:DISTYPEDEF,17:ADR SYMR7 1A9A4 00000000 644 VFD 10:0,5:MODEREG,3:UPR6,14:0 1A9A5 52362020 644 ASCII 1,R6 0001A9A6 645 SYMR7 LABEL 646 REGDEF R7,DISTYPEDEF,ADR SYMPC 1A9A5 00000005 646 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEGD 1A9A6 0141A9A9 646 VFDB 5:DISTYPEDEF,17:ADR SYMPC 1A9A7 00000000 646 VFD 10:0,5:MODEREG,3:UPR7,14:0 1A9A8 52372020 646 ASCII 1,R7 0001A9A9 647 SYMPC LABEL 648 REGDEFSP PC,DISTYPEPC,ADR SYMPSR 1A9A8 00000002 648 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEREG 1A9A9 00A7A9AC 648 VFDB 5:DISTYPEPC,17:ADR SYMPSR 1A9AA 00000008 648 VFD UPPC 1A9AB 50432020 648 ASCII 1,PC 0001A9AC 649 SYMPSR LABEL 650 REGDEFSP PSR,DISTYPEH,ADR SYMIMR 1A9AB 00000002 650 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEREG 1A9AC 0095A9AF 650 VFDB 5:DISTYPEH,17:ADR SYMIMR 1A9AD 00000009 650 VFD UPPSR 1A9AE 50535220 650 ASCII 1,PSR 0001A9AF 651 SYMIMR LABEL 652 REGDEFSP IMR,DISTYPEH,ADR SYMIAD 1A9AE 00000002 652 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEREG 1A9AF 0095A9B2 652 VFDB 5:DISTYPEH,17:ADR SYMIAD 1A9B0 0000000A 652 VFD UPIMR 1A9B1 494D5220 652 ASCII 1,IMR 0001A9B2 653 SYMIAD LABEL 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 35 (RDUHEAD) F 8 Variable definitions, storage allocation 654 REGDEFSP IAD,DISTYPEH,0 1A9B1 00000002 654 VFDB 1:0,1:0,1:0,3:0,4:SYMTYPEREG 1A9B2 00000000 654 VFDB 5:DISTYPEH,17:0 1A9B3 0000000B 654 VFD UPIAD 1A9B4 49414420 654 ASCII 1,IAD 655 656 0001A9B5 657 MASTOP LABEL end of memory address stack 658 BSS 40 seems like a good number 0001A9DD 659 MASTACK LABEL memory address pointer stack 1A9DD FFFFFFFF 660 VFD -1 catch for stack underflows 0001A9DE 661 MASPTR BSS 1 place to keep stack pointer 0001A9DF 662 LASTADRPTR BSS 1 pointer to last address in buffer 0001A9E0 663 CIRCLEFLAG BSS 1 sez buffer has circled around 0001A9E1 664 DONEBUF BSS 1 0 if more in buffer to list 665 * 1 if buffer has all been listed 666 667 BSS 100 allocate enough stack 0001AA46 668 STACK LABEL stack area 117 118 INPUT RDULDEFS 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 36 (RDULDEFS) F 9 Variable definitions, storage allocation 2 3 ********************************************************************************** 4 * * 5 * The definitions and variables are used for the session log routines. * 6 * * 7 ********************************************************************************** 8 0001AA46 9 LOBP BSS 1 position in LBUFF 0001AA47 10 CRFLAG BSS 1 flag a CR 0001AA48 11 LBUFFUL BSS 1 flag an empty buffer 0001AA49 12 HDRLEN BSS 1 0001AA4A 13 HDRINFOLEN BSS 1 0001AA4B 14 EVENTLEN BSS 1 the length in chars of event 0001AA4C 15 EVENTADDR BSS 1 a Pointer to where the chars are 0001AA4D 16 EVENTTYPE BSS 1 XREQ code for Write 1AA4E 00000001 17 LOGSESSION VFD 1 set sez to log the session. 0001AA4F 18 FILEERROR BSS 1 set sez problems with Batch or Log File 1AA50 00000000 19 LOGFILOPEN VFD 0 set sez log file is open 00000050 ABS 20 LINEWIDTH EQU 80 how wide we expect to print 0001AA51 21 SYSNUM BSS 1 remote system number 22 1AA52 2A442020 23 INITMESS1 TEXTZ "*D RDU v" 1AA56 20205379 24 INITMESS2 TEXTZ " System " 1AA59 20202054 25 INITMESS3 TEXTZ " Taken By " 26 1AA5D 94408988 27 NAMEBANG PAK12 NAME! the session variable that holds initials 1AA5F 5244553A 28 LOGPRMPT TEXT "RDU:" 29 0001AA60 30 LOGLUN BSS 1 The unit we link session file to 0001AA61 31 BATCHLUN BSS 1 The unit we build the batch Job on 32 1AA62 420DAA71 33 EXTPTR PTR EXTEND Ptr to the File Extend 0001AA63 34 EXTLEN BSS 1 35 1AA64 3E436F70 36 BATCHLINE TEXT ">Copy O=.LP I= " Print command 0000000D ABS 37 FNLEN EQU 13 length of file name including . 0201AA6E 38 FILENAME BSSC FNLEN where to put the file name 00000035 ABS 39 BLLEN EQU DISPC BATCHLINE 4201AA71 40 EXTEND BSSC 6 1AA73 C20DAA70 41 FNMINPTR PTR FILENAME(11) where the low order digit of the minutes 42 * will reside in the file name 1AA74 820DAA70 43 FNMINHPTR PTR FILENAME(10) where the high order digit of minutes lies 44 1AA75 3C424154 45 DOTBATCH TEXT "" 00000011 ABS 46 BATCHLEN EQU 17 length of batch name 00000006 ABS 47 MAXDIGGIES EQU 6 48 0201AA7A 49 INITIALS BSSC 10 0000000A ABS 50 ILEN EQU DISPC INITIALS 1AA7D 020DAA7A 51 INITPTR PTR INITIALS 119 120 INPUT NEWSYMIMPR 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 37 (NEWSYMIMPR) F 10 Variable definitions, storage allocation 2 3 ********************************************************************************** 4 * * 5 * Here is a template for the subprogram descriptor using * 6 * the newest symbol information. These blocks are linked * 7 * in a tree structure using a father pointer, a brother * 8 * pointer, and a son pointer. Each block defines a subprogram * 9 * and points to lists of its associated symbols and source * 10 * statements. * 11 * * 12 * Labels that take the form DBONLY are bits that * 13 * were unused by the ASSEMBLER, LINK, DEBUG, etc. and are * 14 * used internally by this debugger. * 15 * * 16 ********************************************************************************** 17 18 BASE SUB 00174800 5 BASE 19 PTRBLOCK LABEL 00174800 5 BASE 20 NEWDADPTR BSS 1 father pointer 00174801 5 BASE 21 NEWBROPTR BSS 1 brother pointer 00174802 5 BASE 22 NEWSONPTR BSS 1 son pointer 00174803 5 BASE 23 NEWSYMPTR BSS 1 pointer to head of symbol list for this subprogram 00174804 5 BASE 24 NEWSRCPTR BSS 1 pointer to head of source list for this subprogram 00000005 ABS 25 PTRBLOKLEN EQU DISPW PTRBLOCK 00174014 5 CACH 26 NEWCOMPID BSSB 8 the compiler id code 00095185 5 ZBM 27 NEWSYMWRDS BSSB 24 number of words in the entire symbol list 00174018 5 CACH 28 NEWFCHARLN BSSB 8 number of chracters in the .DEBUG file name 00095186 5 ZBM 29 NEWSRCWRDS BSSB 24 number of words in the entire source list 000940C7 5 ZBM 30 NEWOVLAYID BSSB 12 overlay id 00095817 5 ZBM 31 NEWLONGBLK BSSB 1 1 sez option information is tacked on to the end 00095A17 5 ZBM 32 NEWNOCODE BSSB 1 1 sez no executable code within this subprogram 00095C17 5 ZBM 33 NEWTEXTYES BSSB 1 1 sez text for source statements exists 00095F17 5 ZBM 34 NEWLOWADDR BSSB 17 base address of this subprogram 00094038 5 ZBM 35 NEWNAMELEN BSSB 3 words in the subprogram name field 00094618 5 ZBM 36 NEWALLCODE BSSB 1 1 sez ALL executable code resides within this subprogram 00094848 5 ZBM 37 SRCFLDBONLY BSSB 4 used to link subprograms to source text files 00095018 5 ZBM 38 SBLSTDBONLY BSSB 1 1 sez list out source statements 39 BSSB 6 unused 00095F18 5 ZBM 40 NEWHIGHADR BSSB 17 high address of this subprogram 00000009 ABS 41 SHORTNONAM EQU DISPW NEWDADPTR 00094019 5 ZBM 42 NEWSUBCASE BSS 1:32 first word of name sez case of corresponding letter 0009406A 5 ZBM 43 NEWSUBNAME BSS 6:1 first packed character of the name 44 * 45 * Optional information that may follow 46 * 0017480B 5 BASE 47 NEWDATE BSS 2 date of compilation 00000002 ABS 48 OPTIONLEN EQU DISPW NEWDATE 0017480D 5 BASE 49 NEWDEBNAME BSS 1 first word of .DEBUG file name with source text in it 50 DRCT 51 52 ********************************************************************************** 53 * * 54 * Possible values for the various subprogram descriptor fields. * 55 * * 56 ********************************************************************************** 57 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 38 (NEWSYMIMPR) F 10 Variable definitions, storage allocation 58 * 59 * Compiler IDs 60 * 61 ********************************************************************************** 62 *NEWASS EQU 0 assembler * 63 *NEWDRAGON EQU 1 DRAGON * 64 *NEWPASCAL EQU 2 PASCAL * 65 *NEWFORTRAN EQU 3 FORTRAN * 66 *NEWCOBOL EQU 4 COBOL * 67 *NEWBASIC EQU 5 BASIC * 68 ********************************************************************************** 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 39 (NEWSYMIMPR) F 10 Variable definitions, storage allocation 70 71 ********************************************************************************** 72 * * 73 * Here is a template for the symbol block descriptor using * 74 * the newest symbol information. These blocks are linked * 75 * together using a relative forward pointer. * 76 * * 77 ********************************************************************************** 78 79 BASE SYM 00090040 4 ZBM 80 NEWSYMTYPE BSSB 4 type of the symbol 00090860 4 ZBM 81 NEWDSPTYPE BSSB 6 display type of symbol 00091420 4 ZBM 82 NEWINDTYPE BSSB 2 defines if symbol is really a memory pointer 00091810 4 ZBM 83 NEWSYMXTRA BSSB 1 1 sez an optional block is tacked on to this block 00091A10 4 ZBM 84 SKILLDBONLY BSSB 1 1 sez symbol is killed, used within debugger only 85 BSSB 1 unused 00091F10 4 ZBM 86 NEWNEXTSYM BSSB 17 relative pointer to next block 00090061 4 ZBM 87 NEWSYMNAMEL BSSB 6 length in words of the symbol name 00090C11 4 ZBM 88 NEWINDEX1 BSSB 1 1 sez array idices start at 1 instead of 0 00090E31 4 ZBM 89 NEWSYMREG BSSB 3 register associated with symbol 00091561 4 ZBM 90 NEWELEMS BSSB 22 number of elements if symbol is an array 00170802 4 BASE 91 NEWSYMVALU BSS 1 value of the symbol 00090013 4 ZBM 92 NEWSYMCASE BSS 1:32 first word of name sez case of corresponding letter 00090064 4 ZBM 93 NEWSYMNAME BSS 6:1 first packed character of the name 94 DRCT 95 96 ********************************************************************************** 97 * * 98 * Possible values for the various symbol block descriptor fields. * 99 * * 100 ********************************************************************************** 101 102 * 103 * Symbol types 104 * 00000000 ABS 105 NEWREG EQU 0 register 00000001 ABS 106 NEWMEM EQU 1 virtual memory 107 ********************************************************************************** 108 *NEWCON1 EQU 2 one word constant * 109 *NEWCON2 EQU 3 two word constant * 110 *NEWFIELDDF EQU 4 field definition relative to unspecified starting point* 111 *NEWREGFLD EQU 5 field definition relative to a base register* 112 *NEWUNDEF1 EQU 6 symbol was never defined * 113 *NEWUNDEF2 EQU 7 symbol cannot be defined * 114 *NEWNOVAL EQU 8 symbol has no data value of its own * 115 *NEWRECORD EQU 9 record type * 116 *NEWSYMENUM EQU 10 symbol defines an enumerated type * 117 ********************************************************************************** 118 * 119 * Display types 120 * 00000000 ABS 121 NEWDEFAULT EQU 0 the default 122 ********************************************************************************** 123 *NEWINST EQU 1 an instruction * 124 *NEWDEC EQU 2 a decimal number * 125 *NEWDPDEC EQU 3 a double-precision decimal number * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 40 (NEWSYMIMPR) F 10 Variable definitions, storage allocation 126 *NEWFLOAT EQU 4 a floating point number * 127 *NEWDPFP EQU 5 a double-precision floating point number * 128 *NEWPAK6 EQU 6 one word of PAK 6 * 129 *NEWASCII EQU 7 one ASCII word * 130 *NEWCOBOLSW EQU 8 COBOL switch, ON or OFF * 131 *NEWBOOL EQU 9 a boolean, TRUE or FALSE * 132 ********************************************************************************** 0000000A ABS 133 NEWHEX EQU 10 a hex number 134 ********************************************************************************** 135 *NEWOCT EQU 11 an octal number * 136 *NEWPACKD EQU 12 a packed decimal number * 137 *NEWNUMUNS EQU 13 unsigned numeric * 138 *NEWNUMCOM EQU 14 numeric with leading combined sign * 139 *NEWNUMSEP EQU 15 numeric with leading separate sign * 140 *NEWNUMCOMT EQU 16 numeric with trailing combined sign * 141 *NEWNUMSEPT EQU 17 numeric with trailing separate sign * 142 *NEWTEXT EQU 18 a text string * 143 *NEWPSTRNG EQU 19 a PASCAL string * 144 *NEWDRAGSTR EQU 20 a DRAGON string (string ptr.) * 145 *NEWPDD EQU 21 a packed decimal descriptor * 146 *NEWCOBDOPE EQU 22 a COBOL dope vector * 147 *NEWSCALAR EQU 23 a scalar * 148 *NEWPASCREC EQU 24 a PASCAL record * 149 *NEWUSEOTHR EQU 25 use another symbol for display type * 150 *NEWADDR32 EQU 26 a 32-bit address * 151 *NEWOPRND22 EQU 27 a 22-bit operand * 152 *NEWHARDPTR EQU 28 hardware pointer * 153 *NEWDEFSYM EQU 29 definition of a symbol * 154 ********************************************************************************** 155 * 156 * Not generated by the assembler 157 * 158 ********************************************************************************** 159 *NEWPAK12 EQU 30 PAK12 * 160 *NEWASCII2 EQU 31 double-word ASCII * 161 *NEWTIME2 EQU 32 double-word time * 162 *NEWTIME1 EQU 33 single-word time * 163 *NEWHEXCON EQU 34 hex constant * 164 ********************************************************************************** 00000023 ABS 165 NEWPC EQU 35 PC special 166 ********************************************************************************** 167 *NEWMAXDTYP EQU 35 the max display type this version of the debugger knows* 168 ********************************************************************************** 169 * 170 * Indirect types 171 * 00000000 ABS 172 NEWNOIND EQU 0 no indirection 173 ********************************************************************************** 174 *NEWINDHARD EQU 1 indirection through a hardware pointer * 175 *NEWINDPTR EQU 2 indirection through a 17-bit address * 176 ********************************************************************************** 177 * 178 * Conversion codes for the packed symbol names 179 * 00000000 ABS 180 SYMNONE EQU 0 no symbol associated with a zero 00000001 ABS 181 SYMA EQU 1 A 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 41 (NEWSYMIMPR) F 10 Variable definitions, storage allocation 00000002 ABS 182 SYMB EQU 2 B 00000003 ABS 183 SYMC EQU 3 C 00000004 ABS 184 SYMD EQU 4 D 00000005 ABS 185 SYME EQU 5 E 00000006 ABS 186 SYMF EQU 6 F 00000007 ABS 187 SYMG EQU 7 G 00000008 ABS 188 SYMH EQU 8 H 00000009 ABS 189 SYMI EQU 9 I 0000000A ABS 190 SYMJ EQU 10 J 0000000B ABS 191 SYMK EQU 11 K 0000000C ABS 192 SYML EQU 12 L 0000000D ABS 193 SYMM EQU 13 M 0000000E ABS 194 SYMN EQU 14 N 0000000F ABS 195 SYMO EQU 15 O 00000010 ABS 196 SYMP EQU 16 P 00000011 ABS 197 SYMQ EQU 17 Q 00000012 ABS 198 SYMR EQU 18 R 00000013 ABS 199 SYMS EQU 19 S 00000014 ABS 200 SYMT EQU 20 T 00000015 ABS 201 SYMU EQU 21 U 00000016 ABS 202 SYMV EQU 22 V 00000017 ABS 203 SYMW EQU 23 W 00000018 ABS 204 SYMX EQU 24 X 00000019 ABS 205 SYMY EQU 25 Y 0000001A ABS 206 SYMZ EQU 26 Z 0000001B ABS 207 SYM0 EQU 27 0 0000001C ABS 208 SYM1 EQU 28 1 0000001D ABS 209 SYM2 EQU 29 2 0000001E ABS 210 SYM3 EQU 30 3 0000001F ABS 211 SYM4 EQU 31 4 00000020 ABS 212 SYM5 EQU 32 5 00000021 ABS 213 SYM6 EQU 33 6 00000022 ABS 214 SYM7 EQU 34 7 00000023 ABS 215 SYM8 EQU 35 8 00000024 ABS 216 SYM9 EQU 36 9 00000025 ABS 217 SYMBANG EQU 37 ! 00000026 ABS 218 SYMAMPER EQU 38 & 00000027 ABS 219 SYMUNDER EQU 39 _ 00000027 ABS 220 SYMDASH EQU 39 - (same as SYMUNDER) 00000027 ABS 221 MAXPAKDCHR EQU 39 the biggest packed character at this time 00000006 ABS 222 PAKCHRBITS EQU 6 number of bits to hold a packed character 223 * 224 * Values of the registers 225 * 00000000 ABS 226 VALUEOFR0 EQU 0 R0 00000001 ABS 227 VALUEOFR1 EQU 1 R1 00000002 ABS 228 VALUEOFR2 EQU 2 R2 00000003 ABS 229 VALUEOFR3 EQU 3 R3 00000004 ABS 230 VALUEOFR4 EQU 4 R4 00000005 ABS 231 VALUEOFR5 EQU 5 R5 00000006 ABS 232 VALUEOFR6 EQU 6 R6 00000007 ABS 233 VALUEOFR7 EQU 7 R7 00000008 ABS 234 VALUEOFPC EQU 8 PC 00000009 ABS 235 VALUEOFPSR EQU 9 PSR 0000000A ABS 236 VALUEOFIMR EQU 10 IMR 0000000B ABS 237 VALUEOFIAD EQU 11 IAD 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 42 (NEWSYMIMPR) F 10 Variable definitions, storage allocation 239 240 ********************************************************************************** 241 * * 242 * Buffers, pointers, and counters for converting ASCII characters * 243 * to packed characters for searching and for converting packed * 244 * characters to ASCII for printing. * 245 * * 246 ********************************************************************************** 247 00000008 ABS 248 MAXSYMWRDS EQU 8 maximum number of words in a name 00000020 ABS 249 MAXSYMCHRS EQU 32 maximum number of characters in a name 250 * 251 * This is the buffer that is used to hold a converted ASCII 252 * character string. The first bit array holds the case flag 253 * associated with the corresponding letter. The second array 254 * is MAXSYMCHARS long with each entry being PAKCHRBITS long. 255 * Note that these two buffers MUST be consecutive. 256 * 0041AA91 257 SRCHCASEBF BSSB 1:MAXSYMCHRS an upper/lower case bit for each entry 0181AA92 258 SRCHBUFF BSSB PAKCHRBITS:MAXSYMCHRS enough to hold the max 259 BSS 0 force a word boundary 0000001C ABS 260 LENTOZERO EQU DISPC SRCHCASEBF used to zero both buffers 261 0001AA98 262 SRCHBUFLN BSS 1 holds the length in packed chars 1AA99 0049AA91 263 SRCHCASEPT PTR SRCHCASEBF pointer to the bit array 1AA9A 0189AA92 264 SRCHBUFFPT PTR SRCHBUFF pointer to the packed item array 265 * 266 * This buffer holds a maximum of MAXSYMWRDS*CPW ASCII 267 * characters that have been converted from a packed 268 * character string. 269 * 0001AA9B 270 ASCIIBUFF BSS MAXSYMWRDS buffer for output 271 0001AAA3 272 ASCIIBUFLN BSS 1 holds the length of the buffer 1AAA4 020DAA9B 273 ASCIIBUFPT PTR ASCIIBUFF/BITS 0:7 character pointer 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 43 (NEWSYMIMPR) F 10 Variable definitions, storage allocation 275 276 ********************************************************************************** 277 * * 278 * Here is a template for the source block descriptor using * 279 * the newest symbol information. These blocks are arranged * 280 * in ascending address order starting at the memory location * 281 * pointed to by NEWSRCTOP and continuing on for NEWSRCLEN * 282 * words. * 283 * * 284 ********************************************************************************** 285 286 BASE SRC 00170800 4 BASE 287 NEWSRCADDR BSS 1 character address in file of source text record 000901B1 4 ZBM 288 NEWSTATNUM BSSB 27 statement number 00093611 4 ZBM 289 NEWLABLFLG BSSB 1 statement has a label 00093811 4 ZBM 290 NEWXFERFLG BSSB 1 statement can be transferer to 291 BSSB 3 space holders 00170008 4 CACH 292 NEWSRCTYPR BSSB 8 type of source statement 293 BSSB 7 more space holders 00091F12 4 ZBM 294 NEWSRCBASE BSSB 17 base address of statement code 0017000C 4 CACH 295 NEWTXTRECS BSSB 8 count of source statement text records 296 BSSB 7 more space holders 00091F13 4 ZBM 297 NEWSRCINST BSSB 17 number of instructions making up the source statement 00000004 ABS 298 NEWSRCBLEN EQU DISPW NEWSRCADDR word length of a source block 299 DRCT 300 301 ********************************************************************************** 302 * * 303 * Possible values for the various source block descriptor fields. * 304 * * 305 ********************************************************************************** 306 307 * 308 * source types, PASCAL 309 * 310 ********************************************************************************** 311 *NEWPUNKNWN EQU 0 undefined for PASCAL * 312 *NEWPASASS EQU 1 assignment * 313 *NEWPASGOTO EQU 2 GOTO * 314 *NEWPASIF EQU 3 IF * 315 *NEWPASCASE EQU 4 CASE * 316 *NEWPASWHIL EQU 5 WHILE * 317 *NEWPASUNTL EQU 6 UNTIL * 318 *NEWPASFOR EQU 7 FOR * 319 *NEWPASWITH EQU 8 WITH * 320 *NEWPASLEND EQU 9 LOOP END * 321 *NEWPASRETN EQU 10 RETURN * 322 *NEWPASECSE EQU 11 END of CASE * 323 *NEWPASON EQU 12 ON * 324 *NEWPASEFOR EQU 13 END of FOR * 325 *NEWPASWHEN EQU 14 WHEN within a LOOP * 326 *NEWPASEWEN EQU 15 WHEN to EXIT a LOOP * 327 *NEWPASENTR EQU 16 procedure entry point * 328 *NEWPASPCAL EQU 17 a procedure call * 329 *NEWPASEWIL EQU 18 END of WHILE * 330 *NEWPASESUB EQU 19 END of a subcase within a CASE * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 44 (NEWSYMIMPR) F 10 Variable definitions, storage allocation 331 *NEWPASSYS EQU 20 a system call * 332 ********************************************************************************** 333 * 334 * source types, FORTRAN 335 * 336 ********************************************************************************** 337 *NEWFUNKNWN EQU 0 unknown in FORTRAN * 338 *NEWFORASS EQU 1 assignment * 339 *NEWFORGOTO EQU 2 GOTO * 340 *NEWASSGOTO EQU 3 assigned GOTO * 341 *NEWCOMGOTO EQU 4 computed GOTO * 342 *NEWFORARIF EQU 5 arithmetic IF * 343 *NEWFORLGIF EQU 6 logical IF * 344 *NEWFORBKIF EQU 7 IF with block * 345 *NEWFORIFEL EQU 8 ELSE associated with IF * 346 *NEWFOREIF EQU 9 END of an IF * 347 *NEWFORELSE EQU 10 ELSE * 348 *NEWFORCONT EQU 11 CONTINUE * 349 *NEWFORDO EQU 12 DO * 350 *NEWFORSTOP EQU 13 STOP * 351 *NEWFORPAUS EQU 14 PAUSE * 352 *NEWFORREAD EQU 15 READ * 353 *NEWFORWRIT EQU 16 WRITE * 354 *NEWFORPRIN EQU 17 PRINT * 355 *NEWFORRWND EQU 18 REWIND * 356 *NEWFORBKSP EQU 19 backspace a file one record * 357 *NEWFORWEOF EQU 20 WRITE EOF to file * 358 *NEWFOROPEN EQU 21 OPEN * 359 *NEWFORCLOS EQU 22 CLOSE * 360 *NEWFORINFO EQU 23 retrieve infomation about a file * 361 *NEWFORSFUN EQU 24 statement function statement * 362 *NEWFORCALL EQU 25 subroutine CALL * 363 *NEWFORSUBR EQU 26 subroutine RETURN * 364 *NEWFOREND EQU 27 END * 365 *NEWFORNONE EQU 28 nothing here right now * 366 *NEWFORTRNS EQU 29 begining of a transaction * 367 *NEWFORETRN EQU 30 end of a transaction * 368 ********************************************************************************** 369 * 370 * source types, COBOL 371 * 372 ********************************************************************************** 373 *NEWCOBEXIT EQU 0 EXIT * 374 *NEWCOBIF EQU 1 IF * 375 *NEWCOBGOTO EQU 2 GOTO * 376 *NEWCOBACPT EQU 3 ACCEPT * 377 *NEWCOBADD EQU 4 ADD * 378 *NEWCOBALTR EQU 5 ALTER * 379 *NEWCOBTRAN EQU 6 beginning of a transaction * 380 *NEWCOBCALL EQU 7 CALL * 381 *NEWCOBCNCL EQU 8 CANCEL * 382 *NEWCOBCLOS EQU 9 CLOSE * 383 *NEWCOBCMPT EQU 10 COMPUTE * 384 *NEWCOBDEL EQU 11 DELETE * 385 *NEWCOBDISP EQU 12 DISPLAY * 386 *NEWCOBDIV EQU 13 DIVIDE * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 45 (NEWSYMIMPR) F 10 Variable definitions, storage allocation 387 *NEWCOBETRN EQU 14 end of a transaction * 388 *NEWCOBENTR EQU 15 ENTER * 389 *NEWCOBINSP EQU 16 INSPECT * 390 *NEWCOBMRGE EQU 17 MERGE * 391 *NEWCOBMOVE EQU 18 MOVE * 392 *NEWCOBMULT EQU 19 MULTIPLY * 393 *NEWCOBOPEN EQU 20 OPEN * 394 *NEWCOBPERF EQU 21 PERFORM * 395 *NEWCOBREAD EQU 22 READ * 396 *NEWCOBRLSE EQU 23 RELEASE * 397 *NEWCOBRTRN EQU 24 RETURN * 398 *NEWCOBREWR EQU 25 REWRITE * 399 *NEWCOBSRCH EQU 26 SEARCH * 400 *NEWCOBSET EQU 27 SET * 401 *NEWCOBSORT EQU 28 SORT * 402 *NEWCOBSTRT EQU 29 START * 403 *NEWCOBSTOP EQU 30 STOP * 404 *NEWCOBSTRG EQU 31 STRING * 405 *NEWCOBSUB EQU 32 SUBTRACT * 406 *NEWCOBSYS EQU 33 SYSTEM * 407 *NEWCOBUNLK EQU 34 UNLOCK * 408 *NEWCOBUNST EQU 35 UNSTRING * 409 *NEWCOBWRTE EQU 36 WRITE * 410 ********************************************************************************** 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 46 (NEWSYMIMPR) F 10 Variable definitions, storage allocation 412 413 ********************************************************************************** 414 * * 415 * The control block for the new symbol format (page 128 of file). * 416 * * 417 ********************************************************************************** 418 0001AAA9 419 NEWCONTROL LABEL here it is 0001AAA9 420 NEWTREETOP BSS 1 pointer to the first subprogram descriptor 0001AAAA 421 NEWARRAYPT BSS 1 address of an array of overlay pointers 0001AAAB 422 NEWSYMFLAG BSS 1 non-zero sez that symbols really do exists Virginia 0001AAAC 423 NEWUNUSED BSS 1 unused 0001AAAD 424 NEWFORMAT BSS 1 format of the debugger symbol info 0001AAAE 425 NEWSUBTOP BSS 1 pointer to top of subprogram descriptor area 0001AAAF 426 NEWSUBLEN BSS 1 length in words of subprogram descriptor area 0001AAB0 427 NEWSYMTOP BSS 1 pointer to top of symbol block descriptor area 0001AAB1 428 NEWSYMLEN BSS 1 length in words of symbol block descriptor area 0001AAB2 429 NEWSRCTOP BSS 1 pointer to top of source block descriptor area 0001AAB3 430 NEWSRCLEN BSS 1 length in words of source block descriptor area 0001AAB4 431 NEWTEXTTOP BSS 1 pointer to top of text record area 0001AAB5 432 NEWTEXTLEN BSS 1 length in words of text record area 433 BSS 10 overlay shit 00000017 ABS 434 NEWCNTRLLN EQU DISPW NEWCONTROL length of the control area for the new format 00000001 ABS 435 NEWFORMCOD EQU 1 in NEWFORMAT field this signifies the NEW symbol format 436 437 ********************************************************************************** 438 * * 439 * Other control variables for the new symbol format. * 440 * * 441 ********************************************************************************** 442 0001AAC0 443 USINGNEW BSS 1 1 sez new format, 0 sez old format 0001AAC1 444 HIGHADDR BSS 1 high memory address used by symbol info 0001AAC2 445 HIGHPAGE BSS 1 high page number used by symbol info 0201AAC3 446 ASCFILENAM BSSC 12 buffer to hold ASCII name for PAK12ing 0001AAC6 447 PAK12FNAME BSS2 1 PAK12 result of above buffer 448 *GLBLDSPCOD VFD 0 anything but FIELDCODE to start (see Display) 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 47 (NEWSYMIMPR) F 10 Variable definitions, storage allocation 450 451 ********************************************************************************** 452 * * 453 * Here is the top of the tree for the new symbol format. It is * 454 * basically an empty entry that will have and son pointer to the * 455 * top of the real tree. It also points to a symbol list that * 456 * contains the registers. * 457 * * 458 ********************************************************************************** 459 00000005 ABS 460 REGSYMSIZE EQU 5 size of a register symbol block 0000000C ABS 461 NUREG EQU 12 the number of registers we know about 00000000 ABS 462 NILPTR EQU 0 the end of a list 463 1AAC8 00000000 464 NEWTREEHED VFD 0 no daddy 1AAC9 00000000 465 VFD 0 no bro' 1AACA 00000000 466 VFD 0 no kids for now 1AACB 0001AD18 467 ADR NEWREGSYMS top of register symbols list 1AACC 00000000 468 VFD 0 no source statements here 1AACD 0000003C 469 VFD 8:0,24:REGSYMSIZE*NUREG 1AACE 00000000 470 VFD 8:0,24:0 1AACF 00000000 471 VFD 12:0,1:1,1:0,1:0,17:0 1AAD0 0001FFFF 472 VFD 3:1,1:1,11:0,17:01FFFF 1AAD1 00000000 473 VFD 0 1AAD3 00000000 474 VFD 0,0 place for the date 1AAD5 00000000 475 VFD 0,0 no debug file 121 122 INPUT RDUPURE 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 48 (RDUPURE) F 11 Variable definitions, storage allocation 2 3 ********************************************************************************** 4 * * 5 * Now for the pure-code area definitions * 6 * * 7 ********************************************************************************** 8 9 ORG PUREPAGE relocate correctly 10 00001F30 BYTE 11 NXTCHAR EQU BITS 15:1 buffer address increment 1AC00 020DA800 12 IBPT PTR IBUFF input buffer pointer 1AC01 020DA818 13 OBPT PTR OBUFF output buffer pointer 1AC02 020DA830 14 SBPT PTR SBUFF symbol buffer pointer 1AC03 020DA866 15 CBPT PTR CBUFF comm buffer pointer 1AC04 020DA848 16 LBPT PTR LBUFF log buffer pointer 1AC05 420DA848 17 LBPT1 PTR LBUFF(1) pointer to second character 1AC06 020DA885 18 RECPT PTR RECBUFF pointer to receive string buffer 1AC07 020DA89E 19 DOBFPT PTR DOBUFF pointer to do file response buffer 1AC08 0049A8E2 20 TOFLAG PTR INTFLAGS/BIT 0 sez timeout occurred 1AC09 0849A8E2 21 PDFLAG PTR INTFLAGS/BIT 1 sez path data present 1AC0A 0109A934 22 XBCM PTR XDATA/BITS 0:3 message bcm field 1AC0B F849A8D6 23 STOPPED PTR STATE/BIT 31 sez remote machine stopped 1AC0C 2709A934 24 XADDR PTR XDATA/BITS 4:31 message address field 1AC0D 0000003A 25 PROMPT VFDC STAR,"R","D","U",COLON prompt sequence 00000005 ABS 26 PROMPTLEN EQU DISPC PROMPT prompt sequence length 1AC0F 48494748 27 HIGHCHARS ASCII 1,HIGH 1AC10 4C4F5720 28 LOWCHARS ASCII 1,LOW 1AC11 20202020 29 BLANKS ASCII 2, 1AC13 533719C0 30 EXTCODE PAK6 CODE .CODE extension 1AC14 59439000 31 EXTDO PAK6 DO .DO extension 1AC15 4C495354 32 ASCILIST ASCII 1,LIST list do file commands 1AC16 53555050 33 ASCISUPP ASCII 1,SUPP suppress do file commands 1AC17 52454D4F 34 SITEFILE TEXT "REMOTE.RFP:SITEFILE.TEXT " 1AC1F 00000000 35 VFD 0,0 space to expand name if needed 1AC20 003FFFFF 36 ERF3MASK VFD -1/ERF3 bits, bits, bits 1AC22 0036EE80 37 ONEHOUR2 VFD 0,1000*60*60 double word msecs per hour 1AC23 000003E8 38 MSECSS VFD 1000 msecs per second 39 1AC24 02000000 40 DLYBRKMASK VFD 1*BIT 6 mask for breaks interrupting delays 1AC25 00800000 41 TERMEVENT VFD 1*BIT 8 non-empty terminal value for URDELAY 42 43 * PPU needs 5 seconds to do selftest, URDELAY is may reduce 44 * wait by 1 second (timer is imprecise) 1AC26 00000006 45 PPUSTWAIT VFD 6 #seconds to wait to get PPU selftest result 46 1AC27 4E4F4C4F 47 NOLOG ASCII 1,NOLO nolog check 1AC28 A07A5067 48 PARAMBANG PAK12 PARAMETERS! 49 00000080 BYTE 50 ENTROBITS EQU BITS 0:7 ENTR opcode bits 000000DD ABS 51 ENTROPS EQU 0DD ENTR opcode value 00000010 ABS 52 PAROPS EQU 040/4 PAR op-code family 1AC2A 0000BAB0 53 BPIVALUE VFD 0000BAB0 special halt for BPI's 1AC2B 0000BAB9 54 BPIMAXVAL VFD 0000BAB9 maximum BPI halt code 55 1AC2C 00030003 56 CPSTEP VFD 030003 single-step address 0000140A ABS 57 MB1ADR EQU 0140A address of message buffer 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 49 (RDUPURE) F 11 Variable definitions, storage allocation 00001413 ABS 58 MB2ADR EQU 01413 address of message buffer 59 1AC2D 45584954 60 EXITCOM ASCII 1,EXIT exit command text 61 0001AC2E 62 ONOFFTAB LABEL ON/OFF table 1AC2E 4F464620 63 ASCII 1,OFF 1AC2F 4E4F2020 64 ASCII 1,NO 1AC30 4E202020 65 ASCII 1,N 00000003 ABS 66 ONSYMS EQU DISPW ONOFFTAB 1AC31 4F4E2020 67 ASCII 1,ON 1AC32 59455320 68 ASCII 1,YES 1AC33 59202020 69 ASCII 1,Y 00000006 ABS 70 OOTLEN EQU DISPW ONOFFTAB 71 1AC39 000186A0 72 TENTAB VFD 1,10,100,1000,10000,100000 1AC3D 3B9ACA00 73 VFD 1000000,10000000,100000000,1000000000 00000009 ABS 74 NDIGSD EQU 10-1 ten digits max 75 1AC3E 30313233 76 HEXTAB TEXT "0123456789ABCDEF" 1AC42 020DAC3E 77 HEXC PTR HEXTAB/BITS 0:7 hex decode table 78 1AC43 FEC00000 79 HEXSHIFT NOP 0 0 digits 1AC44 600A3800 0 0 CBM 80 LD R0 R0/BITS 28:27 1 digit 1AC45 600A3000 0 0 CBM 81 LD R0 R0/BITS 24:23 2 digits 1AC46 600A2800 0 0 CBM 82 LD R0 R0/BITS 20:19 3 digits 1AC47 600A2000 0 0 CBM 83 LD R0 R0/BITS 16:15 4 digits 1AC48 600A1800 0 0 CBM 84 LD R0 R0/BITS 12:11 5 digits 1AC49 600A1000 0 0 CBM 85 LD R0 R0/BITS 8:7 6 digits 1AC4A 600A0800 0 0 CBM 86 LD R0 R0/BITS 4:3 7 digits 1AC4B FEC00000 87 NOP 0 8 digits 88 1AC4C 20303132 89 P6TAB TEXT " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ!&_" 1AC56 020DAC4C 90 P6CHARS PTR P6TAB/BITS 0:7 pack-6 decode table 91 1AC57 00000001 92 FORTYTAB VFD 40 POWER 0 powers of 40 1AC58 00000028 93 VFD 40 POWER 1 1AC59 00000640 94 VFD 40 POWER 2 1AC5A 0000FA00 95 VFD 40 POWER 3 1AC5B 00271000 96 VFD 40 POWER 4 1AC5C 061A8000 97 VFD 40 POWER 5 98 1AC5D 00040000 99 TCTABN VFD 000040000 terminating character table 1AC5E 00000010 100 VFD 000000010 1AC5F 00000000 101 VFD 000000000 1AC60 00000000 102 VFD 000000000 1AC61 00040000 103 VFD 000040000 1AC62 00000010 104 VFD 000000010 1AC63 00000000 105 VFD 000000000 1AC64 00000000 106 VFD 000000000 107 1AC65 00240000 108 TCTABD VFD 000240000 t.c. table during display 1AC66 0002000A 109 VFD 00002000A 1AC67 80000002 110 VFD 080000002 1AC68 00000000 111 VFD 000000000 1AC69 00240000 112 VFD 000240000 1AC6A 0002000A 113 VFD 00002000A 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 50 (RDUPURE) F 11 Variable definitions, storage allocation 1AC6B 80000002 114 VFD 080000002 1AC6C 00000000 115 VFD 000000000 116 1AC6D FFFFFFFF 117 TCTABZ VFD 0FFFFFFFF t.c. tab for port zero input 1AC6E FFFFFFFF 118 VFD 0FFFFFFFF 1AC6F FFFFFFFF 119 VFD 0FFFFFFFF 1AC70 FFFFFFFF 120 VFD 0FFFFFFFF 1AC71 FFFFFFFF 121 VFD 0FFFFFFFF 1AC72 FFFFFFFF 122 VFD 0FFFFFFFF 1AC73 FFFFFFFF 123 VFD 0FFFFFFFF 1AC74 FFFFFFFF 124 VFD 0FFFFFFFF 125 1AC75 40040000 126 TCTABP VFD 040040000 t.c. table for concurrent proc 1AC76 00000000 127 VFD 000000000 1AC77 00000000 128 VFD 000000000 1AC78 00000000 129 VFD 000000000 1AC79 40040000 130 VFD 040040000 1AC7A 00000000 131 VFD 000000000 1AC7B 00000000 132 VFD 000000000 1AC7C 00000000 133 VFD 000000000 134 135 *TCTABX VFD 000000000 t.c. table for no terminators 136 * VFD 000000000 137 * VFD 000000000 138 * VFD 000000001 139 * VFD 000000000 140 * VFD 000000000 141 * VFD 000000000 142 * VFD 000000001 143 1AC7D 00000301 144 TCCODES VFD 1*TEOL+1*TNUM+1*TALPH 1AC7E 00000303 145 VFD 1*TEOL+1*TDOT+1*TNUM+1*TALPH 1AC7F 0000030F 146 VFD 1*TEOL+1*TDOT+1*TLFD+1*TUPA+1*TNUM+1*TALPH 1AC80 00000313 147 VFD 1*TEOL+1*TDOT+1*TPTR+1*TNUM+1*TALPH 1AC81 0000033F 148 VFD 1*TEOL+1*TDOT+1*TLFD+1*TUPA+1*TPTR+1*TBPT+1*TNUM+1*TALPH 1AC82 0000037F 149 VFD 1*TEOL+1*TDOT+1*TLFD+1*TUPA+1*TPTR+1*TBPT+1*TATS+1*TNUM+1*TALPH 1AC83 0000031F 150 VFD 1*TEOL+1*TDOT+1*TLFD+1*TUPA+1*TPTR+1*TNUM+1*TALPH 1AC84 00000000 151 VFD 0 152 0001AC85 153 ADRMASK LABEL Address mask table 1AC85 0000000F 154 VFD 00000000F 4-bit 1AC86 0000001F 155 VFD 00000001F 5-bit 1AC87 0000007F 156 VFD 00000007F 7-bit 1AC88 000000FF 157 VFD 0000000FF 8-bit 1AC89 000001FF 158 VFD 0000001FF 9-bit 1AC8A 000003FF 159 VFD 0000003FF 10-bit 1AC8B 000007FF 160 VFD 0000007FF 11-bit 1AC8C 0003FFFF 161 VFD 00003FFFF 18-bit 1AC8D 001FFFFF 162 VFD 0001FFFFF 21-bit 1AC8E 003FFFFF 163 VFD 0003FFFFF 22-bit 1AC8F 0FFFFFFF 164 VFD 00FFFFFFF 28-bit 1AC90 FFFFFFFF 165 VFD 0FFFFFFFF 32-bit 166 1AC9C 00000008 167 ADDRDIGS VFD 1,2,2,2,3,3,3,5,6,6,7,8 # digits of address 1ACA0 00000008 168 DATADIGS VFD 0,1,2,8 # digits of data 169 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 51 (RDUPURE) F 11 Variable definitions, storage allocation 00000009 ABS 170 FILLPPS EQU 9 pages per second that can be filled 00000003 ABS 171 SCANPPS EQU 3 pages per second that can be scanned 00000014 ABS 172 SCANTIME EQU 20 number of seconds to spend scanning 1ACA1 0000EFFF 173 MAXSCAN VFD SCANPPS*SCANTIME*WPP-1 maximum words in a scan minus 1 1ACA2 0002CFFF 174 MAXFILL VFD FILLPPS*SCANTIME*WPP-1 maximum words in a fill minus 1 175 1ACA3 48202020 176 DTTAB ASCII 1,H hex 1ACA4 44202020 177 ASCII 1,D decimal 1ACA5 50202020 178 ASCII 1,P packed 1ACA6 50362020 179 ASCII 1,P6 packed 1ACA7 41202020 180 ASCII 1,A ascii 1ACA8 49202020 181 ASCII 1,I instruction dis-assembly 1ACA9 54202020 182 ASCII 1,T double word time 1ACAA 5A202020 183 ASCII 1,Z single word time 00000008 ABS 184 DTTABL EQU DISPW DTTAB 185 1ACAB DC41B5FB 186 DISPTAB CALLNP HEXOUTN hex display 1ACAC DC41B62D 187 CALLNP DECOUT decimal display 1ACAD DC41B653 188 CALLNP PAK6OUT packed display 1ACAE DC41B653 189 CALLNP PAK6OUT packed display 1ACAF DC41B643 190 CALLNP ASCOUT ascii display 1ACB0 DC41B686 191 CALLNP OPOUT op-code display 1ACB1 DC41B7BD 192 CALLNP TIMEOUT double word time display 1ACB2 DC41B7DA 193 CALLNP TIMEOUTS single word time display 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 52 (RDUPURE) F 11 Variable definitions, storage allocation 195 196 ********************************************************************************** 197 * * 198 * The following tables control the disassembly of machine * 199 * words into user-readable instructions. The first table is * 200 * a conversion table from address modes into control classes. * 201 * The second table is the action control table which determines * 202 * how each class is to be displayed. There is one entry of * 203 * action codes for each class. The third table is the action * 204 * table which contains instructions which are executed as * 205 * requested to produce the output. * 206 * * 207 ********************************************************************************** 208 1ACB3 0149ACB4 209 MODETAB PTR OPOMODE 1ACB4 00000000 210 OPOMODE VFD 5:1,4,5,6,8,7,0,0 modes 0-7 1ACB5 00000016 211 VFDB 5:2,3,9,10,0,18,20,22 modes 8-F 1ACB6 00000017 212 VFDB 5:23,23,23,23,23,23,23,23 modes 10-17 1ACB8 00000018 213 VFDB 5:24,24,24,24,24,24,24,24 modes 18-1F 214 215 00000000 ABS 216 OOO EQU 0 error,filler 00000001 ABS 217 OMA EQU 1 memory address 00000002 ABS 218 ORG EQU 2 register 00000003 ABS 219 OCO EQU 3 constant 00000004 ABS 220 OBY EQU 4 byte 00000005 ABS 221 ODX EQU 5 subscripted register 00000006 ABS 222 OGD EQU 6 "goodie" word 00000007 ABS 223 OCM EQU 7 comma 00000008 ABS 224 OAT EQU 8 at-sign 00000009 ABS 225 OPA EQU 9 PAIR 0000000A ABS 226 OCH EQU 10 CACH 0000000B ABS 227 OLP EQU 11 left-paren 0000000C ABS 228 ORP EQU 12 right-paren 0000000D ABS 229 OPL EQU 13 plus 0000000E ABS 230 OI1 EQU 14 INT1 0000000F ABS 231 OF1 EQU 15 FLT1 00000010 ABS 232 OF2 EQU 16 FLT2 00000011 ABS 233 OST EQU 17 STAK 00000012 ABS 234 OLZ EQU 18 LJZF 00000013 ABS 235 ORZ EQU 19 RJZF 00000014 ABS 236 ORW EQU 20 RJWF 00000015 ABS 237 OCA EQU 21 constant(28:31) 00000016 ABS 238 OCB EQU 22 constant(18:31) 00000017 ABS 239 OCC EQU 23 constant(22:31) 00000018 ABS 240 ORA EQU 24 register(15:17) 00000019 ABS 241 ORB EQU 25 register(18:20) 0000001A ABS 242 ORC EQU 26 register(12:14) 0000001B ABS 243 OS1 EQU 27 state change(18:21) 0000001C ABS 244 OS2 EQU 28 state change(21) 0000001D ABS 245 OHX EQU 29 hex output 0000001E ABS 246 OEX EQU 30 exit (done!!) 0000001F ABS 247 OGR EQU 31 goodie with register masked off 248 249 0000000C ABS 250 NAPC EQU 12 12 actions per entry 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 53 (RDUPURE) F 11 Variable definitions, storage allocation 1ACB9 0149ACBA 251 ACTTAB PTR OPOACT/BITS 0:4 0001ACBA 252 OPOACT LABEL (action control table) 1ACBA 00000000 253 VFDB 5:OHX,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACBC 00000000 254 VFDB 5:OMA,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACBE 00000000 255 VFDB 5:OGD,OAT,OMA,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACC0 00000000 256 VFDB 5:ORG,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACC2 00000000 257 VFDB 5:OLZ,OCO,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACC4 00000000 258 VFDB 5:ORZ,OCO,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACC6 00000000 259 VFDB 5:ORW,OCO,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACC8 00000000 260 VFDB 5:OGD,ORG,OCB,OBY,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACC9 00000000 261 VFDB 5:OGD,ORG,OCM,OGR,OCA,OCO,OCB,OBY,OEX,OOO,OOO,OOO 1ACCB 00000000 262 VFDB 5:OGD,OPA,ORG,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACCD 00000000 263 VFDB 5:OGD,OS1,OCH,ORG,OCC,OCM,OCO,OEX,OOO,OOO,OOO,OOO 1ACCF 00000000 264 VFDB 5:OOO,OOO,OAT,ORG,OCC,OLP,OCO,ORP,OEX,OOO,OOO,OOO 1ACD1 00000000 265 VFDB 5:OOO,OOO,ORG,OCM,OGR,OCC,OCO,OEX,OOO,OOO,OOO,OOO 1ACD3 00000000 266 VFDB 5:OOO,OOO,OAT,OLP,ORG,OCC,OCM,OCO,ORP,OEX,OOO,OOO 1ACD5 00000000 267 VFDB 5:OOO,OOO,ORG,OCC,OPL,OCO,OEX,OOO,OOO,OOO,OOO,OOO 1ACD7 00000000 268 VFDB 5:OOO,OOO,OI1,ORG,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACD8 00000000 269 VFDB 5:OOO,OOO,OF1,ORG,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACDA 00000000 270 VFDB 5:OOO,OOO,OF2,ORG,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACDC 00000000 271 VFDB 5:OGD,OS2,OCH,ORG,OCC,OCM,OCO,ORB,ODX,OEX,OOO,OOO 1ACDE 0000001E 272 VFDB 5:OOO,OOO,OAT,ORG,ORB,OCC,OLP,ORG,OPL,OCO,ORP,OEX 1ACE0 00000000 273 VFDB 5:OGD,OS2,ORG,OCC,OCM,OCO,ORB,ODX,OEX,OOO,OOO,OOO 1ACE2 0000001E 274 VFDB 5:OOO,OOO,OAT,OLP,ORG,OCC,OCM,OCO,ORP,ORB,ODX,OEX 1ACE4 00000000 275 VFDB 5:OGD,OST,ORG,OCC,OCM,OCO,OEX,OOO,OOO,OOO,OOO,OOO 1ACE6 00000000 276 VFDB 5:OGD,ORC,OMA,ODX,OEX,OOO,OOO,OOO,OOO,OOO,OOO,OOO 1ACE7 00000000 277 VFDB 5:OGD,ORC,OAT,OMA,ODX,OEX,OOO,OOO,OOO,OOO,OOO,OOO 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 54 (RDUPURE) F 11 Variable definitions, storage allocation 279 280 ********************************************************************************** 281 * * 282 * The following macro is just like BEGFRAME except that it does * 283 * NOT generate a BSS 1 for the return link word. * 284 * * 285 ********************************************************************************** 286 287 BEGFRAME2 MACRO 288 NOLIST 289 NOLIST CREF 290 FRAME! BASE SP beginning of stack frame 291 LIST CREF 292 LIST 293 EMAC 123 124 INPUT NEWSYMPURE 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 55 (NEWSYMPURE) F 12 Variable definitions, storage allocation 2 3 ********************************************************************************** 4 * * 5 * Here are the tables used for the conversion of packed characters * 6 * into ASCII characters and vice-versa. * 7 * * 8 ********************************************************************************** 9 * 10 * This table is indexed with a packed character and yields an 11 * ASCII character. This table yields upper case letters. 12 * 1ACE9 20414243 13 PK2UPCHAR TEXTZ / ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!&_/ 14 * 15 * This table is indexed with a packed character and yields an 16 * ASCII character. This table yields lower case letters. 17 * 1ACF4 20616263 18 PK2LOWCHR TEXTZ / abcdefghijklmnopqrstuvwxyz0123456789!&_/ 19 * 20 * This table is indexed with an ( ASCII character ) - ( the starting 21 * offset ) and yields a packed character value. The bit UPLOWBIT 22 * sez upper case if 0 and lower case if 1. 23 * 00003010 BYTE 24 UPLOWBIT EQU BIT 24 bit 8 of a char that is in a register 00000080 ABS 25 LOWRCASE EQU 1*UPLOWBIT 1 in bit 8 of character sez lower case 00000021 ABS 26 LOWBOUND EQU 33 the lowest ASCII a packed character can represent 27 1ACFF 020DAD00 28 ASC2PAKPT PTR ASC2PACKD character pointer into the conversion table 1ACFF 00000025 29 ASC2PACKD VFDC SYMBANG 1AD00 00000000 30 VFDC SYMNONE,SYMNONE,SYMNONE,SYMNONE 1AD00 00000026 31 VFDC SYMAMPER 1AD02 00000000 32 VFDC SYMNONE,SYMNONE,SYMNONE,SYMNONE,SYMNONE,SYMNONE 1AD02 00000027 33 VFDC SYMDASH 1AD02 00000000 34 VFDC SYMNONE,SYMNONE 1AD05 00000024 35 VFDC SYM0,SYM1,SYM2,SYM3,SYM4,SYM5,SYM6,SYM7,SYM8,SYM9 1AD07 00000000 36 VFDC SYMNONE,SYMNONE,SYMNONE,SYMNONE,SYMNONE,SYMNONE,SYMNONE 1AD0A 0000000D 37 VFDC SYMA,SYMB,SYMC,SYMD,SYME,SYMF,SYMG,SYMH,SYMI,SYMJ,SYMK,SYML,SYMM 1AD0D 0000001A 38 VFDC SYMN,SYMO,SYMP,SYMQ,SYMR,SYMS,SYMT,SYMU,SYMV,SYMW,SYMX,SYMY,SYMZ 1AD0E 00000000 39 VFDC SYMNONE,SYMNONE,SYMNONE,SYMNONE 1AD0E 00000027 40 VFDC SYMUNDER 1AD0F 00000000 41 VFDC SYMNONE 1AD10 00000084 42 VFDC SYMA+LOWRCASE,SYMB+LOWRCASE,SYMC+LOWRCASE,SYMD+LOWRCASE 1AD11 00000088 43 VFDC SYME+LOWRCASE,SYMF+LOWRCASE,SYMG+LOWRCASE,SYMH+LOWRCASE 1AD12 0000008D 44 VFDC SYMI+LOWRCASE,SYMJ+LOWRCASE,SYMK+LOWRCASE,SYML+LOWRCASE,SYMM+LOWRCASE 1AD13 00000091 45 VFDC SYMN+LOWRCASE,SYMO+LOWRCASE,SYMP+LOWRCASE,SYMQ+LOWRCASE 1AD14 00000095 46 VFDC SYMR+LOWRCASE,SYMS+LOWRCASE,SYMT+LOWRCASE,SYMU+LOWRCASE 1AD15 0000009A 47 VFDC SYMV+LOWRCASE,SYMW+LOWRCASE,SYMX+LOWRCASE,SYMY+LOWRCASE,SYMZ+LOWRCASE 1AD16 00000000 48 VFDC SYMNONE,SYMNONE,SYMNONE,SYMNONE,SYMNONE 49 50 ********************************************************************************** 51 * * 52 * The actual list of the register symbols. * 53 * * 54 ********************************************************************************** 55 1AD18 00000006 56 NEWREGSYMS VFD 4:NEWREG,6:NEWDEFAULT,2:NEWNOIND,1:0,2:0,17:REGSYMSIZE*1+1 1AD19 00000000 57 VFD 6:2,1:0,3:0,22:0 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 56 (NEWSYMPURE) F 12 Variable definitions, storage allocation 1AD1A 00000000 58 VFD VALUEOFR0 1AD1B 00000000 59 VFD 0 all upper case 1AD1C 00000000 60 VFD 6:SYMR,6:SYM0,20:0 61 1AD1D 0000000B 62 VFD 4:NEWREG,6:NEWDEFAULT,2:NEWNOIND,1:0,2:0,17:REGSYMSIZE*2+1 1AD1E 00000000 63 VFD 6:2,1:0,3:0,22:0 1AD1F 00000001 64 VFD VALUEOFR1 1AD20 00000000 65 VFD 0 all upper case 1AD21 00000000 66 VFD 6:SYMR,6:SYM1,20:0 67 1AD22 00000010 68 VFD 4:NEWREG,6:NEWDEFAULT,2:NEWNOIND,1:0,2:0,17:REGSYMSIZE*3+1 1AD23 00000000 69 VFD 6:2,1:0,3:0,22:0 1AD24 00000002 70 VFD VALUEOFR2 1AD25 00000000 71 VFD 0 all upper case 1AD26 00000000 72 VFD 6:SYMR,6:SYM2,20:0 73 1AD27 00000015 74 VFD 4:NEWREG,6:NEWDEFAULT,2:NEWNOIND,1:0,2:0,17:REGSYMSIZE*4+1 1AD28 00000000 75 VFD 6:2,1:0,3:0,22:0 1AD29 00000003 76 VFD VALUEOFR3 1AD2A 00000000 77 VFD 0 all upper case 1AD2B 00000000 78 VFD 6:SYMR,6:SYM3,20:0 79 1AD2C 0000001A 80 VFD 4:NEWREG,6:NEWDEFAULT,2:NEWNOIND,1:0,2:0,17:REGSYMSIZE*5+1 1AD2D 00000000 81 VFD 6:2,1:0,3:0,22:0 1AD2E 00000004 82 VFD VALUEOFR4 1AD2F 00000000 83 VFD 0 all upper case 1AD30 00000000 84 VFD 6:SYMR,6:SYM4,20:0 85 1AD31 0000001F 86 VFD 4:NEWREG,6:NEWDEFAULT,2:NEWNOIND,1:0,2:0,17:REGSYMSIZE*6+1 1AD32 00000000 87 VFD 6:2,1:0,3:0,22:0 1AD33 00000005 88 VFD VALUEOFR5 1AD34 00000000 89 VFD 0 all upper case 1AD35 00000000 90 VFD 6:SYMR,6:SYM5,20:0 91 1AD36 00000024 92 VFD 4:NEWREG,6:NEWDEFAULT,2:NEWNOIND,1:0,2:0,17:REGSYMSIZE*7+1 1AD37 00000000 93 VFD 6:2,1:0,3:0,22:0 1AD38 00000006 94 VFD VALUEOFR6 1AD39 00000000 95 VFD 0 all upper case 1AD3A 00000000 96 VFD 6:SYMR,6:SYM6,20:0 97 1AD3B 00000029 98 VFD 4:NEWREG,6:NEWDEFAULT,2:NEWNOIND,1:0,2:0,17:REGSYMSIZE*8+1 1AD3C 00000000 99 VFD 6:2,1:0,3:0,22:0 1AD3D 00000007 100 VFD VALUEOFR7 1AD3E 00000000 101 VFD 0 all upper case 1AD3F 00000000 102 VFD 6:SYMR,6:SYM7,20:0 103 1AD40 0000002E 104 VFD 4:NEWREG,6:NEWPC,2:NEWNOIND,1:0,2:0,17:REGSYMSIZE*9+1 1AD41 00000000 105 VFD 6:2,1:0,3:0,22:0 1AD42 00000008 106 VFD VALUEOFPC 1AD43 00000000 107 VFD 0 all upper case 1AD44 00000000 108 VFD 6:SYMP,6:SYMC,20:0 109 1AD45 00000033 110 VFD 4:NEWREG,6:NEWHEX,2:NEWNOIND,1:0,2:0,17:REGSYMSIZE*10+1 1AD46 00000000 111 VFD 6:2,1:0,3:0,22:0 1AD47 00000009 112 VFD VALUEOFPSR 1AD48 00000000 113 VFD 0 all upper case 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 57 (NEWSYMPURE) F 12 Variable definitions, storage allocation 1AD49 00000000 114 VFD 6:SYMP,6:SYMS,6:SYMR,14:0 115 1AD4A 00000038 116 VFD 4:NEWREG,6:NEWHEX,2:NEWNOIND,1:0,2:0,17:REGSYMSIZE*11+1 1AD4B 00000000 117 VFD 6:2,1:0,3:0,22:0 1AD4C 0000000A 118 VFD VALUEOFIMR 1AD4D 00000000 119 VFD 0 all upper case 1AD4E 00000000 120 VFD 6:SYMI,6:SYMM,6:SYMR,14:0 121 1AD4F 00000000 122 VFD 4:NEWREG,6:NEWHEX,2:NEWNOIND,1:0,2:0,17:NILPTR 1AD50 00000000 123 VFD 6:2,1:0,3:0,22:0 1AD51 0000000B 124 VFD VALUEOFIAD 1AD52 00000000 125 VFD 0 all upper case 1AD53 00000000 126 VFD 6:SYMI,6:SYMA,6:SYMD,14:0 125 126 INPUT RDUOPS 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 58 (RDUOPS) F 13 Op-codes for BTI 8000 3 4 ********************************************************************************** 5 * * 6 * The following is a list of valid op-codes for the * 7 * BTI 8000. The table is used for opcode assembly/dis- * 8 * assembly when processing in Assembly mode. * 9 * * 10 ********************************************************************************** 11 00000070 BYTE 12 OPBITS EQU BITS 0:6 op-code category 00000060 BYTE 13 PAROPBITS EQU BITS 0:5 PAR op-code bits 00000A10 BYTE 14 STPVALUE EQU BIT 5 bit in R7 for values PAR/STP 00000100 BYTE 15 MAXOPBITS EQU BITS 0:15 op-code maximum bits 00001450 BYTE 16 MODEBITS EQU BITS 10:14 operand mode field 00001E30 BYTE 17 REGBITS EQU BITS 15:17 register specifier bits 00001F10 BYTE 18 ADRBITS EQU BITS 15:31 address portion of instruction 00002450 BYTE 19 BYTESB EQU BITS 18:22 byte start bit 00002E50 BYTE 20 BYTELEN EQU BITS 23:27 byte length bits 00003840 BYTE 21 BYTEDISP EQU BITS 28:31 byte displacement 00003960 BYTE 22 BYTEXTRA EQU BITS 28:17 stuff that gets in the way 00002440 BYTE 23 S1BITS EQU BITS 18:21 sub-class(1) bits 00002A10 BYTE 24 S2BITS EQU BIT 21 sub-class(2) bits 00001E30 BYTE 25 REGBITSA EQU REGBITS register field(a) 00002430 BYTE 26 REGBITSB EQU BITS 18:20 register field(b) 00001830 BYTE 27 REGBITSC EQU BITS 12:14 register field(c) 00003840 BYTE 28 CONBITSA EQU BITS 28:31 constant field(a) 000024E0 BYTE 29 CONBITSB EQU BITS 18:31 constant field(b) 00002CA0 BYTE 30 CONBITSC EQU BITS 22:31 constant field(c) 00000000 ABS 31 PLAIN EQU 00 no register, no operand 00000001 ABS 32 ABSAD EQU 01 no register, absolute address 00000002 ABS 33 JMPAD EQU 02 no register, jump address 00000003 ABS 34 MEMAD EQU 03 no register, memory address 00000006 ABS 35 RJMPA EQU 06 register, jump address 00000007 ABS 36 RMEMA EQU 07 register, memory address 0000000A ABS 37 RBJMP EQU 0A register/bit, jump address 38 0001AD54 39 OPPROTO BASE OP op-code table prototype 00174800 5 BASE 40 OPSTUFF BSS 1 00094100 5 ZBM 41 OPCODE EQU OPSTUFF/BITS 0:15 op-code 42 * EQU OPSTUFF/BITS 28:31 op-code class 00097820 5 ZBM 43 OPMT EQU OPSTUFF/BITS 28:29 op-code modifier type 00097C20 5 ZBM 44 OPOT EQU OPSTUFF/BITS 30:31 op-code operand type 00174801 5 BASE 45 OPNAME BSS 1 mnemonic 46 DRCT 00000002 ABS 47 OPSIZE EQU DISPW OPPROTO 48 ORG OPPROTO 49 50 OPC MACRO 51 VFD 16:$(2),12:0,4:$(1) 52 PAK6 $(3) 53 EMAC 54 0001AD54 55 OPTABLE LABEL 0001AEF8 268 OPTABTOP LABEL 000000D2 ABS 269 NUMOPS EQU (DISPW OPTABLE)/OPSIZE 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 59 (RDUOPS) F 13 Op-codes for BTI 8000 271 272 ********************************************************************************** 273 * * 274 * The following table is for determining how much of the * 275 * op-code to mask off (and which part) prior to searching * 276 * the op-code table for a match. The PREOP table is indexed * 277 * by the leftmost 7 bits of the op-code, and a mask is then * 278 * selected according to which major class corresponds to the * 279 * particular op-code. Entries exist in this table even for * 280 * op-codes which do not exist. * 281 * * 282 ********************************************************************************** 283 00000000 ABS 284 OCRM EQU 0 register and mode 00000001 ABS 285 OCMO EQU 1 mode only 00000002 ABS 286 OCRJ EQU 2 register jump 00000003 ABS 287 OCSP EQU 3 special (op-code only) 00000003 ABS 288 OCXX EQU OCSP open codes 289 0001AEF8 290 OCMASKTAB LABEL table of masks by class 1AEF8 0000FE00 291 VFD -1/BITS 16:22*BITS 16:22 1AEF9 0000FFC0 292 VFD -1/BITS 16:25*BITS 16:25 1AEFA 0000FE3E 293 VFD -1/BITS 16:22*BITS 16:22 OR -1/BITS 26:30*BITS 26:30 1AEFB 0000FFFE 294 VFD -1/BITS 16:30*BITS 16:30 295 1AEFC 0089AEFD 296 PREOP PTR OPCLASS 1AEFC 00000000 297 OPCLASS VFD 2:OCMO,OCRM,OCXX,OCRM,OCMO,OCRM,OCMO,OCRM 1AEFD 00000000 298 VFDB 2:OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM 1AEFD 00000000 299 VFDB 2:OCXX,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM 1AEFE 00000000 300 VFDB 2:OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM 1AEFE 00000000 301 VFDB 2:OCMO,OCMO,OCXX,OCXX,OCRM,OCRM,OCRM,OCRM 1AEFF 00000001 302 VFDB 2:OCRM,OCRM,OCRM,OCRM,OCMO,OCXX,OCMO,OCMO 1AEFF 00000003 303 VFDB 2:OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCXX 1AF00 00000000 304 VFDB 2:OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM 1AF00 00000000 305 VFDB 2:OCMO,OCRM,OCXX,OCRM,OCXX,OCRM,OCXX,OCRM 1AF01 00000000 306 VFDB 2:OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM 1AF01 00000000 307 VFDB 2:OCXX,OCRM,OCXX,OCRM,OCRM,OCRM,OCXX,OCRM 1AF02 00000000 308 VFDB 2:OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM,OCRM 1AF02 00000003 309 VFDB 2:OCMO,OCMO,OCXX,OCXX,OCXX,OCXX,OCXX,OCXX 1AF03 00000003 310 VFDB 2:OCMO,OCMO,OCXX,OCXX,OCMO,OCXX,OCMO,OCXX 1AF03 00000001 311 VFDB 2:OCRM,OCRM,OCRM,OCRM,OCXX,OCXX,OCMO,OCMO 1AF04 00000003 312 VFDB 2:OCRM,OCRM,OCRM,OCRM,OCRM,OCRJ,OCRM,OCSP 127 128 INPUT RDUCOMS 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 60 (RDUCOMS) F 14 Command Tables 3 ********************************************************************************** 4 * * 5 * The following symbols define the various bits used within * 6 * command elements to indicate type of command, type and size * 7 * of parameter(s), address size, data size, and type of valid * 8 * terminators. All are folded into single-word command entries. * 9 * * 10 ********************************************************************************** 11 0000000C ABS 12 CNL EQU 12 12 character max name length 00000003 ABS 13 CNLW EQU CNL/NCPW word length of name 14 0001AF05 15 COMBLOCK BASE COM command entry definition 00174800 5 BASE 16 COMNAME BSS CNLW name of command 00174803 5 BASE 17 COMCNTL BSS 1 processing control 00174804 5 BASE 18 COMEX1 BSS 1 group-dependent data 00174805 5 BASE 19 COMEX2 BSS 1 group-dependent data 00174806 5 BASE 20 COMHELP BSS 1 command help message address 21 DRCT 00000007 ABS 22 COMBLKLEN EQU DISPW COMBLOCK 23 ORG COMBLOCK 24 00000030 BYTE 25 CLS EQU BITS 0:2 Class of transfer 00000630 BYTE 26 SLT EQU BITS 3:5 Slot code of transfer 00000C30 BYTE 27 BCM EQU BITS 6:8 BCM field 00001210 BYTE 28 DF EQU BIT 9 Data flag (1=SBUFFW, 0=TMA) 00001560 BYTE 29 TMA EQU BITS 10:31 transfer address 00094034 5 ZBM 30 GCNCLS EQU COMEX1/CLS class code 00094634 5 ZBM 31 GCNSLOT EQU COMEX1/SLT slot number 00094C34 5 ZBM 32 GCNBCM EQU COMEX1/BCM BCM field 00095214 5 ZBM 33 GCNDF EQU COMEX1/DF data origin flag 00095564 5 ZBM 34 GCNTMA EQU COMEX1/TMA memory address for transfer 00174805 5 BASE 35 GCNPDSP EQU COMEX2 processing address for display 36 00000C10 BYTE 37 MWR EQU BIT 6 write flag 00000E10 BYTE 38 MMS EQU BIT 7 flag for relocation thru MSR 00001560 BYTE 39 MBS EQU BITS 10:31 base address 00094034 5 ZBM 40 GMMCLS EQU COMEX1/CLS class code for transfer 00094634 5 ZBM 41 GMMSLOT EQU COMEX1/SLT slot type code (0-4) 00094C14 5 ZBM 42 GMMWRITE EQU COMEX1/MWR flag for write allowed 00094E14 5 ZBM 43 GMMMSR EQU COMEX1/MMS sez MSR relocation needed 00095564 5 ZBM 44 GMMBASE EQU COMEX1/MBS base address of data 00174805 5 BASE 45 GMMNAM EQU COMEX2 pointer to location name 00000040 BYTE 46 DSL EQU BITS 0:3 bit field for display size length 00094045 5 ZBM 47 COMDSL EQU COMEX2/DSL number of words to display 48 00001560 BYTE 49 PAD EQU MBS address of transfer 00095564 5 ZBM 50 GPPADDR EQU GMMBASE PPU R/W address for data 51 00000030 BYTE 52 CTERM EQU BITS 0:2 terminator control flag 00094033 5 ZBM 53 COMTERM EQU COMCNTL/CTERM terminator control 00000000 ABS 54 TCR EQU TC*CTERM CR 20000000 ABS 55 TDT EQU TD*CTERM CR, dot 40000000 ABS 56 TUP EQU TU*CTERM CR, dot, LF, ^ 60000000 ABS 57 TRP EQU TR*CTERM CR, dot, > 80000000 ABS 58 TPT EQU TG*CTERM CR, dot, LF, ^, >, < 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 61 (RDUCOMS) F 14 Command Tables A0000000 ABS 59 TAT EQU TA*CTERM CR, dot, LF, ^, >, <, @ C0000000 ABS 60 TVP EQU TV*CTERM CR, dot, LF, ^, > 61 00000630 BYTE 62 CPARAM EQU BITS 3:5 parameter control field 00094633 5 ZBM 63 COMPARAM EQU COMCNTL/CPARAM base-mode param def 00000000 ABS 64 PNO EQU 0*CPARAM no parameters allowed 04000000 ABS 65 PNOD EQU 1*CPARAM no params but display type 08000000 ABS 66 PRQC EQU 2*CPARAM parameter required code 0C000000 ABS 67 PSPC EQU 3*CPARAM special - no check 10000000 ABS 68 PRQA EQU 4*CPARAM required address 14000000 ABS 69 POPA EQU 5*CPARAM optional address 00000006 ABS 70 RQAD EQU 6 required addr, opt display 18000000 ABS 71 PRQAD EQU RQAD*CPARAM required address, display type 1C000000 ABS 72 PRQADS EQU 7*CPARAM rqd addr (symbolic), display 73 00000C40 BYTE 74 CADDR EQU BITS 6:9 address control field 00094C43 5 ZBM 75 COMADDR EQU COMCNTL/CADDR base-mode of address 00000000 ABS 76 A4 EQU 0*CADDR 4-bit address 00400000 ABS 77 A5 EQU 1*CADDR 5-bit address 00800000 ABS 78 A7 EQU 2*CADDR 7-bit address 00C00000 ABS 79 A8 EQU 3*CADDR 8-bit addres 01000000 ABS 80 A9 EQU 4*CADDR 9-bit address 01400000 ABS 81 A10 EQU 5*CADDR 10-bit address 01800000 ABS 82 A11 EQU 6*CADDR 11-bit address 01C00000 ABS 83 A18 EQU 7*CADDR 18-bit address 02000000 ABS 84 A21 EQU 8*CADDR 21-bit address 02400000 ABS 85 A22 EQU 9*CADDR 22-bit address 02800000 ABS 86 A28 EQU 10*CADDR 28-bit address 02C00000 ABS 87 A32 EQU 11*CADDR 32-bit "address" 88 00000C40 BYTE 89 CCODE EQU CADDR code control field 00094C43 5 ZBM 90 COMCODE EQU COMCNTL/CCODE group-dependent codes 00000000 ABS 91 COO EQU 0*CADDR ON/OFF 00400000 ABS 92 CALL EQU 1*CADDR ALL 00800000 ABS 93 CFILE EQU 2*CADDR file specifier 94 00001420 BYTE 95 CDATA EQU BITS 10:11 data control field 00095423 5 ZBM 96 COMDATA EQU COMCNTL/CDATA base-mode data control 00000000 ABS 97 DNO EQU 0*CDATA no data 00100000 ABS 98 D4 EQU 1*CDATA 4-bit data 00200000 ABS 99 D8 EQU 2*CDATA 8-bit data 00300000 ABS 100 D32 EQU 3*CDATA 32-bit data 101 00001810 BYTE 102 COKDO EQU BIT 12 ok only when processing DO file 00001A10 BYTE 103 COKND EQU BIT 13 ok when not dialed in 00001C10 BYTE 104 COKNS EQU BIT 14 ok when system not stopped 00095813 5 ZBM 105 COMOKDO EQU COMCNTL/COKDO 00095A13 5 ZBM 106 COMOKND EQU COMCNTL/COKND controls command legality 00095C13 5 ZBM 107 COMOKNS EQU COMCNTL/COKNS ditto 108 00001F10 BYTE 109 CPROC EQU BITS 15:31 processing address 00095F13 5 ZBM 110 COMPROC EQU COMCNTL/CPROC processing address 00174804 5 BASE 111 COMSLOT EQU COMEX1 use first extra for slot 00174805 5 BASE 112 COMDEV EQU COMEX2 use second for device type 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 62 (RDUCOMS) F 14 Command Tables 114 115 ********************************************************************************** 116 * * 117 * The following tables contain an entry for each command * 118 * recognized by the Remote Diagnostic Utility. The command name * 119 * is listed along with the various control parameters which * 120 * describe the command's primary (and optionally secondary) * 121 * processing address, address size, data size, parameter types, * 122 * and terminators. Definitions for the codes appear on the * 123 * preceeding pages. * 124 * This first table contains the general purpose commands, * 125 * and the following tables contain the commands for specific * 126 * device types (PPU, CPU, SSU, MCU). * 127 * Note that these entries all must fit the COMBLOCK as defined * 128 * previously. * 129 * * 130 ********************************************************************************** 131 0001AF05 132 COMTAB LABEL command table 1AF05 424F4F54 133 ASCII CNLW,BOOT 1AF08 1001BFA4 134 VFD PRQA+A4+ADR(SYSINIT) 1AF0A 00000000 135 VFD (ADR BOOTER),0 1AF0B 0001D3E9 136 VFD ADR HLPMBOOT 137 1AF0C 424F4F54 138 ASCII CNLW,BOOTCOPY 1AF0F 1001BF75 139 VFD PRQA+A4+ADR(BOOTCOPY) 1AF11 0001BDC8 140 VFD 5*CLS+0*SLT+4*BCM+1*DF,ADR(RDUOK) 1AF12 0001D41A 141 VFD ADR HLPMBTCPY 142 1AF13 42504920 143 ASCII CNLW,BPI 1AF16 1DF1C9FD 144 VFD PRQADS+A18+D32+TCR+ADR(BPI) 1AF18 00000000 145 VFD 1*CLS+SCP*SLT+1*MWR+1*MMS+0*MBS,0 1AF19 0001D440 146 VFD ADR HLPMBPI 147 1AF1A 4250494C 148 ASCII CNLW,BPILIST 1AF1D 0007CB19 149 VFD 1*COKND+1*COKNS+(ADR BPILIST) 1AF1F 00000000 150 VFD 0,0 1AF20 0001D488 151 VFD ADR HLPMBPIL 152 1AF21 42524541 153 ASCII CNLW,BREAK 1AF24 0C03BE4D 154 VFD PSPC+1*COKNS+ADR(BREAK) 1AF26 00000000 155 VFD 0,0 1AF27 0001DA37 156 VFD ADR HLPMBRK 157 1AF28 43202020 158 ASCII CNLW,C 1AF2B 2C01C61A 159 VFD PSPC+TDT+ADR(PROCCPU) 1AF2D 00000002 160 VFD ADR(CPUSLOT),DEVCPU 1AF2E 0001D49A 161 VFD ADR HLPMC 162 1AF2F 434C4541 163 ASCII CNLW,CLEARALL 1AF32 0001BF9C 164 VFD ADR(CLEARALL) 1AF34 00000000 165 VFD 0,0 1AF35 0001D50C 166 VFD ADR HLPMCLALL 167 1AF36 434C4541 168 ASCII CNLW,CLEARBPI 1AF39 1DF1CABE 169 VFD PRQADS+A18+D32+TCR+ADR(CLEARBPI) 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 63 (RDUCOMS) F 14 Command Tables 1AF3B 00000000 170 VFD 1*MWR+1*MMS+0*MBS,0 1AF3C 0001D525 171 VFD ADR HLPMCBPI 172 1AF3D 434C4541 173 ASCII CNLW,CLEARBPIS 1AF40 0001CACB 174 VFD ADR CLEARBPIS 1AF42 00000000 175 VFD 1*MWR+1*MMS+0*MBS,0 1AF43 0001D538 176 VFD ADR HLPMCBPIS 177 1AF44 434C4541 178 ASCII CNLW,CLEARSSU 1AF47 0001BF79 179 VFD ADR(CONTROL) 1AF49 0001BDC8 180 VFD 5*CLS+0*SLT+2*BCM+0*DF,ADR(RDUOK) 1AF4A 0001D546 181 VFD ADR HLPMCLSSU 182 1AF4B 434F4D4D 183 ASCII CNLW,COMMANDS 1AF4E 0007C2F8 184 VFD 1*COKND+1*COKNS+ADR(COMMANDS) 1AF50 00000000 185 VFD 0,0 1AF51 0001D555 186 VFD ADR HLPMCMND 187 0001AF52 188 DCOM LABEL 1AF52 44202020 189 ASCII CNLW,D 1AF55 BDF1C6CE 190 VFD PRQADS+A18+D32+TAT+ADR(MEMORY) 1AF57 10000000 191 VFD 1*CLS+SCP*SLT+1*MWR+1*MMS+0*MBS,1*DSL 1AF58 0001D582 192 VFD ADR HLPMD 193 0001AF59 194 DLCOM LABEL 1AF59 444C2020 195 ASCII CNLW,DL 1AF5C BDF1C6CE 196 VFD PRQADS+A18+D32+TAT+ADR(MEMORY) 1AF5E 80000000 197 VFD 3*CLS+SCP*SLT+1*MMS+0*MBS,8*DSL 1AF5F 0001D6C2 198 VFD ADR HLPMDL 199 1AF60 4449414C 200 ASCII CNLW,DIAL 1AF63 0C07C341 201 VFD PSPC+1*COKND+1*COKNS+ADR(DIAL) 1AF65 00000000 202 VFD 0,0 1AF66 0001D7A8 203 VFD ADR HLPMDIAL 204 1AF67 444F2020 205 ASCII CNLW,DO 1AF6A 0C87C90E 206 VFD PSPC+CFILE+1*COKND+1*COKNS+(ADR DO) 1AF6C 00000000 207 VFD 0,0 1AF6D 0001D83D 208 VFD ADR HLPMDO 209 1AF6E 44524F50 210 ASCII CNLW,DROP 1AF71 0003C46E 211 VFD 1*COKNS+ADR(DROP) 1AF73 00000000 212 VFD 0,0 1AF74 0001D8EB 213 VFD ADR HLPMDROP 214 1AF75 45584954 215 ASCII CNLW,EXIT 1AF78 0007C400 216 VFD 1*COKND+1*COKNS+ADR(EXIT) 1AF7A 00000000 217 VFD 0,0 1AF7B 0001D8FD 218 VFD ADR HLPMEXIT 219 1AF7C 45584954 220 ASCII CNLW,EXITNP 1AF7F 0007C40B 221 VFD 1*COKND+1*COKNS+ADR(EXITNP) 1AF81 00000000 222 VFD 0,0 1AF82 0001D92A 223 VFD ADR HLPMEXTNP 224 1AF83 45584954 225 ASCII CNLW,EXITP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 64 (RDUCOMS) F 14 Command Tables 1AF86 0007C402 226 VFD 1*COKND+1*COKNS+ADR(EXITP) 1AF88 00000000 227 VFD 0,0 1AF89 0001D950 228 VFD ADR HLPMEXTP 229 0001AF8A 230 GOCOM LABEL 1AF8A 474F2020 231 ASCII CNLW,GO 1AF8D 0003BF8F 232 VFD 1*COKNS+ADR(GO) 1AF8F 0001BF85 233 VFD 5*CLS+0*SLT+1*BCM+0*DF,ADR(GOING) 1AF90 0001D978 234 VFD ADR HLPMGO 235 1AF91 48414E47 236 ASCII CNLW,HANGUP 1AF94 0003C422 237 VFD 1*COKNS+ADR(HANGUP) 1AF96 00000000 238 VFD 0,0 1AF97 0001D98B 239 VFD ADR HLPMHNGU 240 1AF98 48454C50 241 ASCII CNLW,HELP 1AF9B 0C07C27F 242 VFD PSPC+1*COKND+1*COKNS+ADR(HELP) 1AF9D 00000000 243 VFD 0,0 1AF9E 0001D9AB 244 VFD ADR HLPMHELP 245 1AF9F 49202020 246 ASCII CNLW,I 1AFA2 0C03C30C 247 VFD PSPC+1*COKNS+ADR(PORTZERO) 1AFA4 0001BDC8 248 VFD 0,(ADR RDUOK) 1AFA5 0001D9DB 249 VFD ADR HLPMI 250 1AFA6 49504F4C 251 ASCII CNLW,IPOLL 1AFA9 1001BF5A 252 VFD PRQA+A4+ADR(SEND) 1AFAB 0001BF61 253 VFD 0*CLS+6*BCM,ADR(DISPLAY) 1AFAC 0001DA6C 254 VFD ADR HLPMIPLL 255 1AFAD 4C4F4341 256 ASCII CNLW,LOCAL 1AFB0 0887C44A 257 VFD PRQC+CFILE+1*COKND+1*COKNS+ADR(LOCAL) 1AFB2 00000000 258 VFD 0,0 1AFB3 0001DA91 259 VFD ADR HLPMLOCL 260 1AFB4 4D202020 261 ASCII CNLW,M 1AFB7 2C01C627 262 VFD PSPC+TDT+ADR(PROCMCU) 1AFB9 00000001 263 VFD ADR(MCUSLOT),DEVMCU 1AFBA 0001DAD9 264 VFD ADR HLPMM 265 1AFBB 4D415020 266 ASCII CNLW,MAP 1AFBE 0001BF79 267 VFD ADR(CONTROL) 1AFC0 0001BFF7 268 VFD 2*CLS+0*SLT+2*BCM+1*DF,ADR(DISPMAP) 1AFC1 0001DB21 269 VFD ADR HLPMMAP 270 1AFC2 50202020 271 ASCII CNLW,P 1AFC5 2C01C634 272 VFD PSPC+TDT+ADR(PROCPPU) 1AFC7 00000003 273 VFD ADR(PPUSLOT),DEVPPU 1AFC8 0001DB38 274 VFD ADR HLPMP 275 1AFC9 50415448 276 ASCII CNLW,PATH 1AFCC 0003C45E 277 VFD 1*COKNS+ADR(PATH) 1AFCE 00000000 278 VFD 0,0 1AFCF 0001DB85 279 VFD ADR HLPMPATH 280 1AFD0 504F5745 281 ASCII CNLW,POWERRESET 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 65 (RDUCOMS) F 14 Command Tables 1AFD3 0001BFB8 282 VFD ADR(RESET) 1AFD5 00000000 283 VFD 0,0 1AFD6 0001DBC9 284 VFD ADR HLPMPWRR 285 1AFD7 5052494E 286 ASCII CNLW,PRINT 1AFDA 0003C3F8 287 VFD 1*COKNS+ADR(PRINT) 1AFDC 00000000 288 VFD 0,0 1AFDD 0001DBB4 289 VFD ADR HLPMPRNT 290 0001AFDE 291 RECEIVECOM LABEL 1AFDE 52454345 292 ASCII CNLW,RECEIVE 1AFE1 0C0BC946 293 VFD PSPC+1*COKNS+1*COKDO+(ADR RECEIVE) 1AFE3 00000000 294 VFD 0,0 1AFE4 0001DBED 295 VFD ADR HLPMRECV 296 1AFE5 52454345 297 ASCII CNLW,RECEIVE* 1AFE8 0C0BC946 298 VFD PSPC+1*COKNS+1*COKDO+(ADR RECEIVE) 1AFEA 00000000 299 VFD 0,0 1AFEB 0001DBED 300 VFD ADR HLPMRECV 301 1AFEC 52454345 302 ASCII CNLW,RECEIVEFILE 1AFEF 0C03EED2 303 VFD PSPC+1*COKNS+(ADR RECEIVEFILE) 1AFF1 00000000 304 VFD 0,0 1AFF2 0001DC80 305 VFD ADR HLPMRCVFI 306 1AFF3 52455354 307 ASCII CNLW,RESTART 1AFF6 0001BFC3 308 VFD ADR(RESTART) 1AFF8 00000000 309 VFD 0,0 1AFF9 0001DCCB 310 VFD ADR HLPMRSTRT 311 1AFFA 52554E20 312 ASCII CNLW,RUN 1AFFD 0C01C436 313 VFD PSPC+ADR(RUN) 1AFFF 00000000 314 VFD 0,0 1B000 0001DCFF 315 VFD ADR HLPMRUN 316 1B001 53202020 317 ASCII CNLW,S 1B004 2C01C647 318 VFD PSPC+TDT+ADR(PROCSSU) 1B006 00000004 319 VFD ADR(SSUSLOT),DEVSSU 1B007 0001DD33 320 VFD ADR HLPMS 321 1B008 53454C46 322 ASCII CNLW,SELFTEST 1B00B 1001BF5A 323 VFD PRQA+A4+ADR(SEND) 1B00D 0001BF67 324 VFD 0*CLS+5*BCM,ADR(SELFTEST) 1B00E 0001DD7A 325 VFD ADR HLPMSLFT 326 0001B00F 327 SENDCOM LABEL 1B00F 53454E44 328 ASCII CNLW,SEND 1B012 0C03C932 329 VFD PSPC+1*COKNS+(ADR SENDSTR) 1B014 00000000 330 VFD 0,0 1B015 0001DD9B 331 VFD ADR HLPMSEND 332 1B016 53454E44 333 ASCII CNLW,SEND* 1B019 0C03C932 334 VFD PSPC+1*COKNS+(ADR SENDSTR) 1B01B 00000000 335 VFD 0,0 1B01C 0001DD9B 336 VFD ADR HLPMSEND 337 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 66 (RDUCOMS) F 14 Command Tables 1B01D 53454E44 338 ASCII CNLW,SENDFILE 1B020 0C03EE76 339 VFD PSPC+1*COKNS+(ADR SENDFILE) 1B022 00000000 340 VFD 0,0 1B023 0001DDE8 341 VFD ADR HLPMSENDFI 342 0001B024 343 SYSSTATCOM LABEL 1B024 53544154 344 ASCII CNLW,STATUS 1B027 0041C170 345 VFD A5+(ADR STATUS) 1B029 00000000 346 VFD 2*CLS+1*BCM,0 1B02A 0001DE38 347 VFD ADR HLPMSTAT 348 1B02B 53544F50 349 ASCII CNLW,STOP 1B02E 0003BF79 350 VFD 1*COKNS+ADR(CONTROL) 1B030 0001BF89 351 VFD 5*CLS+0*SLT+0*BCM+0*DF,ADR(STOPPING) 1B031 0001DEC6 352 VFD ADR HLPMSTOP 353 1B032 53594D42 354 ASCII CNLW,SYMBOLS 1B035 0887C475 355 VFD PRQC+CFILE+1*COKND+1*COKNS+ADR(SYMBOLS) 1B037 00000000 356 VFD 0,0 1B038 0001DED9 357 VFD ADR HLPMSYMB 358 1B039 53595349 359 ASCII CNLW,SYSINIT 1B03C 0001BFA4 360 VFD ADR(SYSINIT) 1B03E 00000000 361 VFD ADR(RDUOK),0 1B03F 0001DF02 362 VFD ADR HLPMSYSI 363 1B040 54524143 364 ASCII CNLW,TRACE 1B043 0C07C489 365 VFD PSPC+1*COKND+1*COKNS+(ADR TRACECOM) 1B045 00000000 366 VFD 0,0 1B046 0001DF3B 367 VFD ADR HLPMTRACE 368 1B047 57414954 369 ASCII CNLW,WAIT 1B04A 12CBC9E7 370 VFD PRQA+A32+1*COKNS+1*COKDO+(ADR WAIT) 1B04C 00000000 371 VFD 0,0 1B04D 0001DF54 372 VFD ADR HLPMWAIT 373 1B04E 57525520 374 ASCII CNLW,WRU 1B051 1001C051 375 VFD PRQA+A4+ADR(DISPWRU) 1B053 00000000 376 VFD 2*CLS+1*BCM,0 1B054 0001DF8B 377 VFD ADR HLPMWRU 378 1B055 57525541 379 ASCII CNLW,WRUALL 1B058 0001C053 380 VFD PNO+ADR(WRUALL) 1B05A 00000000 381 VFD 2*CLS+1*BCM,0 1B05B 0001DFA5 382 VFD ADR HLPMWRUA 1B05C 00000020 383 VFDC SEMI,BLANK,BLANK,BLANK 1B05D 20202020 384 ASCII CNLW-1, 1B05F 00000000 385 VFD 0 1B061 00000000 386 VFD 0,0 1B062 00000000 387 VFD 0 0001B063 388 COMTABTOP LABEL 1B063 0001CED6 389 VFD ADR(ERM100) 1B064 0001CD7F 390 VFD ADR(MSGENCOMS) 391 BSS COMBLKLEN-DISPW COMTABTOP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 67 (RDUCOMS) F 14 Command Tables 393 394 ********************************************************************************** 395 * * 396 * Here are the MCU commands * 397 * * 398 ********************************************************************************** 399 0001B06A 400 MCCOMTAB LABEL 1B06A 43454620 401 ASCII CNLW,CEF 1B06D 0D81C54A 402 VFD PSPC+A11+ADR(SMUERROR) 1B06F 0001C5BE 403 VFD ADR(SMUERRFILE),ADR(CLRERRFILE) 1B070 0001DFC2 404 VFD ADR HLPMCEF 405 1B071 43454C20 406 ASCII CNLW,CEL 1B074 0001C54A 407 VFD PNO+ADR(SMUERROR) 1B076 00000000 408 VFD ADR(CLEARERR),0 1B077 0001DFE4 409 VFD ADR HLPMCLRERR 410 1B078 434F4D4D 411 ASCII CNLW,COMMANDS 1B07B 0001C308 412 VFD ADR(COMLISTER) 1B07D 0001B0BE 413 VFD ADR(MCCOMTAB),ADR(MCCTTOP) 1B07E 0001E006 414 VFD ADR HLPMMCMND 415 1B07F 45462020 416 ASCII CNLW,EF 1B082 0D81C54A 417 VFD PSPC+A11+ADR(SMUERROR) 1B084 0001C56F 418 VFD ADR(SMUERRFILE),ADR(ERRORFILE) 1B085 0001E03B 419 VFD ADR HLPMERRFIL 420 1B086 454C2020 421 ASCII CNLW,EL 1B089 0001C54A 422 VFD PNO+ADR(SMUERROR) 1B08B 00000000 423 VFD ADR(ERRORLOG),0 1B08C 0001E0D9 424 VFD ADR HLPMERRLOG 425 1B08D 46494C4C 426 ASCII CNLW,FILL 1B090 0E41C493 427 VFD PSPC+A22+ADR(MCPROC) 1B092 0001C499 428 VFD SMC*SLT+2*CLS,ADR(MCPFILL) 1B093 0001E121 429 VFD ADR HLPMFILL 430 1B094 48454C50 431 ASCII CNLW,HELP 1B097 0C07C29E 432 VFD PSPC+1*COKND+1*COKNS+ADR(HELPMCU) 1B099 00000000 433 VFD 0,0 1B09A 0001D9AB 434 VFD ADR HLPMHELP 435 1B09B 4E534341 436 ASCII CNLW,NSCAN 1B09E 0E41C493 437 VFD PSPC+A22+ADR(MCPROC) 1B0A0 0001C4A5 438 VFD SMC*SLT+2*CLS,ADR(MCPNSCAN) 1B0A1 0001E154 439 VFD ADR HLPMNSCAN 440 1B0A2 5343414E 441 ASCII CNLW,SCAN 1B0A5 0E41C493 442 VFD PSPC+A22+ADR(MCPROC) 1B0A7 0001C4B7 443 VFD SMC*SLT+2*CLS,ADR(MCPSCAN) 1B0A8 0001E1BD 444 VFD ADR HLPMSCAN 445 1B0A9 53544154 446 ASCII CNLW,STATUS 1B0AC 0041C187 447 VFD A5+(ADR MSTATUS) 1B0AE 00000000 448 VFD 2*CLS+1*BCM,0 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 68 (RDUCOMS) F 14 Command Tables 1B0AF 0001E224 449 VFD ADR HLPMMSTAT 450 1B0B0 5A202020 451 ASCII CNLW,Z 1B0B3 9AB1C6CE 452 VFD PRQAD+A28+D32+TPT+ADR(MEMORY) 1B0B5 10000000 453 VFD 0*CLS+SMC*SLT+1*MWR+0*MBS,1*DSL 1B0B6 0001E23F 454 VFD ADR HLPMMZ 455 1B0B7 5A4C2020 456 ASCII CNLW,ZL 1B0BA 9AB1C6CE 457 VFD PRQAD+A28+D32+TPT+ADR(MEMORY) 1B0BC 80000000 458 VFD 2*CLS+SMC*SLT+0*MWR+0*MBS,8*DSL 1B0BD 0001E2BE 459 VFD ADR HLPMMZL 460 0001B0BE 461 MCCTTOP LABEL 1B0BE 0001CF86 462 VFD ADR(ERM121) 1B0BF 0001CD8D 463 VFD ADR(MSMCCOMS) 464 BSS COMBLKLEN-DISPW MCCTTOP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 69 (RDUCOMS) F 14 Command Tables 466 467 ********************************************************************************** 468 * * 469 * This list is the CPU commands * 470 * * 471 ********************************************************************************** 472 0001B0C5 473 CPCOMTAB LABEL 1B0C5 43415220 474 ASCII CNLW,CAR 1B0C8 6431C69B 475 VFD D32+TRP+PNOD+ADR(DEVDISP) 1B0CA 0001CE38 476 VFD KLAS0*CLS+SCP*SLT+1*MWR+00000A*MBS,ADR(MGCCA) 1B0CB 0001E2FE 477 VFD ADR HLPMCAR 478 1B0CC 434F4D4D 479 ASCII CNLW,COMMANDS 1B0CF 0001C308 480 VFD ADR(COMLISTER) 1B0D1 0001B189 481 VFD ADR(CPCOMTAB),ADR(CPCTTOP) 1B0D2 0001E32B 482 VFD ADR HLPMCCMND 483 1B0D3 474F2020 484 ASCII CNLW,GO 1B0D6 0001C720 485 VFD ADR(MEMSEND) 1B0D8 00000000 486 VFD KLAS0*CLS+SCP*SLT+030000,0 1B0D9 0001E360 487 VFD ADR HLPMCGO 488 1B0DA 48454C50 489 ASCII CNLW,HELP 1B0DD 0C07C2A4 490 VFD PSPC+1*COKND+1*COKNS+ADR(HELPCPU) 1B0DF 00000000 491 VFD 0,0 1B0E0 0001D9AB 492 VFD ADR HLPMHELP 493 1B0E1 494D5220 494 ASCII CNLW,IMR 1B0E4 2431C69B 495 VFD D32+TDT+PNOD+ADR(DEVDISP) 1B0E6 0001CE3A 496 VFD KLAS0*CLS+SCP*SLT+1*MWR+00000B*MBS,ADR(MGCIM) 1B0E7 0001E375 497 VFD ADR HLPMIMR 498 1B0E8 49522020 499 ASCII CNLW,IR 1B0EB 6431C69B 500 VFD D32+TRP+PNOD+ADR(DEVDISP) 1B0ED 0001CE43 501 VFD KLAS0*CLS+SCP*SLT+1*MWR+020001*MBS,ADR(MGCIR) 1B0EE 0001E3A5 502 VFD ADR HLPMIR 503 1B0EF 49532020 504 ASCII CNLW,IS 1B0F2 0431C69B 505 VFD D32+PNOD+ADR(DEVDISP) 1B0F4 0001CE3C 506 VFD KLAS0*CLS+SCP*SLT+020002*MBS,ADR(MGCIS) 1B0F5 0001E3D2 507 VFD ADR HLPMIS 508 1B0F6 4D535220 509 ASCII CNLW,MSR 1B0F9 2431C69B 510 VFD D32+TDT+PNOD+ADR(DEVDISP) 1B0FB 0001CE36 511 VFD KLAS0*CLS+SCP*SLT+1*MWR+000009*MBS,ADR(MGCMS) 1B0FC 0001E3E9 512 VFD ADR HLPMMSR 513 1B0FD 4E534341 514 ASCII CNLW,NSCAN 1B100 0DC1C493 515 VFD PSPC+A18+ADR(MCPROC) 1B102 0001C4A5 516 VFD SCP*SLT+3*CLS,ADR(MCPNSCAN) 1B103 0001E418 517 VFD ADR HLPMCNSCAN 518 1B104 50432020 519 ASCII CNLW,PC 1B107 6431C69B 520 VFD D32+TRP+PNOD+ADR(DEVDISP) 1B109 0001CE34 521 VFD KLAS0*CLS+SCP*SLT+1*MWR+000008*MBS,ADR(MGCPC) 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 70 (RDUCOMS) F 14 Command Tables 1B10A 0001E48E 522 VFD ADR HLPMPC 523 1B10B 50462020 524 ASCII CNLW,PF 1B10E 58F1C6CE 525 VFD PRQAD+A8+D32+TUP+ADR(MEMORY) 1B110 10000000 526 VFD 0*CLS+SCP*SLT+1*MWR+010000*MBS,1*DSL 1B111 0001E4BA 527 VFD ADR HLPMPF 528 1B112 50464C20 529 ASCII CNLW,PFL 1B115 58F1C6CE 530 VFD PRQAD+A8+D32+TUP+ADR(MEMORY) 1B117 80000000 531 VFD 2*CLS+SCP*SLT+0*MWR+010000*MBS,8*DSL 1B118 0001E4F1 532 VFD ADR HLPMPFL 533 1B119 50535220 534 ASCII CNLW,PSR 1B11C 2431C69B 535 VFD D32+TDT+PNOD+ADR(DEVDISP) 1B11E 0001CE41 536 VFD KLAS0*CLS+SCP*SLT+1*MWR+020000*MBS,ADR(MGCPS) 1B11F 0001E526 537 VFD ADR HLPMPSR 538 1B120 52202020 539 ASCII CNLW,R 1B123 D471C888 540 VFD POPA+A5+D32+TVP+ADR(CPUREGDISP) 1B125 10000000 541 VFD 0*CLS+SCP*SLT+1*MWR+0*MBS,1*DSL 1B126 0001E556 542 VFD ADR HLPMR 543 1B127 52302020 544 ASCII CNLW,R0 1B12A C431C69B 545 VFD D32+TVP+PNOD+ADR(DEVDISP) 1B12C 0001CE24 546 VFD KLAS0*CLS+SCP*SLT+1*MWR+00*MBS,ADR(MGCR0) 1B12D 0001E5D8 547 VFD ADR HLPMRS 548 1B12E 52312020 549 ASCII CNLW,R1 1B131 C431C69B 550 VFD D32+TVP+PNOD+ADR(DEVDISP) 1B133 0001CE26 551 VFD KLAS0*CLS+SCP*SLT+1*MWR+01*MBS,ADR(MGCR1) 1B134 0001E5D8 552 VFD ADR HLPMRS 553 1B135 52322020 554 ASCII CNLW,R2 1B138 C431C69B 555 VFD D32+TVP+PNOD+ADR(DEVDISP) 1B13A 0001CE28 556 VFD KLAS0*CLS+SCP*SLT+1*MWR+02*MBS,ADR(MGCR2) 1B13B 0001E5D8 557 VFD ADR HLPMRS 558 1B13C 52332020 559 ASCII CNLW,R3 1B13F C431C69B 560 VFD D32+TVP+PNOD+ADR(DEVDISP) 1B141 0001CE2A 561 VFD KLAS0*CLS+SCP*SLT+1*MWR+03*MBS,ADR(MGCR3) 1B142 0001E5D8 562 VFD ADR HLPMRS 563 1B143 52342020 564 ASCII CNLW,R4 1B146 C431C69B 565 VFD D32+TVP+PNOD+ADR(DEVDISP) 1B148 0001CE2C 566 VFD KLAS0*CLS+SCP*SLT+1*MWR+04*MBS,ADR(MGCR4) 1B149 0001E5D8 567 VFD ADR HLPMRS 568 1B14A 52352020 569 ASCII CNLW,R5 1B14D C431C69B 570 VFD D32+TVP+PNOD+ADR(DEVDISP) 1B14F 0001CE2E 571 VFD KLAS0*CLS+SCP*SLT+1*MWR+05*MBS,ADR(MGCR5) 1B150 0001E5D8 572 VFD ADR HLPMRS 573 1B151 52362020 574 ASCII CNLW,R6 1B154 C431C69B 575 VFD D32+TVP+PNOD+ADR(DEVDISP) 1B156 0001CE30 576 VFD KLAS0*CLS+SCP*SLT+1*MWR+06*MBS,ADR(MGCR6) 1B157 0001E5D8 577 VFD ADR HLPMRS 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 71 (RDUCOMS) F 14 Command Tables 578 1B158 52372020 579 ASCII CNLW,R7 1B15B C431C69B 580 VFD D32+TVP+PNOD+ADR(DEVDISP) 1B15D 0001CE32 581 VFD KLAS0*CLS+SCP*SLT+1*MWR+07*MBS,ADR(MGCR7) 1B15E 0001E5D8 582 VFD ADR HLPMRS 583 1B15F 5343414E 584 ASCII CNLW,SCAN 1B162 0DC1C493 585 VFD PSPC+A18+ADR(MCPROC) 1B164 0001C4B7 586 VFD SCP*SLT+3*CLS,ADR(MCPSCAN) 1B165 0001E60E 587 VFD ADR HLPMCSCAN 588 1B166 53544154 589 ASCII CNLW,STATUS 1B169 0001C0E0 590 VFD ADR CSTATUS 1B16B 00000000 591 VFD 0,0 1B16C 0001E6AB 592 VFD ADR HLPMCSTAT 593 1B16D 53544550 594 ASCII CNLW,STEP 1B170 0001BF79 595 VFD ADR(CONTROL) 1B172 0001BF3F 596 VFD 0*CLS+SCP*SLT+2*BCM+0*DF+000008*MBS,ADR(STEP) 1B173 0001E6EC 597 VFD ADR HLPMSTEP 598 1B174 53544F50 599 ASCII CNLW,STOP 1B177 0001C720 600 VFD ADR(MEMSEND) 1B179 00000000 601 VFD KLAS0*CLS+SCP*SLT+030001,0 1B17A 0001E716 602 VFD ADR HLPMCSTOP 603 1B17B 54414B45 604 ASCII CNLW,TAKEINT 1B17E 0001C720 605 VFD ADR(MEMSEND) 1B180 00000000 606 VFD KLAS0*CLS+SCP*SLT+030002,0 1B181 0001E729 607 VFD ADR HLPMTAKE 608 1B182 5A202020 609 ASCII CNLW,Z 1B185 9A71C6CE 610 VFD PRQAD+A22+D32+TPT+ADR(MEMORY) 1B187 10000000 611 VFD 0*CLS+SCP*SLT+1*MWR+0*MBS,1*DSL 1B188 0001E745 612 VFD ADR HLPMCZ 613 0001B189 614 CPCTTOP LABEL 1B189 0001CF80 615 VFD ADR(ERM120) 1B18A 0001CD85 616 VFD ADR(MSCPCOMS) 617 BSS COMBLKLEN-DISPW CPCTTOP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 72 (RDUCOMS) F 14 Command Tables 619 620 ********************************************************************************** 621 * * 622 * Now for the PPU commands * 623 * * 624 ********************************************************************************** 625 0001B190 626 PPCOMTAB LABEL 1B190 42433120 627 ASCII CNLW,BC1 1B193 2431C6C0 628 VFD D32+TDT+PNOD+ADR(PPDISP) 1B195 0001CE51 629 VFD KLAS0*CLS+SPP*SLT+1*MWR+000004*PAD,ADR(MGPC1) 1B196 0001E7C2 630 VFD ADR HLPMBC1 631 1B197 42433220 632 ASCII CNLW,BC2 1B19A 2431C6C0 633 VFD D32+TDT+PNOD+ADR(PPDISP) 1B19C 0001CE55 634 VFD KLAS0*CLS+SPP*SLT+1*MWR+000006*PAD,ADR(MGPC2) 1B19D 0001E7EF 635 VFD ADR HLPMBC2 636 1B19E 43412020 637 ASCII CNLW,CA 1B1A1 58F1C6CA 638 VFD PRQAD+A8+D32+TUP+ADR(CAMEM) 1B1A3 10000000 639 VFD 0*CLS+SPP*SLT+1*MWR+00200*MBS,1*DSL 1B1A4 0001E81B 640 VFD ADR HLPMCA 641 1B1A5 4341424F 642 ASCII CNLW,CABORT 1B1A8 0001C6C5 643 VFD ADR(PPSEND) 1B1AA 00000000 644 VFD KLAS0*CLS+SPP*SLT+000001*PAD,0 1B1AB 0001E86A 645 VFD ADR HLPMCABO 646 1B1AC 434C4541 647 ASCII CNLW,CLEAR 1B1AF 12C1C6C5 648 VFD PRQA+A32+ADR(PPSEND) 1B1B1 00000000 649 VFD KLAS0*CLS+SPP*SLT+000003*PAD,0 1B1B2 0001E88E 650 VFD ADR HLPMCLR 651 1B1B3 434F4D4D 652 ASCII CNLW,COMMANDS 1B1B6 0001C308 653 VFD ADR(COMLISTER) 1B1B8 0001B20E 654 VFD ADR(PPCOMTAB),ADR(PPCTTOP) 1B1B9 0001E8BA 655 VFD ADR HLPMPCMND 656 1B1BA 43533120 657 ASCII CNLW,CS1 1B1BD 0431C6C0 658 VFD D32+PNOD+ADR(PPDISP) 1B1BF 0001CE4D 659 VFD KLAS0*CLS+SPP*SLT+000002*PAD,ADR(MGPS1) 1B1C0 0001E8EC 660 VFD ADR HLPMCS1 661 1B1C1 43533220 662 ASCII CNLW,CS2 1B1C4 0431C6C0 663 VFD D32+PNOD+ADR(PPDISP) 1B1C6 0001CE4F 664 VFD KLAS0*CLS+SPP*SLT+000003*PAD,ADR(MGPS2) 1B1C7 0001E917 665 VFD ADR HLPMCS2 666 1B1C8 43544553 667 ASCII CNLW,CTEST 1B1CB 0001C6C5 668 VFD ADR(PPSEND) 1B1CD 00000000 669 VFD KLAS0*CLS+SPP*SLT,0 1B1CE 0001E942 670 VFD ADR HLPMCTST 671 1B1CF 44494420 672 ASCII CNLW,DID 1B1D2 0431C6C0 673 VFD D32+PNOD+ADR(PPDISP) 1B1D4 0001CE49 674 VFD KLAS0*CLS+SPP*SLT+000000*PAD,ADR(MGPDI) 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 73 (RDUCOMS) F 14 Command Tables 1B1D5 0001E965 675 VFD ADR HLPMDID 676 1B1D6 48454C50 677 ASCII CNLW,HELP 1B1D9 0C07C2AA 678 VFD PSPC+1*COKND+1*COKNS+ADR(HELPPPU) 1B1DB 00000000 679 VFD 0,0 1B1DC 0001D9AB 680 VFD ADR HLPMHELP 681 1B1DD 49532020 682 ASCII CNLW,IS 1B1E0 0431C6C0 683 VFD D32+PNOD+ADR(PPDISP) 1B1E2 0001CE4B 684 VFD KLAS0*CLS+SPP*SLT+000001*PAD,ADR(MGPIS) 1B1E3 0001E98A 685 VFD ADR HLPMPIS 686 1B1E4 4D413120 687 ASCII CNLW,MA1 1B1E7 2431C6C0 688 VFD D32+TDT+PNOD+ADR(PPDISP) 1B1E9 0001CE53 689 VFD KLAS0*CLS+SPP*SLT+1*MWR+000005*PAD,ADR(MGPA1) 1B1EA 0001E9A7 690 VFD ADR HLPMMA1 691 1B1EB 4D413220 692 ASCII CNLW,MA2 1B1EE 2431C6C0 693 VFD D32+TDT+PNOD+ADR(PPDISP) 1B1F0 0001CE57 694 VFD KLAS0*CLS+SPP*SLT+1*MWR+000007*PAD,ADR(MGPA2) 1B1F1 0001E9D2 695 VFD ADR HLPMMA2 696 1B1F2 52202020 697 ASCII CNLW,R 1B1F7 00000000 698 VFD ADR(PPR),0,0 1B1F8 0001E9FD 699 VFD ADR HLPMPR 700 1B1F9 53455420 701 ASCII CNLW,SET 1B1FC 12C1C6C5 702 VFD PRQA+A32+ADR(PPSEND) 1B1FE 00000000 703 VFD KLAS0*CLS+SPP*SLT+000002*PAD,0 1B1FF 0001EA2C 704 VFD ADR HLPMSET 705 1B200 53544154 706 ASCII CNLW,STATUS 1B203 0001C181 707 VFD ADR PSTATUS 1B205 00000000 708 VFD 0,0 1B206 0001EA55 709 VFD ADR HLPMPSTAT 710 1B207 5A202020 711 ASCII CNLW,Z 1B20A 9A71C6CA 712 VFD PRQAD+A22+D32+TPT+ADR(CAMEM) 1B20C 10000000 713 VFD 0*CLS+SPP*SLT+1*MWR+0*MBS,1*DSL 1B20D 0001EA77 714 VFD ADR HLPMPZ 715 0001B20E 716 PPCTTOP LABEL 1B20E 0001CF8C 717 VFD ADR(ERM122) 1B20F 0001CD95 718 VFD ADR(MSPPCOMS) 719 BSS COMBLKLEN-DISPW PPCTTOP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 74 (RDUCOMS) F 14 Command Tables 721 722 ********************************************************************************** 723 * * 724 * And at last, the SSU commands * 725 * * 726 ********************************************************************************** 727 0001B215 728 SSCOMTAB LABEL 1B215 4250524F 729 ASCII CNLW,BPROM 1B218 5931C6CE 730 VFD PRQAD+A9+D32+TUP+ADR(MEMORY) 1B21A 10000000 731 VFD 0*CLS+SSS*SLT+01000*MBS,1*DSL 1B21B 0001EB13 732 VFD ADR HLPMBPRM 733 0001B21C 734 BSWITCHCOM LABEL 1B21C 42535749 735 ASCII CNLW,BSWITCH 1B21F 0411C69B 736 VFD D4+PNOD+ADR(DEVDISP) 1B221 0001CE59 737 VFD KLAS0*CLS+SSS*SLT+001410*MBS,ADR(MGSBS) 1B222 0001EB47 738 VFD ADR HLPMBSWT 739 0001B223 740 CLOCKCOM LABEL 1B223 434C4F43 741 ASCII CNLW,CLOCK 1B226 2431C69B 742 VFD D32+TDT+PNOD+ADR(DEVDISP) 1B228 0001CE5D 743 VFD KLAS0*CLS+SSS*SLT+1*MWR+001416*MBS,ADR(MGSCL) 1B229 0001EB68 744 VFD ADR HLPMCLCK 745 1B22A 434F4D4D 746 ASCII CNLW,COMMANDS 1B22D 0001C308 747 VFD ADR(COMLISTER) 1B22F 0001B29A 748 VFD ADR(SSCOMTAB),ADR(SSCTTOP) 1B230 0001EB8C 749 VFD ADR HLPMSCMND 750 0001B231 751 ERRLOGCOM LABEL 1B231 4552524C 752 ASCII CNLW,ERRLOG 1B234 2431C69B 753 VFD D32+TDT+PNOD+ADR(DEVDISP) 1B236 0001CE5F 754 VFD KLAS0*CLS+SSS*SLT+1*MWR+001412*MBS,ADR(MGSER) 1B237 0001EBBE 755 VFD ADR HLPMERRL 756 1B238 48454C50 757 ASCII CNLW,HELP 1B23B 0C07C2B0 758 VFD PSPC+1*COKND+1*COKNS+ADR(HELPSSU) 1B23D 00000000 759 VFD 0,0 1B23E 0001D9AB 760 VFD ADR HLPMHELP 761 0001B23F 762 ICHARCOM LABEL 1B23F 49434841 763 ASCII CNLW,ICHAR 1B242 0431C69B 764 VFD D32+PNOD+ADR(DEVDISP) 1B244 0001CE62 765 VFD KLAS0*CLS+SSS*SLT+00140D*MBS,ADR(MGSIC) 1B245 0001EBCF 766 VFD ADR HLPMICHR 767 0001B246 768 IMCOM LABEL 1B246 494D2020 769 ASCII CNLW,IM 1B249 2431C69B 770 VFD D32+TDT+PNOD+ADR(DEVDISP) 1B24B 0001CE64 771 VFD KLAS0*CLS+SSS*SLT+1*MWR+00140F*MBS,ADR(MGSIM) 1B24C 0001EBE5 772 VFD ADR HLPMIM 773 1B24D 4D423120 774 ASCII CNLW,MB1 1B250 0001C8E7 775 VFD ADR(SSMSG) 1B252 00000000 776 VFD SSS*SLT+MB1ADR,0 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 75 (RDUCOMS) F 14 Command Tables 1B253 0001EC00 777 VFD ADR HLPMMB1 778 1B254 4D423220 779 ASCII CNLW,MB2 1B257 0001C8E7 780 VFD ADR(SSMSG) 1B259 00000000 781 VFD SSS*SLT+MB2ADR,0 1B25A 0001EC17 782 VFD ADR HLPMMB2 783 0001B25B 784 NVMCOM LABEL 1B25B 4E564D20 785 ASCII CNLW,NVM 1B25E 59A1C6CE 786 VFD PRQAD+A11+D8+TUP+ADR(MEMORY) 1B260 10000000 787 VFD 0*CLS+SSS*SLT+1*MWR+01800*MBS,1*DSL 1B261 0001EC2E 788 VFD ADR HLPMNVM 789 0001B262 790 OCHARCOM LABEL 1B262 4F434841 791 ASCII CNLW,OCHAR 1B265 0431C69B 792 VFD D32+PNOD+ADR(DEVDISP) 1B267 0001CE67 793 VFD KLAS0*CLS+SSS*SLT+001408*MBS,ADR(MGSOC) 1B268 0001EC65 794 VFD ADR HLPMOCHR 795 1B269 52414D20 796 ASCII CNLW,RAM 1B26C 5961C6CE 797 VFD PRQAD+A10+D8+TUP+ADR(MEMORY) 1B26E 10000000 798 VFD 0*CLS+SSS*SLT+1*MWR+0C00*MBS,1*DSL 1B26F 0001EC7C 799 VFD ADR HLPMRAM 800 1B270 53202020 801 ASCII CNLW,S 1B273 0031C69B 802 VFD D32+ADR(DEVDISP) 1B275 00000000 803 VFD KLAS0*CLS+SSS*SLT+00140E,0 1B276 0001ECAE 804 VFD ADR HLPMSS 805 1B277 53544154 806 ASCII CNLW,STATUS 1B27A 0001C184 807 VFD ADR SSTATUS 1B27C 00000000 808 VFD 0,0 1B27D 0001ECE7 809 VFD ADR HLPMSSTAT 810 0001B27E 811 SWITCHCOM LABEL 1B27E 53574954 812 ASCII CNLW,SWITCHES 1B281 2411C69B 813 VFD D4+TDT+PNOD+ADR(DEVDISP) 1B283 0001CE69 814 VFD KLAS0*CLS+SSS*SLT+1*MWR+001411*MBS,ADR(MGSSW) 1B284 0001ED24 815 VFD ADR HLPMSWIT 816 0001B285 817 TFENCECOM LABEL 1B285 5446454E 818 ASCII CNLW,TFENCE 1B288 0431C69B 819 VFD D32+PNOD+ADR(DEVDISP) 1B28A 0001CE6C 820 VFD KLAS0*CLS+SSS*SLT+001409*MBS,ADR(MGSTF) 1B28B 0001ED47 821 VFD ADR HLPMTFEN 822 1B28C 54494D45 823 ASCII CNLW,TIMESET 1B28F 0001C908 824 VFD PNO+ADR(TIMESET) 1B291 00000000 825 VFD KLAS0*CLS+SSS*SLT+1*MWR+001416*MBS,0 1B292 0001ED61 826 VFD ADR HLPMTMST 827 1B293 5A202020 828 ASCII CNLW,Z 1B296 9A71C6CE 829 VFD PRQAD+A22+D32+TPT+ADR(MEMORY) 1B298 10000000 830 VFD 0*CLS+SSS*SLT+1*MWR+0*MBS,1*DSL 1B299 0001ED9D 831 VFD ADR HLPMSZ 832 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 76 (RDUCOMS) F 14 Command Tables 0001B29A 833 SSCTTOP LABEL 1B29A 0001CF92 834 VFD ADR(ERM123) 1B29B 0001CD9D 835 VFD ADR(MSSSCOMS) 836 BSS COMBLKLEN-DISPW SSCTTOP 0001B2A1 837 BIGCTTOP LABEL 1B2A1 0001CED6 838 VFD ADR(ERM100) 1B2A2 0001CD7F 839 VFD ADR(MSGENCOMS) 840 BSS COMBLKLEN-DISPW BIGCTTOP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 77 (RDUCOMS) F 14 Command Look Up Subroutines 843 844 ********************************************************************************** 845 * * 846 * COMLOOK is called to compare the symbol in SBUFF with * 847 * entries in the command table to determine if there is a * 848 * match. * 849 * If a match is found, COM will be returned pointing to * 850 * the matching entry, and R0 will be zero. * 851 * Note that the command tables are set up so that the last * 852 * entry in each table is the address of an error message explaining * 853 * the lack of a matching command in that table. * 854 * Call: * 855 * R4 -> end of command table (address of error message) * 856 * R5 -> beginning of command table * 857 * CALLNP COMLOOK * 858 * JNEZ R0 error message> * 859 * R5 -> matching entry * 860 * * 861 * Eats R0. Sets R5. * 862 * * 863 ********************************************************************************** 864 865 BLOCK 866 ENTRY COMLOOK 867 868 BEGFRAME 00178801 6 BASE 869 COMTEMP BSS 2 temp for terminator 870 ENDFRAME 871 1B2A8 DD5F8003 6 STAK 872 COMLOOK ENTRNP PUSH 1B2A9 E6578801 126 BASE 873 ST2 R1 SP,COMTEMP save registers 0001B2AA 874 COML10 LABEL 1B2AA 3801A830 0 875 LEA R0 SBUFFW point to user input 1B2AB 38974800 2 5 BASE 876 LEA R2 COM,COMNAME point to command name 1B2AC 6044000C 1 IMM 877 LD R1 CNL get name length 1B2AD FE540000 878 CMS see if this is the one 1B2AE FE03B2B4 879 JEQ COMLGOOD quit looking if found it 880 * \ / 881 1B2AF 19440007 5 IMM 882 ADD COM COMBLKLEN advance to next block 1B2B0 65530000 5 4 REG 883 CPR COM R4 are we out of choices? 1B2B1 FE09B2AA 884 JLT COML10 if not, then keep looking 1B2B2 60170800 0 4 BASE 885 LD R0 R4,0 get pointer to error message 1B2B3 FE0FB2B5 886 JMP COMLEXIT and get out of here 887 * --- 888 0001B2B4 889 COMLGOOD LABEL 1B2B4 60040000 0 IMM 890 LD R0 0 say we have no error 0001B2B5 891 COMLEXIT LABEL 1B2B5 62578801 126 BASE 892 LD2 R1 SP,COMTEMP restore registers 1B2B6 5D1F8003 6 STAK 893 LEAVE POP 894 * --- 895 896 END of COMLOOK subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 78 (RDUCOMS) F 14 Command Look Up Subroutines 898 899 ********************************************************************************** 900 * * 901 * DECODER simply checks the bit in the command element * 902 * that determines the type of alphabetic parameter to pick up * 903 * and then calls the appropriate version of FETCHITEM. * 904 * Call: * 905 * COM -> command element * 906 * BUFPT -> postion in buffer chars start * 907 * CALLNP DECODER * 908 * On return, R1 = terminating character. * 909 * R2 = item type * 910 * SBUFF = item returned * 911 * * 912 * Eats R0:R2. * 913 * * 914 ********************************************************************************** 915 916 BLOCK 917 ENTRY DECODER 918 919 BEGFRAME 920 ENDFRAME 921 1B2B7 DD5F8001 6 STAK 922 DECODER ENTRNP PUSH 1B2B8 60094C43 0 5 ZBM 923 LD R0 COM,COMCODE get the desired code type 1B2B9 64040002 0 IMM 924 CPR R0 CFILE/CCODE is this a file request? 1B2BA FE03B2BD 925 JEQ DCODFILE if so then different call 1B2BB DC41B33C 926 CALLNP FETCHAP else simple alpha fetch 1B2BC 5D1F8001 6 STAK 927 LEAVE STAK SP,1 then return to caller 928 * --- 929 0001B2BD 930 DCODFILE LABEL 1B2BD DC41B346 931 CALLNP FETCHITMF pick up file specifier 1B2BE 5D1F8001 6 STAK 932 LEAVE POP 933 * --- 934 935 END of DECODER subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 79 (RDUCOMS) F 14 Command Look Up Subroutines 937 938 ********************************************************************************** 939 * * 940 * This is the COMLIST routine. It is called to list out * 941 * the command table pointed to by COM. Commands are listed * 942 * out of the table until COM reaches R4 (top of table). * 943 * Call: * 944 * R4 -> end of command table * 945 * COM -> beginning of command table * 946 * CALLNP COMLIST * 947 * Eats R0:R2. * 948 * * 949 ********************************************************************************** 950 951 BLOCK 952 ENTRY COMLIST 953 954 BEGFRAME 00178801 6 BASE 955 CLSTTEMP BSS 1 temp for R7 956 ENDFRAME 957 1B2BF DD5F8002 6 STAK 958 COMLIST ENTRNP PUSH 1B2C0 E5D78801 7 6 BASE 959 ST R7 SP,CLSTTEMP save R7 from harm 1B2C1 DC41B8B8 960 CALLNP OUTCRLF make some room 1B2C2 60170801 0 4 BASE 961 LD R0 R4,1 get pointer to header 1B2C3 DC41B88A 962 CALLNP OUT list that out 963 * \ / 964 0001B2C4 965 CLST10 LABEL 1B2C4 DC41B86F 966 CALLNP BLANKOUT clear the buffer 1B2C5 61C40003 7 IMM 967 LD R7 NCOMPL-1 get number per line 0001B2C6 968 CLST20 LABEL 1B2C6 60AFCD7B 2 7 969 LD R2 COMPOST(R7) get line position 1B2C7 38174800 0 5 BASE 970 LEA R0 COM,COMNAME point to command name 1B2C8 6044000C 1 IMM 971 LD R1 CNL get name length 1B2C9 FE400000 972 CMOVE move into output line 1B2CA 19440007 5 IMM 973 ADD COM COMBLKLEN advance to next entry 1B2CB 65530000 5 4 REG 974 CPR COM R4 enough of this?? 1B2CC FE07B2D2 975 JGE CLST40 jump if almost done 1B2CD FBE7B2C6 7 976 JDR R7 CLST20 recycle if room on line 977 * \ / 978 1B2CE EC168000 2 CACH 979 STZ CACH R2,0 terminate the line 1B2CF 6005A818 0 IMM 980 LD R0 ADR(OBUFFW) point to the line 1B2D0 DC41B88A 981 CALLNP OUT list out the line 1B2D1 FE0FB2C4 982 JMP CLST10 then start anew 983 * --- 984 0001B2D2 985 CLST40 LABEL 1B2D2 EC168000 2 CACH 986 STZ CACH R2,0 mark the end 1B2D3 6005A818 0 IMM 987 LD R0 ADR(OBUFFW) point to the buffer 1B2D4 DC41B88A 988 CALLNP OUT list it out 1B2D5 61D78801 7 6 BASE 989 LD R7 SP,CLSTTEMP restore R7 1B2D6 5D1F8002 6 STAK 990 LEAVE POP 991 * --- 992 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 80 (RDUCOMS) F 14 Command Look Up Subroutines 993 END of COMLIST 129 130 INPUT RDUISUB 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 81 (RDUISUB) F 15 Input subroutines 3 00000000 ABS 4 CNM EQU 0 number 00000001 ABS 5 CHX EQU 1 hex number (A-F) 00000002 ABS 6 CAL EQU 2 alpha 00000003 ABS 7 CFC EQU 3 file character 00000004 ABS 8 CCM EQU 4 comma 00000005 ABS 9 CCL EQU 5 colon 00000006 ABS 10 CEL EQU 6 end-of-line 00000007 ABS 11 CBL EQU 7 blank 00000008 ABS 12 CSC EQU 8 semi-colon 00000009 ABS 13 CDT EQU 9 dot (period) 0000000A ABS 14 CLF EQU 10 line-feed 0000000B ABS 15 CUP EQU 11 up-arrow 0000000C ABS 16 CGT EQU 12 greater-than 0000000D ABS 17 CLT EQU 13 less-than 0000000E ABS 18 CAT EQU 14 at-sign 0000000F ABS 19 CQT EQU 15 single quote 00000010 ABS 20 CDQ EQU 16 double-quote 00000011 ABS 21 CER EQU 17 error 00000012 ABS 22 NFITYPES EQU 18 number of class types 23 00003E10 BYTE 24 TEOL EQU BIT 31 carriage return 00003C10 BYTE 25 TDOT EQU BIT 30 period, dot 00003A10 BYTE 26 TLFD EQU BIT 29 line-feed 00003810 BYTE 27 TUPA EQU BIT 28 up-arrow 00003610 BYTE 28 TPTR EQU BIT 27 pointer, greater-than 00003410 BYTE 29 TBPT EQU BIT 26 back-pointer, less-than 00003210 BYTE 30 TATS EQU BIT 25 at-sign 00003010 BYTE 31 TCOL EQU BIT 24 colon 00003080 BYTE 32 TERMS EQU BITS 24:31 terminator flags 00002E10 BYTE 33 TALPH EQU BIT 23 alpha 00002C10 BYTE 34 TNUM EQU BIT 22 number 00002A10 BYTE 35 TSTEP EQU BIT 21 single-step, semi-colon 00002810 BYTE 36 TSTR EQU BIT 20 string 00002610 BYTE 37 TQUO EQU BIT 19 single quote 00000000 ABS 38 TERR EQU 0 error 39 00000061 ABS 40 LOWCASE EQU 061 lower case characters 0000007A ABS 41 LOWTOP EQU 07A last lower case char 00000020 ABS 42 LOWBIAS EQU 020 change lower to upper 00000030 ABS 43 NUMBIAS EQU 030 change ASCII to binary 00000037 ABS 44 HEXBIAS EQU 037 hexadecimal conversion bias 0000007F ABS 45 GASMASK EQU 07F parity mask 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 82 (RDUISUB) F 15 Input subroutines 47 ********************************************************************************** 48 * * 49 * The following table is for determining character type of * 50 * each of the 128 ASCII characters (after stripping parity). * 51 * Each entry corresponds to one character. After converting * 52 * the character to a type, the type may then be used to index * 53 * one of the FETCHITM control tables. * 54 * * 55 ********************************************************************************** 56 1B2D7 0149B2D8 57 CODES PTR CODETAB pointer to ASCII code table 1B2D8 00000011 58 CODETAB VFD 5:CER,CER,CER,CER,CER,CER,CER,CER 1B2D9 00000011 59 VFDB 5:CER,CER,CLF,CER,CER,CEL,CER,CER 1B2DA 00000011 60 VFDB 5:CER,CER,CER,CER,CER,CER,CER,CER 1B2DC 00000011 61 VFDB 5:CER,CER,CER,CER,CER,CER,CER,CER 1B2DD 0000000F 62 VFDB 5:CBL,CAL,CDQ,CER,CFC,CER,CAL,CQT 1B2DE 00000011 63 VFDB 5:CER,CER,CAL,CFC,CCM,CER,CDT,CER 1B2DF 00000000 64 VFDB 5:CNM,CNM,CNM,CNM,CNM,CNM,CNM,CNM 1B2E1 00000011 65 VFDB 5:CNM,CNM,CCL,CSC,CLT,CER,CGT,CER 1B2E2 00000002 66 VFDB 5:CAT,CHX,CHX,CHX,CHX,CHX,CHX,CAL 1B2E3 00000002 67 VFDB 5:CAL,CAL,CAL,CAL,CAL,CAL,CAL,CAL 1B2E4 00000002 68 VFDB 5:CAL,CAL,CAL,CAL,CAL,CAL,CAL,CAL 1B2E6 00000002 69 VFDB 5:CAL,CAL,CAL,CER,CER,CER,CUP,CAL 1B2E7 00000002 70 VFDB 5:CER,CHX,CHX,CHX,CHX,CHX,CHX,CAL 1B2E8 00000002 71 VFDB 5:CAL,CAL,CAL,CAL,CAL,CAL,CAL,CAL 1B2E9 00000002 72 VFDB 5:CAL,CAL,CAL,CAL,CAL,CAL,CAL,CAL 1B2EB 00000011 73 VFDB 5:CAL,CAL,CAL,CER,CER,CER,CER,CER 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 83 (RDUISUB) F 15 Input subroutines 75 ********************************************************************************** 76 * * 77 * The following are the FETCHITM control tables. They are * 78 * state tables controlling actions by the item fetcher based * 79 * on entry type, current character, and current state. * 80 * * 81 * Current Fetchitm entry types are: * 82 * 0 = FETCHCOM - command fetch * 83 * 1 = FETCHCM2 - secondary command fetch * 84 * 2 = FETCHAP - alpha parameter fetch * 85 * 3 = FETCHNP - numeric parameter fetch * 86 * 4 = FETCHDATA - data item fetch * 87 * 5 = FETCHFILE - file name or unit fetch * 88 * * 89 ********************************************************************************** 90 00000000 ABS 91 FPN EQU 0 pack number 00000001 ABS 92 FCN EQU 1 continue number 00000002 ABS 93 FEP EQU 2 end packing 00000003 ABS 94 FPA EQU 3 pack alpha 00000004 ABS 95 FCA EQU 4 continue alpha 00000005 ABS 96 FCR EQU 5 carriage return 00000006 ABS 97 FSK EQU 6 skip to next (blank) 00000007 ABS 98 FDL EQU 7 delimiter (comma) 00000008 ABS 99 FSS EQU 8 single-step 00000009 ABS 100 FDT EQU 9 dot 0000000A ABS 101 FLF EQU 10 line feed 0000000B ABS 102 FUP EQU 11 up arrow 0000000C ABS 103 FPT EQU 12 pointer 0000000D ABS 104 FBP EQU 13 back-pointer 0000000E ABS 105 FAT EQU 14 at-sign 0000000F ABS 106 FPH EQU 15 hex digit (A-F) 00000010 ABS 107 FCL EQU 16 colon 00000011 ABS 108 FST EQU 17 string 00000012 ABS 109 FQT EQU 18 quote 00000013 ABS 110 FER EQU 19 error 111 112 * CNM,CHX,CAL,CFC,CCM,CCL,CEL,CBL,CSC,CDT,CLF,CUP,CGT,CLT,CAT,CQT,CDQ,CER 113 1B2ED 00000013 114 FITABI VFD 5:FPN,FPA,FPA,FER,FER,FER,FCR,FSK,FSS,FDT,FER,FER,FER,FER,FER,FER,FER,FER 1B2F0 00000013 115 VFDB 5:FPN,FPH,FPA,FER,FDL,FER,FCR,FSK,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER 1B2F3 00000013 116 VFDB 5:FER,FPA,FPA,FER,FDL,FER,FCR,FSK,FER,FER,FER,FER,FER,FER,FER,FQT,FST,FER 1B2F6 00000013 117 VFDB 5:FPN,FPN,FER,FER,FDL,FER,FCR,FSK,FER,FDT,FER,FER,FER,FER,FER,FER,FER,FER 1B2F9 00000013 118 VFDB 5:FPN,FPN,FER,FER,FDL,FCL,FCR,FSK,FER,FDT,FLF,FUP,FPT,FBP,FAT,FER,FER,FER 1B2FB 00000013 119 VFDB 5:FPN,FPA,FPA,FPA,FDL,FER,FCR,FSK,FER,FPA,FER,FER,FER,FER,FER,FER,FER,FER 120 1B2FE 00000013 121 FITABN VFD 5:FCN,FER,FER,FER,FEP,FER,FEP,FEP,FSS,FDT,FER,FER,FER,FER,FER,FER,FER,FER 1B301 00000013 122 VFDB 5:FCN,FER,FER,FER,FER,FER,FEP,FEP,FEP,FER,FER,FER,FER,FER,FER,FER,FER,FER 1B304 00000013 123 VFDB 5:FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER 1B307 00000013 124 VFDB 5:FCN,FCN,FER,FER,FEP,FEP,FEP,FEP,FER,FER,FER,FER,FER,FER,FER,FEP,FER,FER 1B30A 00000013 125 VFDB 5:FCN,FCN,FER,FER,FEP,FER,FCR,FEP,FER,FDT,FLF,FUP,FPT,FBP,FAT,FER,FER,FER 1B30C 00000013 126 VFDB 5:FCN,FER,FER,FEP,FEP,FER,FCR,FEP,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER 127 1B30F 00000013 128 FITABA VFD 5:FCA,FCA,FCA,FER,FEP,FER,FEP,FEP,FER,FDT,FER,FER,FER,FER,FER,FQT,FER,FER 1B312 00000013 129 VFDB 5:FCA,FCA,FCA,FER,FEP,FER,FEP,FEP,FER,FER,FER,FER,FER,FER,FER,FQT,FER,FER 1B315 00000013 130 VFDB 5:FCA,FCA,FCA,FER,FEP,FER,FEP,FEP,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 84 (RDUISUB) F 15 Input subroutines 1B318 00000013 131 VFDB 5:FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER 1B31B 00000013 132 VFDB 5:FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER,FER 1B31D 00000002 133 VFDB 5:FCA,FCA,FCA,FCA,FEP,FCA,FEP,FEP,FEP,FCA,FEP,FEP,FEP,FEP,FEP,FEP,FEP,FEP 134 1B31F 0149B2EC 135 FIPTI PTR FITABI 1B320 0149B2FD 136 FIPTN PTR FITABN 1B321 0149B30E 137 FIPTA PTR FITABA 138 139 BLOCK FETCHITEM subroutines 140 ENTRY FETCHCOM (Command fetch) 141 ENTRY FETCHCM2 (Secondary command fetch or hex digit) 142 ENTRY FETCHAP (Alpha param fetch) 143 ENTRY FETCHNP (Hex numeric param fetch) 144 ENTRY FETCHDN (Decimal numeric param fetch) 145 ENTRY FETCHDATA (Data fetch) 146 ENTRY FETCHITMF (File name/unit fetch) 147 1B322 FE0FB385 148 FITABX JMP FIPN 0 1B323 FE0FB387 149 JMP FICN 1 1B324 FEC00000 150 NOP 0 2 1B325 FE0FB366 151 JMP FIPA 3 1B326 FE0FB367 152 JMP FICA 4 1B327 7C840001 2 IMM 153 IOR R2 1*TEOL 5 1B328 FE0FB354 154 JMP FISK 6 1B329 FE0FB35B 155 JMP FIDL 7 1B32A 7C840400 2 IMM 156 IOR R2 1*TSTEP 8 1B32B 7C840002 2 IMM 157 IOR R2 1*TDOT 9 1B32C 7C840004 2 IMM 158 IOR R2 1*TLFD 10 1B32D 7C840008 2 IMM 159 IOR R2 1*TUPA 11 1B32E 7C840010 2 IMM 160 IOR R2 1*TPTR 12 1B32F 7C840020 2 IMM 161 IOR R2 1*TBPT 13 1B330 7C840040 2 IMM 162 IOR R2 1*TATS 14 1B331 FE0FB35E 163 JMP FIPH 15 1B332 7C840080 2 IMM 164 IOR R2 1*TCOL 16 1B333 FE0FB375 165 JMP FIPS 17 1B334 7C841000 2 IMM 166 IOR R2 1*TQUO 18 1B335 FE0FB39A 167 JMP FIERROR 19 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 85 (RDUISUB) F 15 Input subroutines 169 170 ********************************************************************************** 171 * * 172 * This is the FETCHITM routine. It scans the input buffer * 173 * and returns symbols or numbers or possibly a line terminator * 174 * (EOL or question mark). * 175 * * 176 * Entry types: * 177 * 0 - FETCHCOM (Command fetch) * 178 * 1 - FETCHCM2 (Secondary command fetch or hex digit) * 179 * 2 - FETCHAP (Alpha param fetch) * 180 * 3 - FETCHNP (Hex numeric param fetch) * 181 * 4 - FETCHDN (Decimal numeric param fetch) * 182 * 5 - FETCHDATA (Data fetch) * 183 * 6 - FETCHITMF (File name/unit fetch) * 184 * * 185 * Call: * 186 * BUFPT -> postion in buffer chars start * 187 * CALLNP FETCHxxx * 188 * On return, R1 = terminating character. * 189 * R2 = item type * 190 * SBUFF = item returned * 191 * Eats R0:R2. * 192 * * 193 * FETCHAP will return either an alphabetic item converted * 194 * to all capital letters, or if the the string is enclosed in * 195 * quotes will move the string into SBUFF and VALUE will contain * 196 * the length. The string will not be converted to capital * 197 * letters, and 2 double quotes in a row will be interpreted as * 198 * a single double quote to be left within the string. * 199 * * 200 ********************************************************************************** 201 202 BEGFRAME 00178801 6 BASE 203 FITYPE BSS 1 type of entry 00178802 6 BASE 204 FIRADIX BSS 1 radix of numbers 00178803 6 BASE 205 FIDELIM BSS 1 delimiter flag 206 ENDFRAME 207 1B336 DD5F8004 6 STAK 208 FETCHCOM ENTRNP PUSH 1B337 60040000 0 IMM 209 LD R0 0 flag entry type 1B338 FE0FB344 210 JMP FIDN then merge in 211 * --- 212 1B339 DD5F8004 6 STAK 213 FETCHCM2 ENTRNP PUSH 1B33A 60040001 0 IMM 214 LD R0 1 flag type 1B33B FE0FB34B 215 JMP FI00 and here's Johnny!! 216 * --- 217 1B33C DD5F8004 6 STAK 218 FETCHAP ENTRNP PUSH 1B33D 60040002 0 IMM 219 LD R0 2 flag type 1B33E FE0FB34B 220 JMP FI00 then into the fracas 221 * --- 222 1B33F DD5F8004 6 STAK 223 FETCHNP ENTRNP PUSH 1B340 60040003 0 IMM 224 LD R0 3 get code 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 86 (RDUISUB) F 15 Input subroutines 1B341 FE0FB34B 225 JMP FI00 then head out 226 * --- 227 1B342 DD5F8004 6 STAK 228 FETCHDN ENTRNP PUSH 1B343 60040003 0 IMM 229 LD R0 3 get code 0001B344 230 FIDN LABEL 1B344 6044000A 1 IMM 231 LD R1 10 get radix 1B345 FE0FB34C 232 JMP FI01 then merge in 233 * --- 234 1B346 DD5F8004 6 STAK 235 FETCHITMF ENTRNP PUSH 1B347 60040005 0 IMM 236 LD R0 5 set entry type code 1B348 FE0FB344 237 JMP FIDN then merge in 238 * --- 239 1B349 DD5F8004 6 STAK 240 FETCHDATA ENTRNP PUSH 1B34A 60040004 0 IMM 241 LD R0 4 set type code 0001B34B 242 FI00 LABEL 1B34B 60440010 1 IMM 243 LD R1 16 use hex radix 0001B34C 244 FI01 LABEL 1B34C E4578802 1 6 BASE 245 ST R1 SP,FIRADIX set radix for numbers 1B34D 1C040012 0 IMM 246 MUL R0 NFITYPES bias by number of entries 1B34E E4178801 0 6 BASE 247 ST R0 SP,FITYPE save for table indexing 1B34F 3881A830 2 248 LEA R2 SBUFFW point to the symbol buffer 1B350 60440060 1 IMM 249 LD R1 SBMAXL maximum buffer size 1B351 FE580020 250 CFILL BLANK and blank it out clean! 1B352 60840000 2 IMM 251 LD R2 0 clear item type 1B353 EC178803 6 BASE 252 STZ SP,FIDELIM say no delimiter seen 0001B354 253 FISK LABEL 1B354 6001A8E5 0 254 LD R0 BUFPT get buffer pointer 1B355 E401A8E6 0 255 ST R0 LBUFPT save in case we need it later 1B356 DC41B39C 256 CALLNP GETCHAR get a character 1B357 18578801 1 6 BASE 257 ADD R1 SP,FITYPE bias code 1B358 6073B31F 1 1 @ 258 LD R1 @FIPTI(R1) get jump code 1B359 5D63B322 1 259 XCT FITABX(R1) then do the operation 1B35A FE0FB394 260 JMP FIEX exit if not going elsewhere 261 * --- 262 0001B35B 263 FIDL LABEL have delimiter (comma) 1B35B D1D78803 6 BASE 264 SETT SP,FIDELIM say we have seen one 1B35C FE0DB354 265 JNE FISK if first one then skip on 1B35D FE0FB39A 266 JMP FIERROR but error if already seen 267 * --- 268 0001B35E 269 FIPH LABEL pack hex number 1B35E E4128000 0 2 REG 270 ST R0 R2 save digit 1B35F DC41B39C 271 CALLNP GETCHAR check the next one 1B360 6001A8E5 0 272 LD R0 BUFPT restore buffer pointer 1B361 D04A1F30 0 CBM 273 DEC R0/NXTCHAR backup to see again 1B362 E401A8E5 0 274 ST R0 BUFPT no other way 1B363 60128000 0 2 REG 275 LD R0 R2 get the character back 1B364 64440002 1 IMM 276 CPR R1 CAL alpha, hex, or number? 1B365 FE05B385 277 JGT FIPN if not then pack as number 0001B366 278 FIPA LABEL process alpha 1B366 60840000 2 IMM 279 LD R2 0 buffer pointer 0001B367 280 FICA LABEL (no, its not Social Security) 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 87 (RDUISUB) F 15 Input subroutines 1B367 64840060 2 IMM 281 CPR R2 SBMAXL see if enough 1B368 FE07B36B 282 JGE FIA10 jump if full (I wouldn't try) 1B369 E435AC02 0 2 @ 283 ST R0 @SBPT(R2) add to former string 1B36A 18840001 2 IMM 284 ADD R2 1 advance pointer 0001B36B 285 FIA10 LABEL 1B36B DC41B39C 286 CALLNP GETCHAR get next character 1B36C 18578801 1 6 BASE 287 ADD R1 SP,FITYPE bias by entry type 1B36D 6073B321 1 1 @ 288 LD R1 @FIPTA(R1) get function code 1B36E 5D63B322 1 289 XCT FITABX(R1) and perform operation 1B36F E481A8EC 2 290 ST R2 SBCHARL for those who want the character length 1B370 10840001 2 IMM 291 SUB R2 1 to determine word length 1B371 14840004 2 IMM 292 DIV R2 NCPW in case it's a symbol 1B372 E481A8EB 2 293 ST R2 SBL save for anyone who cares 1B373 60840100 2 IMM 294 LD R2 1*TALPH get type code to return 1B374 FE0FB394 295 JMP FIEX then head on out 296 * --- 297 0001B375 298 FIPS LABEL string packer 1B375 60840000 2 IMM 299 LD R2 0 set length at zero 0001B376 300 FICS LABEL 1B376 DC41B3A9 301 CALLNP GETCHARX get a character from input 1B377 64040022 0 IMM 302 CPR R0 QUOTES is it a double-quote? 1B378 FE03B37F 303 JEQ FIES if so then possible end 1B379 6404000D 0 IMM 304 CPR R0 CR check for end-of-line 1B37A FE03B39A 305 JEQ FIERROR if so then complain 0001B37B 306 FIQS LABEL 1B37B 64840060 2 IMM 307 CPR R2 SBMAXL enough string? 1B37C FE07B376 308 JGE FICS if so then ignore the rest 1B37D E435AC02 0 2 @ 309 ST R0 @SBPT(R2) place into symbol buffer 1B37E FAA1B376 2 310 IRJ R2 FICS up counter and continue on 311 * \ / 312 0001B37F 313 FIES LABEL 1B37F DC41B3A9 314 CALLNP GETCHARX get another character 1B380 64040022 0 IMM 315 CPR R0 QUOTES is it another quote? 1B381 FE03B37B 316 JEQ FIQS if so then pack only one 1B382 E481A8ED 2 317 ST R2 VALUE save the string length 1B383 60840800 2 IMM 318 LD R2 1*TSTR get our return type 1B384 FE0FB394 319 JMP FIEX then bail on out 320 * --- 321 0001B385 322 FIPN LABEL number processing 1B385 EC01A830 323 STZ SBUFFW zero out the buffer 1B386 60840200 2 IMM 324 LD R2 1*TNUM remember we have number 0001B387 325 FICN LABEL 1B387 10040030 0 IMM 326 SUB R0 NUMBIAS take off ASCII clothes 1B388 64040009 0 IMM 327 CPR R0 9 do we have a digit yet? 1B389 FE0BB38D 328 JLE FIDD jump if a decimal digit 1B38A 10040007 0 IMM 329 SUB R0 HEXBIAS-NUMBIAS otherwise it's a hex digit 1B38B 64178802 0 6 BASE 330 CPR R0 SP,FIRADIX are we fetching hex? 1B38C FE07B39A 331 JGE FIERROR error if not 332 * \ / 333 0001B38D 334 FIDD LABEL 1B38D 60578802 1 6 BASE 335 LD R1 SP,FIRADIX get hex radix 1B38E 9C41A830 1 336 MULM R1 SBUFFW bump current value 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 88 (RDUISUB) F 15 Input subroutines 1B38F 9801A830 0 337 ADDM R0 SBUFFW add new digit 1B390 DC41B39C 338 CALLNP GETCHAR get next character 1B391 18578801 1 6 BASE 339 ADD R1 SP,FITYPE bias for entry type 1B392 6073B320 1 1 @ 340 LD R1 @FIPTN(R1) then get function code 1B393 5D63B322 1 341 XCT FITABX(R1) perform proper operation 0001B394 342 FIEX LABEL 1B394 6041A8E5 1 343 LD R1 BUFPT get buffer pointer 1B395 D04A5F30 1 CBM 344 DEC R1/NXTCHAR back up so we can see again 1B396 E441A8E5 1 345 ST R1 BUFPT for later 1B397 60520000 1 0 REG 346 LD R1 R0 get terminating character 1B398 6001A830 0 347 LD R0 SBUFFW get first word or value 0001B399 348 FIEXIT LABEL 1B399 5D1F8004 6 STAK 349 LEAVE POP 350 * --- 351 0001B39A 352 FIERROR LABEL error!!! 1B39A 60840000 2 IMM 353 LD R2 1*TERR give a nothing response 1B39B FE0FB399 354 JMP FIEXIT 355 * --- 356 357 END of FETCHITEM routines 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 89 (RDUISUB) F 15 Input subroutines 359 360 ********************************************************************************** 361 * * 362 * GETCHAR picks up one character from the input buffer, * 363 * converts from lower to upper case if necessary, and picks up * 364 * the character type from the decode table. * 365 * GETCHARX does not do case conversion. * 366 * Call: * 367 * BUFPT -> char in buffer to get * 368 * CALLNP GETCHAR(X) * 369 * * 370 * On return, R0 = character (7 bit) * 371 * R1 = character type * 372 * BUFPT -> next char in buffer * 373 * Eats R0:R1. * 374 * * 375 ********************************************************************************** 376 377 BLOCK 378 ENTRY GETCHAR 379 ENTRY GETCHARX 380 381 BEGFRAME 382 ENDFRAME 383 1B39C DD5F8001 6 STAK 384 GETCHAR ENTRNP PUSH 1B39D 6041A8E5 1 385 LD R1 BUFPT get pointer to input buffer 1B39E 60164000 0 1 CACH 386 LD R0 CACH R1,0 get a character 1B39F 7804007F 0 IMM 387 AND R0 GASMASK chop off parity garbage 1B3A0 D00A5F30 1 CBM 388 INC R1/NXTCHAR advance to next char in buf 1B3A1 E441A8E5 1 389 ST R1 BUFPT remember for later 1B3A2 64040061 0 IMM 390 CPR R0 LOWCASE check for lower case 1B3A3 FE09B3A7 391 JLT GC30 jump if not 1B3A4 6404007A 0 IMM 392 CPR R0 LOWTOP be sure its in range 1B3A5 FE05B3A7 393 JGT GC30 jump if not lower case 1B3A6 10040020 0 IMM 394 SUB R0 LOWBIAS convert to upper case 0001B3A7 395 GC30 LABEL 1B3A7 6071B2D7 1 0 @ 396 LD R1 @CODES(R0) get character group type 1B3A8 5D1F8001 6 STAK 397 LEAVE POP 398 * --- 399 1B3A9 DD5F8001 6 STAK 400 GETCHARX ENTRNP PUSH 1B3AA 6041A8E5 1 401 LD R1 BUFPT get pointer to input buffer 1B3AB 60164000 0 1 CACH 402 LD R0 CACH R1,0 get a character 1B3AC 7804007F 0 IMM 403 AND R0 GASMASK chop off parity garbage 1B3AD D00A5F30 1 CBM 404 INC R1/NXTCHAR advance to next char in buf 1B3AE E441A8E5 1 405 ST R1 BUFPT remember for later 1B3AF FE0FB3A7 406 JMP GC30 then head on out 407 * --- 408 409 END of GETCHAR subroutines 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 90 (RDUISUB) F 15 Input subroutines 411 412 ********************************************************************************** 413 * * 414 * READLINE picks up input from the user's terminal. * 415 * It will keep the remote machine alive (if present) while * 416 * waiting for the slow user to tell us what to do. * 417 * The input is left in the input buffer (IBUFF) with the * 418 * terminator added on the end and stored in TERMCHAR. R1 * 419 * contains the number of chars read. Also the event is logged. * 420 * When doing concurrent processing, this guy does ALL of * 421 * the work -- handling timeout interrupts, path data from the * 422 * concurrent process, sending data to the proper destination, * 423 * keeping the remote system alive, and anything else you can * 424 * think of. * 425 * Optional entry READLINERM will suspend only once for * 426 * terminal input. * 427 * Optional entry READLINENW will not suspend for input. * 428 * Call: * 429 * CALLNP READLINE(xx) * 430 * R0 = 0 if have data * 431 * = RTEOD if end of data read * 432 * < 0 if error during read * 433 * R1 = number of chars read * 434 * R2 = terminating character (=TERMCHAR) * 435 * IBUFF contains input * 436 * Eats R0:R3 * 437 * * 438 ********************************************************************************** 439 440 BLOCK 441 ENTRY READLINE 442 ENTRY READLINERM 443 ENTRY READLINENW 444 445 BEGFRAME 00178801 6 BASE 446 RLTEMP BSS 2 temporary help 447 ENDFRAME 448 00000010 BYTE 449 NOWAITBIT EQU BIT 0 bit in R7 sez do not allow suspend on read 00000210 BYTE 450 RTNTOME EQU BIT 1 bit in R7 sez do not loop for input here 451 1B3B0 DD5F8003 6 STAK 452 READLINERM ENTRNP PUSH 1B3B1 EDCBC210 7 CBM 453 STW R7/RTNTOME indicate wait for terminal only once 1B3B2 FE0FB3B7 454 JMP WAITENTRY go share entry 455 * --- 456 1B3B3 DD5F8003 6 STAK 457 READLINENW ENTRNP PUSH 1B3B4 EDCBC010 7 CBM 458 STW R7/NOWAITBIT indicate can't wait for terminal 1B3B5 FE0FB3B7 459 JMP WAITENTRY go share entry 460 * --- 461 1B3B6 DD5F8003 6 STAK 462 READLINE ENTRNP PUSH 0001B3B7 463 WAITENTRY LABEL 1B3B7 EC01F695 464 STZ TIMEOUTPC clear interrupt processing 1B3B8 EC01A8E2 465 STZ INTFLAGS clear left-over interrupts 466 * \ / 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 91 (RDUISUB) F 15 Input subroutines 467 468 * Set up to be interrupted if a concurrent process is trying 469 * to communicate with us over a path. 470 1B3B9 5C01A8D7 471 CMZ CPSTATE concurrent processing? 1B3BA FE03B3BE 472 JEQ RLSETTIM jump if not 1B3BB 60040080 0 IMM 473 LD R0 URSSINTARM arm for path input 1B3BC 60420080 1 IMM 474 LD R1 PATHBIT get proper bit to set 1B3BD 09040000 IMM 475 UREQ 0+XREQ now we will get path data 476 * \ / 477 0001B3BE 478 RLSETTIM LABEL 1B3BE DC41BD2D 479 CALLNP TIMER set up timeout interrupt so we can 480 * send NOPs to keep the remote alive 0001B3BF 481 RLSETTIM1 LABEL 1B3BF 6005B3E7 0 IMM 482 LD R0 ADR RLINTRPT set up interrupt return 1B3C0 E401F695 0 483 ST R0 TIMEOUTPC place to go on time-out 1B3C1 5C01A8E2 484 CMZ INTFLAGS any interrupts sneak in? 1B3C2 FE0DB3EC 485 JNE RLINTRPT1 if so then go examine 486 * \ / 487 1B3C3 EDC1A915 488 STW LINECNT reset output line counter (for MORE processing) 1B3C4 60040030 0 IMM 489 LD R0 FRREAD set up to input line 1B3C5 F3C1B3C7 7 490 JBF R7/NOWAITBIT NORMREAD check for no terminal suspend 1B3C6 7C048000 0 IMM 491 IOR R0 XRSUSPERR don't allow terminal suspend 0001B3C7 492 NORMREAD LABEL 1B3C7 6044005F 1 IMM 493 LD R1 OKLEN-1 acceptable length 1B3C8 6081AC00 2 494 LD R2 IBPT point to input buffer 1B3C9 E481A8E5 2 495 ST R2 BUFPT initialize pointer 1B3CA E481AA4C 2 496 ST R2 EVENTADDR initialize EventAddr 1B3CB 08840001 IMM 497 FREQ LUNSIN+XREQ slurp up some input 498 * \ / 499 0001B3CC 500 RLRD LABEL 1B3CC EC01F695 501 STZ TIMEOUTPC have data - don't want timeout 1B3CD FA09B3E1 0 502 JLTZ R0 RLREADERR jump on XREQ error 1B3CE FA49B3E1 1 503 JLTZ R1 RLREADERR or if input line is too long 1B3CF 3044005F 1 IMM 504 RSB R1 OKLEN-1 obtain actual length 505 1B3D0 600A2040 0 0 CBM 506 LD R0 R0/RECTYPE get type of record 1B3D1 64040000 0 IMM 507 CPR R0 RTTEXT be sure its simple text 1B3D2 FE0DB3E1 508 JNE RLREADERR error if not 1B3D3 7884007F 2 IMM 509 AND R2 GASMASK remove parity bit from terminator 1B3D4 E481A8E7 2 510 ST R2 TERMCHAR remember input line terminator 1B3D5 E4B3AC00 2 1 @ 511 ST R2 @IBPT(R1) tack terminator on end of input line 1B3D6 6481A8EF 2 512 CPR R2 EXITCHAR is this the exit character? 1B3D7 FE03B3DB 513 JEQ RLEXOK exit now if it is 514 * \ / 515 1B3D8 DC41CCCD 516 CALLNP SPECSAVE put line into session log 1B3D9 6001A8D7 0 517 LD R0 CPSTATE see if there is a concurrent process 1B3DA FA0DB3FA 0 518 JNEZ R0 RLSENDCP don't exit if working with concurrency 519 * \ / 520 0001B3DB 521 RLEXOK LABEL 1B3DB 60040000 0 IMM 522 LD R0 0 return the all-clear code 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 92 (RDUISUB) F 15 Input subroutines 0001B3DC 523 RLEXIT LABEL 1B3DC E6178801 016 BASE 524 ST2 R0 SP,RLTEMP save the return code 1B3DD 60040142 0 IMM 525 LD R0 URCLRTIMIN clear any time bombs 1B3DE 09040000 IMM 526 UREQ 0+XREQ no lurking in the shadows!! 1B3DF 62178801 016 BASE 527 LD2 R0 SP,RLTEMP restore return info 1B3E0 5D1F8003 6 STAK 528 LEAVE POP 529 * --- 530 531 * Error on the read. Complain and try again. 0001B3E1 532 RLREADERR LABEL 1B3E1 6007FFFF 0 IMM 533 LD R0 -1 to indicate no data 1B3E2 F7C1B3DC 7 534 JBT R7/NOWAITBIT RLEXIT return could not suspend error 1B3E3 DC41B8B8 535 CALLNP OUTCRLF pretty the terminal 1B3E4 6005CEDA 0 IMM 536 LD R0 ADR ERM102 "Bad input -- try again" 1B3E5 DC41B88A 537 CALLNP OUT complain a bit 1B3E6 FE0FB3EC 538 JMP RLINTRPT1 try, try again 539 * --- 540 541 * An interrupt has occurred. See what type it was and go the 542 * appropriate direction. 543 0001B3E7 544 RLINTRPT LABEL (come here on interrupt) 1B3E7 E4178801 0 6 BASE 545 ST R0 SP,RLTEMP save data a moment 1B3E8 6001F692 0 546 LD R0 INTERPC get program counter when hit 1B3E9 6405B3CC 0 IMM 547 CPR R0 ADR RLRD had we read yet? 1B3EA 60178801 0 6 BASE 548 LD R0 SP,RLTEMP get our data back 1B3EB FE03B3CC 549 JEQ RLRD if we read, then take the input 550 * \ / 551 0001B3EC 552 RLINTRPT1 LABEL 1B3EC D181A8E0 553 CLRT UBREAK have we seen a Break? 1B3ED FE0DB3F6 554 JNE RLBRK if so then process it 1B3EE D191AC09 @ 555 CLRT @PDFLAG is there path data? 1B3EF FE0DB405 556 JNE RLPATHDATA if so handle it now 1B3F0 D191AC08 @ 557 CLRT @TOFLAG has a timeout occurred? 1B3F1 FE03B3BF 558 JEQ RLSETTIM1 if not then back around again 1B3F2 6007FFFF 0 IMM 559 LD R0 -1 to indicate no data 1B3F3 F7C3B3DC 7 560 JBT R7/RTNTOME RLEXIT return if caller does not want to wait 1B3F4 DC41BC7E 561 CALLNP SHIPNOP else keep remote system alive 1B3F5 FE0FB3BE 562 JMP RLSETTIM and start counting again 563 * --- 564 565 * The interrupt was a break. Let the RDU handle it. 566 0001B3F6 567 RLBRK LABEL 1B3F6 5C01A8D7 568 CMZ CPSTATE any concurrent processing? 1B3F7 FE03BE49 569 JEQ RDUBRK if not then take the break 1B3F8 6007FFFF 0 IMM 570 LD R0 -1 say we have no data 1B3F9 FE0FB3DC 571 JMP RLEXIT then exit to caller 572 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 93 (RDUISUB) F 15 Input subroutines 574 575 ********************************************************************************** 576 * * 577 * There is a concurrent process present. See if the input * 578 * is meant for it or for us (the RDU). If for us return to * 579 * caller, if for concurrent pack it up and send it out. * 580 * * 581 ********************************************************************************** 582 0001B3FA 583 RLSENDCP LABEL 1B3FA 64040001 0 IMM 584 CPR R0 1 talking to concurrent process or RDU? 1B3FB FE03B3DB 585 JEQ RLEXOK give this line to the RDU to handle 1B3FC 6085A800 2 IMM 586 LD R2 ADR IBUFFW R2 -> input line 1B3FD FE09B400 587 JLT RLSENDCP1 if local mode then send the line as is 588 * \ / 589 590 * Let the concurrent process know this line came from the operator. 1B3FE 18440001 1 IMM 591 ADD R1 1 add a character otherwise 1B3FF D04A9F30 2 CBM 592 DEC R2/NXTCHAR add our "O" on front 0001B400 593 RLSENDCP1 LABEL 1B400 60048040 0 IMM 594 LD R0 FRWRITE+XRSUSPERR ship line to concurrent proc 1B401 0881A91C 595 FREQ PATHS(1+XREQ) use our output path 1B402 FA09B447 0 596 JLTZ R0 RLSENDERR jump if couldn't ship the line 1B403 DC41B8B8 597 CALLNP OUTCRLF space a little 1B404 FE0FB3EC 598 JMP RLINTRPT1 now look for interrupts 599 * --- 600 601 ********************************************************************************** 602 * * 603 * We got an interrupt indicating path data is waiting. * 604 * We want to read from the path and send the data * 605 * wherever it is destined to go. * 606 * * 607 ********************************************************************************** 608 0001B405 609 RLPATHDATA LABEL 1B405 5C01A8D8 610 CMZ MOREPROC are we doing more processing? 1B406 FE0DB3BE 611 JNE RLSETTIM if so then ignore concurrent process 1B407 60048030 0 IMM 612 LD R0 FRREAD+XRSUSPERR pick up the incoming line 1B408 6044005F 1 IMM 613 LD R1 OKLEN-1 standard length 1B409 6085A800 2 IMM 614 LD R2 ADR IBUFFW standard input buffer 1B40A 0881A91B 615 FREQ PATHS(XREQ) read from our input path 1B40B FA09B44F 0 616 JLTZ R0 RLPATHRERR exit if no good 1B40C FA49B44F 1 617 JLTZ R1 RLPATHRERR error if line too long 618 * \ / 619 1B40D 600A2040 0 0 CBM 620 LD R0 R0/RECTYPE get type of record 1B40E 64040009 0 IMM 621 CPR R0 RTEOD end of data? 1B40F FE03B44B 622 JEQ RLCONDONE exit if that's the case 1B410 64040000 0 IMM 623 CPR R0 RTTEXT is this a text record? 1B411 FE03B416 624 JEQ RL41 jump on down if it is 1B412 64040002 0 IMM 625 CPR R0 RTBIN is it a binary record? 1B413 FE03B416 626 JEQ RL41 that's okay too 1B414 64040001 0 IMM 627 CPR R0 RTTEXTF else must be text with forms 1B415 FE0DB44F 628 JNE RLPATHRERR error if not 629 * \ / 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 94 (RDUISUB) F 15 Input subroutines 630 0001B416 631 RL41 LABEL 1B416 E4178801 0 6 BASE 632 ST R0 SP,RLTEMP remember the record type 1B417 3044005F 1 IMM 633 RSB R1 OKLEN-1 determine line length 1B418 6085A800 2 IMM 634 LD R2 ADR IBUFFW point to input line 1B419 5C01A8D7 635 CMZ CPSTATE now, what do we do with it? 1B41A FE09B430 636 JLT RLLOCOUT jump if Local mode 637 * \ / 638 1B41B 6011AC00 0 @ 639 LD R0 @IBPT get the control character 1B41C 6404004F 0 IMM 640 CPR R0 "O" for the operator? 1B41D FE03B42E 641 JEQ RLCONOUT if so then go print it out 1B41E 64040043 0 IMM 642 CPR R0 "C" is it a command for us? 1B41F FE03B43A 643 JEQ RLCONCCMND if so go process it 1B420 64040052 0 IMM 644 CPR R0 "R" for the remote system? 1B421 FE0DB44F 645 JNE RLPATHRERR if not then bitch 646 * \ / 647 1B422 EDC1A8E3 648 STW ORIGIN say this is from Conc. proc. 1B423 DC01BBA5 649 CALL SHIPCOMDT now to ship out a command 1B424 4101BBF5 650 PAR RESPERROR error address 1B425 41568002 2 CACH 651 PARV R2,CPCLASS need the class 1B426 41568003 2 CACH 652 PARV R2,CPSLOT and the slot 1B427 41568801 2 BASE 653 PARV R2,CPDATA and the data 1B428 40568001 2 CACH 654 PARVL R2,CPTIME and the extra time delay 1B429 DC41BD2D 655 CALLNP TIMER set up another timeout 0001B42A 656 RLARMINT LABEL 1B42A 60040080 0 IMM 657 LD R0 URSSINTARM let's rearm path data interrupts 1B42B 60420080 1 IMM 658 LD R1 PATHBIT the bit to set 1B42C 09040000 IMM 659 UREQ 0 do it 1B42D FE0FB3EC 660 JMP RLINTRPT1 661 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 95 (RDUISUB) F 15 Input subroutines 663 664 ********************************************************************************** 665 * * 666 * We get here either when a concurrent process is sending a * 667 * message to the operator (RLCONOUT) or we are in local mode and * 668 * the process is sending output to the operator (RLLOCOUT). * 669 * In either case we output to the operator's terminal the contents * 670 * of IBUFF (minus the destination character if present). * 671 * * 672 ********************************************************************************** 673 0001B42E 674 RLCONOUT LABEL 1B42E 10440001 1 IMM 675 SUB R1 1 get rid of first character 1B42F D00A9F30 2 CBM 676 INC R2/NXTCHAR move past it please 0001B430 677 RLLOCOUT LABEL 1B430 60040040 0 IMM 678 LD R0 FRWRITE now to print it out 1B431 18178801 0 6 BASE 679 ADD R0 SP,RLTEMP factor in the record type 1B432 DC41CCC7 680 CALLNP SAVEEVENT save the event 1B433 08840002 IMM 681 FREQ LUNSOUT+XREQ there it goes!!! 1B434 DC41CCB3 682 CALLNP LOGIT log it 683 1B435 D191AC08 @ 684 CLRT @TOFLAG did timeout also occur? 1B436 FE03B42A 685 JEQ RLARMINT if not then don't try to talk 1B437 DC41BC7E 686 CALLNP SHIPNOP keep remote system alive 1B438 DC41BD2D 687 CALLNP TIMER start our timer again 1B439 FE0FB42A 688 JMP RLARMINT then return from processing interrupt 689 * --- 690 691 * The path data is a command meant for the RDU 692 0001B43A 693 RLCONCCMND LABEL 1B43A 60040001 0 IMM 694 LD R0 1 1B43B 3831AC00 0 0 @ 695 LEA R0 @IBPT(R0) R0 -> past leading C 1B43C E401AA4C 0 696 ST R0 EVENTADDR save for log 1B43D E401A8E5 0 697 ST R0 BUFPT and set our pointer into the buffer 1B43E 6084000D 2 IMM 698 LD R2 CR get a terminator 1B43F E4B3AC00 2 1 @ 699 ST R2 @IBPT(R1) tack on the end 1B440 E481A8E7 2 700 ST R2 TERMCHAR save for posterity sake 1B441 10440001 1 IMM 701 SUB R1 1 since we lost the first char 1B442 E6578801 126 BASE 702 ST2 R1 SP,RLTEMP save these 1B443 DC41CCCD 703 CALLNP SPECSAVE log this historic event 1B444 DC41B8AC 704 CALLNP OUTCR echo the terminator 1B445 62578801 126 BASE 705 LD2 R1 SP,RLTEMP restore these 1B446 FE0FB3DB 706 JMP RLEXOK return from interrupt 707 * --- 708 709 * Error sending to concurrent session. 0001B447 710 RLSENDERR LABEL 1B447 60C5D2E2 3 IMM 711 LD R3 ADR ERM514 "Couldn't send to concurrent" 712 * \ / 713 714 * Error occurred with concurrent process. R3 -> error message. 0001B448 715 RLCONCERR LABEL 1B448 DC41B8B8 716 CALLNP OUTCRLF make room 1B449 6012C000 0 3 REG 717 LD R0 R3 R0 -> error message 1B44A DC41B88A 718 CALLNP OUT ship out complaint 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 96 (RDUISUB) F 15 Input subroutines 719 * \ / 720 721 * Concurrent process sent EOD. Clean up and leave. 0001B44B 722 RLCONDONE LABEL 1B44B EC01A8D7 723 STZ CPSTATE say we no longer have a concurrent 1B44C DC41BD20 724 CALLNP PATHCLOSE shut down the path links 1B44D DC41B8C2 725 CALLNP OUTPROMPT let the user know we are waiting for him 1B44E FE0FB3EC 726 JMP RLINTRPT1 where to return to 727 * --- 728 729 * Error reading from concurrent process. 0001B44F 730 RLPATHRERR LABEL 1B44F 60C5D159 3 IMM 731 LD R3 ADR ERM190 "Bad input from conc. proc." 1B450 FE0FB448 732 JMP RLCONCERR and get out of here 733 * --- 734 735 END of READLINE subroutines 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 97 (RDUISUB) F 15 Input subroutines 737 738 ********************************************************************************** 739 * * 740 * PACKER is called to take the string in SBUFF and * 741 * pack it into the standard PAK6 format. * 742 * Call: * 743 * SBUFF contains string to be packed * 744 * CALLNP PACKER * 745 * Returns: * 746 * R0:R1 = or R0 = 0 on error * 747 * Eats R0:R1. * 748 * * 749 ********************************************************************************** 750 751 BLOCK 752 ENTRY PACKER 753 754 BEGFRAME 00178801 6 BASE 755 PKRTMP BSS2 1 temp for R2 and R3 756 ENDFRAME 757 1B451 DD5F8003 6 STAK 758 PACKER ENTRNP PUSH 1B452 E6978801 236 BASE 759 ST2 R2 SP,PKRTMP save R2 and R3 from harm 1B453 60040100 0 IMM 760 LD R0 URPACKI request for pack-up 1B454 6045A830 1 IMM 761 LD R1 ADR SBUFF point to the buffer 1B455 09040000 IMM 762 UREQ XREQ let the system do the work 1B456 FA09B45A 0 763 JLTZ R0 PACKERR what to do if problems 764 * \ / 1B457 62148000 0123 PAIR 765 LD2 R0 PAIR R2 put result in R0 and R1 1B458 62978801 236 BASE 766 LD2 R2 SP,PKRTMP restore R2 and R3 1B459 5D1F8003 6 STAK 767 LEAVE POP 768 * --- 769 0001B45A 770 PACKERR LABEL 1B45A 60040000 0 IMM 771 LD R0 0 say problem happened 1B45B 62978801 236 BASE 772 LD2 R2 SP,PKRTMP restore R2 and R3 1B45C 5D1F8003 6 STAK 773 LEAVE POP 774 * --- 775 776 END of PACKER 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 98 (RDUISUB) F 15 Input subroutines 778 779 ********************************************************************************** 780 * * 781 * ONOFFGET is called to fetch an item from the input line which * 782 * must be an ON, YES, or Y, or an OFF, NO, or N. On return, R0=0 if a * 783 * valid symbol was found or else it contains an error code. If no * 784 * error was made, R1=0 for OFF, and R1=1 for ON. * 785 * SBUFF = symbol * 786 * CALLNP ONOFFGET * 787 * Returns R0 = 0 if valid symbol or -> error message if not * 788 * R1 = 0 for off (no, n), or 1 for on (yes, y) * 789 * Eats R0:R1. * 790 * * 791 ********************************************************************************** 792 793 BLOCK 794 ENTRY ONOFFGET 795 796 BEGFRAME 797 ENDFRAME 798 1B45D DD5F8001 6 STAK 799 ONOFFGET ENTRNP PUSH 1B45E 6001A830 0 800 LD R0 SBUFFW get the symbol back 1B45F 60440005 1 IMM 801 LD R1 OOTLEN-1 get table length 0001B460 802 OO10 LABEL 1B460 6423AC2E 0 1 803 CPR R0 ONOFFTAB(R1) see if this entry matches 1B461 FE03B465 804 JEQ OO20 jump if a good one 1B462 FA67B460 1 805 JDR R1 OO10 try another if not 806 * \ / 807 1B463 6005CF5E 0 IMM 808 LD R0 ADR ERM115 "ON or OFF expected" 0001B464 809 OOEXIT LABEL 1B464 5D1F8001 6 STAK 810 LEAVE POP 811 * --- 812 0001B465 813 OO20 LABEL 1B465 60040000 0 IMM 814 LD R0 0 say we have no error 1B466 64440003 1 IMM 815 CPR R1 ONSYMS check for type of return 1B467 60440001 1 IMM 816 LD R1 1 assume it is on or yes 1B468 FE07B464 817 JGE OOEXIT if ON, then we're all set 1B469 60440000 1 IMM 818 LD R1 0 say we want to turn off 1B46A FE0FB464 819 JMP OOEXIT then return 820 * --- 821 822 END of ONOFFGET subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 99 (RDUISUB) F 15 Input subroutines 824 825 ********************************************************************************** 826 * * 827 * OUTIN is both an input and an output routine. It adds a * 828 * blank onto the end of the output line then writes it to the * 829 * terminal and session log. A response is then read, and the * 830 * terminator is checked against the valid terminators for the * 831 * command being processed. * 832 * Call: * 833 * COM -> command element * 834 * OBP = number of chars to output * 835 * OBUFF contains output * 836 * CALLNP OUTIN * 837 * JNEZ R0 error message> * 838 * R2 = FI code * 839 * SBUFF = data * 840 * Eats R0:R3. * 841 * * 842 * Alternate entries: * 843 * OUTINM allows multiple items on the input line. * 844 * * 845 ********************************************************************************** 846 847 BLOCK 848 ENTRY OUTIN 849 ENTRY OUTINM 850 851 BEGFRAME 00178801 6 BASE 852 OIFLAG BSS 1 flag for single/multiple data 00178802 6 BASE 853 OITEMP BSS 1 temp for FI type code 854 ENDFRAME 855 1B46B DD5F8003 6 STAK 856 OUTINM ENTRNP PUSH 1B46C EDD78801 6 BASE 857 STW SP,OIFLAG remember we can take it 1B46D FE0FB472 858 JMP OI00 then merge in with normal type 859 * --- 860 1B46E DD5F8003 6 STAK 861 OUTIN ENTRNP PUSH 1B46F 5C094033 5 ZBM 862 CMZ COM,COMTERM does it allow any input? 1B470 FE03B49D 863 JEQ OI60 jump if not 1B471 EC178801 6 BASE 864 STZ SP,OIFLAG say we want single item only 0001B472 865 OI00 LABEL 1B472 60040020 0 IMM 866 LD R0 BLANK finish up output line 1B473 E437AC01 0 3 @ 867 ST R0 @OBPT(OBP) so it looks nice 1B474 18C40001 3 IMM 868 ADD OBP 1 advance pointer 869 * \ / 870 1B475 60040042 0 IMM 871 LD R0 FRWRITEB now to list it out 1B476 6052C000 1 3 REG 872 LD R1 OBP get line length 1B477 6085A818 2 IMM 873 LD R2 ADR OBUFF point to buffer 1B478 DC41CCC7 874 CALLNP SAVEEVENT Save the event 1B479 08840002 IMM 875 FREQ LUNSOUT+XREQ that should do it 1B47A DC41CCB3 876 CALLNP LOGIT Log the thing.... 877 TCDISP 1B47B 6004011B 0 IMM 877 LD R0 FRTSETTCS set terminating characters 1B47C 6045AC65 1 IMM 877 LD R1 ADR(TCTABD) display input table 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 100 (RDUISUB) F 15 Input subroutines 1B47D E441A8EA 1 877 ST R1 TCGROUP remember group for restoration 1B47E 088400C9 IMM 877 FREQ LUNAIN+XREQ for inputting after display 1B47F DC41B3B6 878 CALLNP READLINE get user response 879 TCNORM 1B480 6004011B 0 IMM 879 LD R0 FRTSETTCS set terminating characters 1B481 6045AC5D 1 IMM 879 LD R1 ADR(TCTABN) normal table 1B482 E441A8EA 1 879 ST R1 TCGROUP remember the group we used 1B483 088400C9 IMM 879 FREQ LUNAIN+XREQ for command level inputs 880 881 * We have the line, now get any response. 1B484 DC41B349 882 CALLNP FETCHDATA get possible data item 1B485 F2B1B488 2 883 JBF R2/TCOL OI20 jump if not data flag 1B486 DC41B3A9 884 CALLNP GETCHARX skip past the colon 1B487 DC41B349 885 CALLNP FETCHDATA go back for the value 886 * \ / 887 0001B488 888 OI20 LABEL 1B488 E4978802 2 6 BASE 889 ST R2 SP,OITEMP save FI code a moment 1B489 6001A8E7 0 890 LD R0 TERMCHAR get input line terminator 1B48A 6404000A 0 IMM 891 CPR R0 LF is it a line feed? 1B48B FE0DB48E 892 JNE OI30 if not then ship CR,LF 1B48C DC41B8AC 893 CALLNP OUTCR else just a CR 1B48D FE0FB493 894 JMP OI40 then merge back in 895 * --- 896 0001B48E 897 OI30 LABEL 1B48E 6404000D 0 IMM 898 CPR R0 CR is it a CR? 1B48F FE0DB492 899 JNE OIBOTH if not send both CR and LF 1B490 DC41B8B2 900 CALLNP OUTLF send the line feed 1B491 FE0FB493 901 JMP OI40 continue on 902 * --- 903 0001B492 904 OIBOTH LABEL 1B492 DC41B8B8 905 CALLNP OUTCRLF make paper nice looking 0001B493 906 OI40 LABEL 1B493 60978802 2 6 BASE 907 LD R2 SP,OITEMP get FI codes back 1B494 60094033 0 5 ZBM 908 LD R0 COM,COMTERM get valid terminator code 1B495 78A1AC7D 2 0 909 AND R2 TCCODES(R0) compare with FI result 1B496 5C178801 6 BASE 910 CMZ SP,OIFLAG single or multiple items? 1B497 FE03B499 911 JEQ OI50 jump if single only 1B498 F6ADB49C 2 912 JBT R2/TNUM OIEXIT ok to go if got data 0001B499 913 OI50 LABEL 1B499 5C0AB080 2 CBM 914 CMZ R2/TERMS check terminator bits 1B49A FE03B4A0 915 JEQ OI90 error if not valid 0001B49B 916 OIOKEXIT LABEL 1B49B 60040000 0 IMM 917 LD R0 0 everything ok indicator 0001B49C 918 OIEXIT LABEL 1B49C 5D1F8003 6 STAK 919 LEAVE POP 920 * --- 921 0001B49D 922 OI60 LABEL 1B49D DC41B886 923 CALLNP OUTO ship the thing out 1B49E 60840001 2 IMM 924 LD R2 1*TEOL get hard terminator 1B49F FE0FB49B 925 JMP OIOKEXIT then return to caller 926 * --- 927 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 101 (RDUISUB) F 15 Input subroutines 0001B4A0 928 OI90 LABEL 1B4A0 6005CEFC 0 IMM 929 LD R0 ADR ERM106 "Bad terminator" 1B4A1 FE0FB49C 930 JMP OIEXIT return error to caller 931 * --- 932 933 END of OUTIN 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 102 (RDUISUB) F 15 Input subroutines 935 936 ********************************************************************************** 937 * * 938 * ADRGET is called to fetch a memory address or a symbol * 939 * (which must be type "memory address"). It will do all * 940 * necessary table search calls to obtain the address of the * 941 * symbol, and will return either an error code or the actual * 942 * memory address. * 943 * Call: * 944 * BUFPT -> input buffer * 945 * CALLNP ADRGET * 946 * JNEZ R0 error (R0 -> error message) * 947 * R2 = FI code * 948 * ADDRESS and VALUE contain actual memory address * 949 * Eats R0:R3. * 950 * * 951 ********************************************************************************** 952 953 BLOCK 954 ENTRY ADRGET 955 956 BEGFRAME 957 ENDFRAME 958 1B4A2 DD5F8001 6 STAK 959 ADRGET ENTRNP PUSH 1B4A3 EDC1A92C 960 STW LOCFLAG say to list labels 1B4A4 DC41B985 961 CALLNP SYMGET pick up first symbol or value 1B4A5 FA0DB4B9 0 962 JNEZ R0 AG50 jump if not a symbol 963 * 964 * If we are using the new format then depart and do our own checking. 965 * 1B4A6 5C01AAC0 966 CMZ USINGNEW new format ?? 1B4A7 FE0DB4B3 967 JNE AG02 yep, go handle it 968 * \ / 969 * 970 * Using the old format, check for a memory address only. 971 * 1B4A8 60090C40 0 4 ZBM 972 LD R0 SYM,SYMTYPE we want a memory address 1B4A9 64040005 0 IMM 973 CPR R0 SYMTYPEGD see what type it really is 1B4AA FE0DB4C9 974 JNE AG92 error if not what we want 1B4AB 60570801 1 4 BASE 975 LD R1 SYM,SYMVALUE get the symbol value 1B4AC 5C0A5450 1 CBM 976 CMZ R1/MODEBITS check for memory address 1B4AD FE0DB4C9 977 JNE AG92 jump if not what we want here 978 * \ / 979 * 980 * Yes, we have located a valid symbol. 981 * 982 * \ / 0001B4AE 983 AG04 LABEL 1B4AE D141A92C 984 STMW LOCFLAG new label - don't list it 0001B4AF 985 AG10 LABEL 1B4AF E441A91F 1 986 ST R1 ADDRESS place in the address word 1B4B0 E441A8ED 1 987 ST R1 VALUE also save in the VALUE word 1B4B1 60040000 0 IMM 988 LD R0 0 return the all-clear 0001B4B2 989 AGEXIT LABEL 1B4B2 5D1F8001 6 STAK 990 LEAVE POP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 103 (RDUISUB) F 15 Input subroutines 991 * --- 992 * 993 * Check to see if the symbol we found is a memory address. 994 * 0001B4B3 995 AG02 LABEL 1B4B3 60090040 0 4 ZBM 996 LD R0 SYM,NEWSYMTYPE get the type of the symbol 1B4B4 64040001 0 IMM 997 CPR R0 NEWMEM is it a memory address ?? 1B4B5 FE0DB4C9 998 JNE AG92 no, bail out now 1B4B6 60570802 1 4 BASE 999 LD R1 SYM,NEWSYMVALU get the value (memory address) 1B4B7 7845FFFF 1 IMM 1000 AND R1 MAXADR hardware pointer becomes a whole word 1B4B8 FE0FB4AE 1001 JMP AG04 return to main flow with value in R1 1002 * --- 1003 0001B4B9 1004 AG50 LABEL (number) 1B4B9 FA83B4B2 2 1005 JEQZ R2 AGEXIT bail out if big error 1B4BA 6001A8E6 0 1006 LD R0 LBUFPT see if may be a number 1B4BB E401A8E5 0 1007 ST R0 BUFPT backup for another look 1B4BC DC41B33F 1008 CALLNP FETCHNP and try for a hex number 1B4BD F6BDB4C1 2 1009 JBT R2/TDOT AG60 point? use old address 1B4BE F2ADB4CC 2 1010 JBF R2/TNUM AG90 jump if not a number 1B4BF 6041A830 1 1011 LD R1 SBUFFW get the value 1B4C0 FE0FB4AF 1012 JMP AG10 1013 * --- 1014 0001B4C1 1015 AG60 LABEL 1B4C1 6041A8E5 1 1016 LD R1 BUFPT get pointer into buffer 1B4C2 D00A5F30 1 CBM 1017 INC R1/NXTCHAR since FETCHNP leaves us pointing at dot 1B4C3 E441A8E5 1 1018 ST R1 BUFPT we want to point to what is next 1B4C4 6041A91F 1 1019 LD R1 ADDRESS use last address 1B4C5 FA6FB4AF 1 1020 JNEMW R1 AG10 only bad address is 0FFFFFFFF 1B4C6 6005D18B 0 IMM 1021 LD R0 ADR ERM219 "No presently selected address" 1B4C7 60840000 2 IMM 1022 LD R2 1*TERR make sure they realize the error 1B4C8 FE0FB4B2 1023 JMP AGEXIT 1024 * --- 1025 0001B4C9 1026 AG92 LABEL 1B4C9 6005D327 0 IMM 1027 LD R0 ADR ERM701 "Symbol not a memory address" 1B4CA 60840000 2 IMM 1028 LD R2 1*TERR avoid confusion above 1B4CB FE0FB4B2 1029 JMP AGEXIT 1030 * --- 1031 0001B4CC 1032 AG90 LABEL 1B4CC 6005D334 0 IMM 1033 LD R0 ADR ERM703 "Expecting symbol or memory addr" 1B4CD FE0FB4B2 1034 JMP AGEXIT 1035 * --- 1036 1037 END of ADRGET subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 104 (RDUISUB) F 15 Input subroutines 1039 1040 ********************************************************************************** 1041 * * 1042 * PAK6IN takes the first 6 chars pointed to by BUFPT, * 1043 * converts them to PACK 6, and places them in SBUFFW. * 1044 * Call: * 1045 * BUFPT -> input buffer * 1046 * CALLNP PAK6IN * 1047 * R0 and SBUFFW contain result * 1048 * Eats R0:R2 * 1049 * * 1050 ********************************************************************************** 1051 1052 BLOCK 1053 ENTRY PAK6IN 1054 1055 BEGFRAME 1056 ENDFRAME 1057 1B4CE DD5F8001 6 STAK 1058 PAK6IN ENTRNP PUSH 1B4CF 6001A8E5 0 1059 LD R0 BUFPT pointer to input string 1B4D0 6085A830 2 IMM 1060 LD R2 ADR SBUFF where the packer can find them 1B4D1 60440006 1 IMM 1061 LD R1 6 this is PACK 6 after all 1B4D2 FE400000 1062 CMOVE put the chars away 1B4D3 DC41B451 1063 CALLNP PACKER to make them PACK 6 1B4D4 E401A830 0 1064 ST R0 SBUFFW this is where we said we would put it 1B4D5 5D1F8001 6 STAK 1065 LEAVE POP 1066 * --- 1067 1068 END of PAK6IN 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 105 (RDUISUB) F 15 Input subroutines 1070 1071 BLOCK TIMEIN routines 1072 1073 ENTRY TIMEIN 1074 ENTRY TIMEINS 1075 1076 ********************************************************************************** 1077 * * 1078 * TIMEIN and TIMEINS read an input string consisting of the * 1079 * date and time and pack it into either a 44 bit system time or * 1080 * a 32 bit system time. * 1081 * Call: * 1082 * BUFPT -> input buffer * 1083 * CALLNP TIMEIN(S) * 1084 * Returns R1 (,R2) contains the system format time. * 1085 * SBUFFW contains first word of time. * 1086 * Eats R0:R3. * 1087 * * 1088 ********************************************************************************** 1089 1090 BLOCK 1091 ENTRY TIMEIN 1092 ENTRY TIMEINS 1093 1094 BEGFRAME 00178801 6 BASE 1095 TMINR4R5 BSS 2 to save the registers 00178803 6 BASE 1096 TIME BSS 1 msecs in the day 00178804 6 BASE 1097 HOURS BSS 1 hour of the day 00178805 6 BASE 1098 DATE BSS 1 normal sort of day of the month 00178806 6 BASE 1099 MONTH BSS 1 Jan = 1 00178807 6 BASE 1100 YEAR BSS 1 between 1858 and 2416 00178808 6 BASE 1101 WEEKDAY BSS 1 weekday 00178809 6 BASE 1102 SINGLE BSS 1 flag for single word time 1103 ENDFRAME 1104 1105 1B4D6 0000EA60 1106 MSECSM VFD 60*1000 msecs per minute 1B4D7 0036EE80 1107 MSHOUR VFD 60*60*1000 msecs per hour 1B4D8 0000001F 1108 MAXDATE VFD 31 largest possible date 1B4D9 A009A8E8 1109 MIDDATA PTR TIMETEMP/BITS 20:51 pointer to single word time 1110 00001F30 BYTE 1111 FLDCHARS EQU BITS 15:1 character address field 00000060 BYTE 1112 FLAGFLD EQU BITS 0:5 field for flag bits 00000010 BYTE 1113 FNDMNTH EQU BIT 0 00000210 BYTE 1114 FNDPM EQU BIT 1 00000410 BYTE 1115 DELBIT EQU BIT 2 00000610 BYTE 1116 FNDAT EQU BIT 3 00000810 BYTE 1117 FNDYR EQU BIT 4 00000A10 BYTE 1118 FNDTM EQU BIT 5 1119 1B4DA DD5F800A 6 STAK 1120 TIMEINS ENTRNP PUSH 1B4DB EDD78809 6 BASE 1121 STW SP,SINGLE say we are in single word time format 1B4DC FE0FB4DF 1122 JMP PASTTIME 1123 * --- 1124 1B4DD DD5F800A 6 STAK 1125 TIMEIN ENTRNP PUSH 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 106 (RDUISUB) F 15 Input subroutines 1B4DE EC178809 6 BASE 1126 STZ SP,SINGLE 0001B4DF 1127 PASTTIME LABEL 1B4DF E7178801 456 BASE 1128 ST2 R4 SP,TMINR4R5 save these registers 1B4E0 61538000 5 6 REG 1129 LD R5 SP we need to save SP 1130 * unpack the raw time into time, date, month, year, and weekday 1B4E1 DC01B750 1131 CALL UNPACKDATE breaks time into time/date/month/year 1B4E2 4341A8E8 1132 PARV2 TIMETEMP contains raw time 1B4E3 41174803 5 BASE 1133 PAR R5,TIME ms since midnight gets put here 1B4E4 41174805 5 BASE 1134 PAR R5,DATE date in month gets put here 1B4E5 41174806 5 BASE 1135 PAR R5,MONTH month goes here (Jan = 1) 1B4E6 41174807 5 BASE 1136 PAR R5,YEAR year goes here 1B4E7 40174808 5 BASE 1137 PARL R5,WEEKDAY day of week goes here 1138 1B4E8 EC0BC060 7 CBM 1139 STZ R7/FLAGFLD set flag bits to 0 1140 1B4E9 6101A8E5 4 1141 LD R4 BUFPT 1B4EA D04B1F30 4 CBM 1142 DEC R4/NXTCHAR point to position before buffer 0001B4EB 1143 NEXTITEM LABEL 1B4EB EC0BC410 7 CBM 1144 STZ R7/DELBIT no delimiters found yet 0001B4EC 1145 NEXTLOOP LABEL 1B4EC DC41B5E0 1146 CALLNP GRABCHAR 0001B4ED 1147 HAVECHAR LABEL 1B4ED 5CA3B4EE 1 1148 LDPC NIJT(R1) type determines action 1149 * --- 1150 0001B4EE 1151 NIJT LABEL 1B4EE 0001B50C 1152 VFD ADR GETNUM 0 - number 1B4EF 0001B558 1153 VFD ADR ALPHA 1 - alpha (A-F) 1B4F0 0001B558 1154 VFD ADR ALPHA 2 - alpha (the rest) 1B4F1 0001B500 1155 VFD ADR DELIM 3 - delimiter (file char) 1B4F2 0001B500 1156 VFD ADR DELIM 4 - delimiter (comma) 1B4F3 0001B500 1157 VFD ADR DELIM 5 - delimiter (colon) 1B4F4 0001B5CD 1158 VFD ADR ENDSTRNG 6 - end of line 1B4F5 0001B4EC 1159 VFD ADR NEXTLOOP 7 - blank 1B4F6 0001B506 1160 VFD ADR BADSTUF 8 - semi-colon 1B4F7 0001B506 1161 VFD ADR BADSTUF 9 - period 1B4F8 0001B5CD 1162 VFD ADR ENDSTRNG 10 -line feed 1B4F9 0001B506 1163 VFD ADR BADSTUF 11 - up-arrow 1B4FA 0001B506 1164 VFD ADR BADSTUF 12 - greater than 1B4FB 0001B506 1165 VFD ADR BADSTUF 13 - less than 1B4FC 0001B506 1166 VFD ADR BADSTUF 14 - at sign 1B4FD 0001B506 1167 VFD ADR BADSTUF 15 - single quote 1B4FE 0001B506 1168 VFD ADR BADSTUF 16 - double quote 1B4FF 0001B509 1169 VFD ADR OPERATR 17 - error (but might be "-") 1170 1171 1172 ********************************************************************************** 1173 * * 1174 * DELIM is jumped to when a delimiter is found. It checks * 1175 * if another delimiter has been found since the last input * 1176 * item. If so then error, else set delimiter flag and get * 1177 * the next item. * 1178 * * 1179 ********************************************************************************** 1180 0001B500 1181 DELIM LABEL 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 107 (RDUISUB) F 15 Input subroutines 1B500 F7C5B503 7 1182 JBT R7/DELBIT BADDELIM too many delimiters 1B501 EDCBC410 7 CBM 1183 STW R7/DELBIT delimiter has been found 1B502 FE0FB4EC 1184 JMP NEXTLOOP 1185 * --- 1186 0001B503 1187 BADDELIM LABEL 1B503 6005D343 0 IMM 1188 LD R0 ADR ERM800 1B504 60840000 2 IMM 1189 LD R2 0 save bad things happened 1B505 FE0FB5DC 1190 JMP LVTIMIN 1191 * --- 1192 0001B506 1193 BADSTUF LABEL illegal characters in input 1B506 6005D34D 0 IMM 1194 LD R0 ADR ERM801 1B507 60840000 2 IMM 1195 LD R2 0 save bad things happened 1B508 FE0FB5DC 1196 JMP LVTIMIN leave this subroutine 1197 * --- 1198 1199 ********************************************************************************** 1200 * * 1201 * OPERATR is jumped to when an operator is found. A check * 1202 * is made to see if the operator is a "-", the only legal one. * 1203 * * 1204 ********************************************************************************** 1205 0001B509 1206 OPERATR LABEL 1B509 6404002D 0 IMM 1207 CPR R0 "-" is it a minus 1B50A FE03B500 1208 JEQ DELIM then treat it as a delimiter 1B50B FE0FB506 1209 JMP BADSTUF not a good char to find 1210 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 108 (RDUISUB) F 15 Input subroutines 1212 1213 ********************************************************************************** 1214 * * 1215 * GETNUM is jumped to when a number has been found in the input. * 1216 * It calls FETCHITEM to get the number then determines if the number * 1217 * is a time, year, date, or error. * 1218 * * 1219 ********************************************************************************** 1220 0001B50C 1221 GETNUM LABEL 1B50C E501A8E5 4 1222 ST R4 BUFPT store buffer pointer 1B50D DC41B342 1223 CALLNP FETCHDN get number from input 1B50E 60920000 2 0 REG 1224 LD R2 R0 need value here 1B50F 60124000 0 1 REG 1225 LD R0 R1 need terminating char in R0 1B510 6404003A 0 IMM 1226 CPR R0 ":" is the number a time? 1B511 FE03B536 1227 JEQ ATIME 1B512 64840032 2 IMM 1228 CPR R2 50 is the number a year? 1B513 FE07B524 1229 JGE AYEAR must be 1230 * \ / 1231 1232 * the number must be a date 1B514 F7C7B521 7 1233 JBT R7/FNDAT EXDATE date has already been found 1B515 6481B4D8 2 1234 CPR R2 MAXDATE is it within bounds? 1B516 FE05B51E 1235 JGT BADDATE nope 1B517 FA8BB51E 2 1236 JLEZ R2 BADDATE must be positive number 1B518 EDCBC610 7 CBM 1237 STW R7/FNDAT say date is found 1B519 E4978805 2 6 BASE 1238 ST R2 SP,DATE 1239 * \ / 1240 0001B51A 1241 FROMNUM LABEL 1B51A 6101A8E5 4 1242 LD R4 BUFPT need to keep current 1B51B 6071B2D7 1 0 @ 1243 LD R1 @CODES(R0) get the code for term char 1B51C EC0BC410 7 CBM 1244 STZ R7/DELBIT no delimiters found yet 1B51D FE0FB4ED 1245 JMP HAVECHAR 1246 * --- 1247 0001B51E 1248 BADDATE LABEL 1B51E 60840000 2 IMM 1249 LD R2 0 save bad things happened 1B51F 6005D353 0 IMM 1250 LD R0 ADR ERM802 1B520 FE0FB5DC 1251 JMP LVTIMIN leave this subroutine 1252 * --- 1253 0001B521 1254 EXDATE LABEL 1B521 60840000 2 IMM 1255 LD R2 0 say bad things happened 1B522 6005D359 0 IMM 1256 LD R0 ADR ERM803 1B523 FE0FB5DC 1257 JMP LVTIMIN leave this subroutine 1258 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 109 (RDUISUB) F 15 Input subroutines 1260 1261 ********************************************************************************** 1262 * * 1263 * AYEAR is jumped to when GETNUM has determined that the * 1264 * number is in the possible range of a year. AYEAR does more * 1265 * bound checks on this number and converts the number to a * 1266 * 20th century year if necessary. * 1267 * * 1268 ********************************************************************************** 1269 0001B524 1270 AYEAR LABEL 1B524 F7C9B533 7 1271 JBT R7/FNDYR EXYEAR year has already been found 1B525 68840064 2 IMM 1272 UCPR R2 100 are the first digits there? 1B526 FE07B529 1273 JGE OVER100 1B527 1884076C 2 IMM 1274 ADD R2 1900 add in the missing digits 1B528 FE0FB52D 1275 JMP STOREY 1276 * --- 1277 0001B529 1278 OVER100 LABEL 1B529 64840742 2 IMM 1279 CPR R2 1858 is year in legal range? 1B52A FE09B530 1280 JLT BADYEAR too small 1B52B 64840970 2 IMM 1281 CPR R2 2416 is year in legal range? 1B52C FE05B530 1282 JGT BADYEAR too big 0001B52D 1283 STOREY LABEL 1B52D EDCBC810 7 CBM 1284 STW R7/FNDYR say year has been found 1B52E E4978807 2 6 BASE 1285 ST R2 SP,YEAR save the year 1B52F FE0FB51A 1286 JMP FROMNUM 1287 * --- 1288 0001B530 1289 BADYEAR LABEL 1B530 60840000 2 IMM 1290 LD R2 0 say bad things happened 1B531 6005D35E 0 IMM 1291 LD R0 ADR ERM804 1B532 FE0FB5DC 1292 JMP LVTIMIN leave this subroutine 1293 * --- 1294 0001B533 1295 EXYEAR LABEL 1B533 60840000 2 IMM 1296 LD R2 0 say bad things happened 1B534 6005D364 0 IMM 1297 LD R0 ADR ERM805 go to error handling routine 1B535 FE0FB5DC 1298 JMP LVTIMIN leave this subroutine 1299 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 110 (RDUISUB) F 15 Input subroutines 1301 1302 ********************************************************************************** 1303 * * 1304 * ATIME is jumped to when GETNUM has determined that * 1305 * the number is a time. ATIME then gets the hours, minutes, * 1306 * and if there, seconds, does range checks on all of them, * 1307 * converts them to msecs, and adds them into TIME. * 1308 * The hour is saved for use by PMFND. * 1309 * * 1310 ********************************************************************************** 1311 0001B536 1312 ATIME LABEL 1B536 F7CBB555 7 1313 JBT R7/FNDTM EXTIME too many times 1B537 68840018 2 IMM 1314 UCPR R2 24 is hour within range? 1B538 FE07B552 1315 JGE BADTIME 1B539 E4978804 2 6 BASE 1316 ST R2 SP,HOURS save hour 1B53A 1C81B4D7 2 1317 MUL R2 MSHOUR convert to msecs 1B53B E4978803 2 6 BASE 1318 ST R2 SP,TIME keep the hour 1319 * \ / 1B53C 6001A8E5 0 1320 LD R0 BUFPT 1B53D D00A1F30 0 CBM 1321 INC R0/NXTCHAR skip over the terminator 1B53E E401A8E5 0 1322 ST R0 BUFPT save it 1B53F DC41B342 1323 CALLNP FETCHDN get the minutes 1B540 6804003C 0 IMM 1324 UCPR R0 60 are they within range? 1B541 FE07B552 1325 JGE BADTIME nope 1B542 1C01B4D6 0 1326 MUL R0 MSECSM convert minutes to msecs 1B543 98178803 0 6 BASE 1327 ADDM R0 SP,TIME keep them 1B544 EDCBCA10 7 CBM 1328 STW R7/FNDTM say time is found 1B545 60124000 0 1 REG 1329 LD R0 R1 need term char here 1B546 6404003A 0 IMM 1330 CPR R0 ":" are there seconds still? 1B547 FE0DB51A 1331 JNE FROMNUM don't need to get seconds 1332 * \ / 1333 1B548 6001A8E5 0 1334 LD R0 BUFPT 1B549 D00A1F30 0 CBM 1335 INC R0/NXTCHAR skip over the terminator 1B54A E401A8E5 0 1336 ST R0 BUFPT save it 1B54B DC41B342 1337 CALLNP FETCHDN get the seconds 1B54C 6804003C 0 IMM 1338 UCPR R0 60 are they within range? 1B54D FE07B552 1339 JGE BADTIME nope 1B54E 1C01AC23 0 1340 MUL R0 MSECSS convert to msecs 1B54F 98178803 0 6 BASE 1341 ADDM R0 SP,TIME this is the time 1B550 60124000 0 1 REG 1342 LD R0 R1 need term char here 1B551 FE0FB51A 1343 JMP FROMNUM continue onward 1344 * --- 1345 0001B552 1346 BADTIME LABEL 1B552 6005D369 0 IMM 1347 LD R0 ADR ERM806 go to error handling routine 1B553 60840000 2 IMM 1348 LD R2 0 save bad things happened 1B554 FE0FB5DC 1349 JMP LVTIMIN leave this subroutine 1350 * --- 1351 0001B555 1352 EXTIME LABEL 1B555 6005D36E 0 IMM 1353 LD R0 ADR ERM807 go to error handling routine 1B556 60840000 2 IMM 1354 LD R2 0 save bad things happened 1B557 FE0FB5DC 1355 JMP LVTIMIN leave this subroutine 1356 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 111 (RDUISUB) F 15 Input subroutines 1358 1359 ********************************************************************************** 1360 * * 1361 * ALPHA is jumped to when an alphabetic character has been found. * 1362 * It checks if there are alpha strings that have not already been * 1363 * found. If so then an error has occurred, else proceed to MNTNAME. * 1364 * * 1365 * MNTNAME picks a character at a time off the input string, * 1366 * packs it in R2, then compares R2 against legal strings in MONTHTAB. * 1367 * If a match is found then jump to MNTHFND, else pack the next * 1368 * character into R2 and check the table again. This proceeds until * 1369 * a match is found or something other than an alpha char or period * 1370 * is found in the input string. * 1371 * * 1372 * MONTHTAB contains the shortest unambiguous abbreviation * 1373 * of the 12 month names and A.M., P.M. along with a few other * 1374 * possible month name abbreviations. * 1375 * * 1376 ********************************************************************************** 1377 0001B558 1378 ALPHA LABEL 1B558 F3C1B55D 7 1379 JBF R7/FNDMNTH MNTNAME month has not been found 1B559 F3C3B55D 7 1380 JBF R7/FNDPM MNTNAME AM or PM has not been found yet 1B55A 6005D373 0 IMM 1381 LD R0 ADR ERM808 1B55B 60840000 2 IMM 1382 LD R2 0 save bad things happened 1B55C FE0FB5DC 1383 JMP LVTIMIN leave this subroutine 1384 * --- 1385 0001B55D 1386 MNTNAME LABEL 1B55D 60840000 2 IMM 1387 LD R2 0 zero out R2 0001B55E 1388 SRCHLOOP LABEL 1B55E 7C920000 2 0 REG 1389 IOR R2 R0 that is where char is 1B55F 60C40013 3 IMM 1390 LD R3 MNTHCNT-1 number of abbr to compare 1391 0001B560 1392 SRCHTAB LABEL 1B560 64A7B58E 2 3 1393 CPR R2 MONTHTAB(R3) do we have a legal abbr.? 1B561 FE03B56C 1394 JEQ MNTHFND yes 1B562 FAE7B560 3 1395 JDR R3 SRCHTAB try again 1396 * \ / 1397 1398 * abbr was not found, get another char and try again 1B563 DC41B5E0 1399 CALLNP GRABCHAR get next char 1B564 64440001 1 IMM 1400 CPR R1 1 see if alpha 1B565 FE03B56A 1401 JEQ GOTCHAR 1B566 64440002 1 IMM 1402 CPR R1 2 see if alpha 1B567 FE03B56A 1403 JEQ GOTCHAR 1B568 6404002E 0 IMM 1404 CPR R0 DOT see if period 1B569 FE0DB588 1405 JNE BADMONTH 0001B56A 1406 GOTCHAR LABEL 1B56A 608A9000 2 2 CBM 1407 LD R2 R2/BITS 8:7 shift word one char to left 1B56B FE0FB55E 1408 JMP SRCHLOOP try again 1409 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 112 (RDUISUB) F 15 Input subroutines 1411 1412 ********************************************************************************** 1413 * * 1414 * MNTHFND is jumped to when MNTNAME has found a match for the * 1415 * alpha string in the input. R3 contains the position in the table * 1416 * this match was found at and is then used for an index into MNTHNUM * 1417 * to find the month number or A.M./P.M. code. * 1418 * * 1419 ********************************************************************************** 1420 0001B56C 1421 MNTHFND LABEL 1B56C 6027B5A2 0 3 1422 LD R0 MNTHNUM(R3) get month number from table 1B56D 6404000D 0 IMM 1423 CPR R0 13 is string a month? 1B56E FE03B5B6 1424 JEQ PMFND no, must pm 1B56F FE05B5BF 1425 JGT AMFND must be am 1B570 F7C1B58B 7 1426 JBT R7/FNDMNTH EXMNTH oops, already have a month 1B571 EDCBC010 7 CBM 1427 STW R7/FNDMNTH say month has been found 1B572 E4178806 0 6 BASE 1428 ST R0 SP,MONTH save it 0001B573 1429 SKIPSTUF LABEL 1B573 DC41B5E0 1430 CALLNP GRABCHAR 1B574 EC0BC410 7 CBM 1431 STZ R7/DELBIT say no delimiter found yet 1B575 5CA3B576 1 1432 LDPC SSJT(R1) type determines action 1433 * --- 1434 0001B576 1435 SSJT LABEL 1B576 0001B50C 1436 VFD ADR GETNUM 0 - number 1B577 0001B573 1437 VFD ADR SKIPSTUF 1 - alpha (A-F) 1B578 0001B573 1438 VFD ADR SKIPSTUF 2 - alpha (the rest) 1B579 0001B500 1439 VFD ADR DELIM 3 - delimiter (file char) 1B57A 0001B500 1440 VFD ADR DELIM 4 - delimiter (comma) 1B57B 0001B500 1441 VFD ADR DELIM 5 - delimiter (colon) 1B57C 0001B5CD 1442 VFD ADR ENDSTRNG 6 - end of line 1B57D 0001B4EC 1443 VFD ADR NEXTLOOP 7 - blank 1B57E 0001B506 1444 VFD ADR BADSTUF 8 - semi-colon 1B57F 0001B573 1445 VFD ADR SKIPSTUF 9 - period 1B580 0001B5CD 1446 VFD ADR ENDSTRNG 10 -line feed 1B581 0001B506 1447 VFD ADR BADSTUF 11 - up-arrow 1B582 0001B506 1448 VFD ADR BADSTUF 12 - greater than 1B583 0001B506 1449 VFD ADR BADSTUF 13 - less than 1B584 0001B506 1450 VFD ADR BADSTUF 14 - at sign 1B585 0001B506 1451 VFD ADR BADSTUF 15 - single quote 1B586 0001B506 1452 VFD ADR BADSTUF 16 - double quote 1B587 0001B509 1453 VFD ADR OPERATR 17 - error (but might be "-") 1454 0001B588 1455 BADMONTH LABEL 1B588 6005D37B 0 IMM 1456 LD R0 ADR ERM809 go to error handling routine 1B589 60840000 2 IMM 1457 LD R2 0 save bad things happened 1B58A FE0FB5DC 1458 JMP LVTIMIN leave this subroutine 1459 * --- 1460 0001B58B 1461 EXMNTH LABEL 1B58B 6005D37F 0 IMM 1462 LD R0 ADR ERM810 go to error handling routine 1B58C 60840000 2 IMM 1463 LD R2 0 save bad things happened 1B58D FE0FB5DC 1464 JMP LVTIMIN leave this subroutine 1465 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 113 (RDUISUB) F 15 Input subroutines 1467 0001B58E 1468 MONTHTAB LABEL 1B58E 00000050 1469 VFD "P" P.M. 1B58F 0000412E 1470 VFD "A." A.M. 1B590 0000414D 1471 VFD "AM" A.M. 1B591 00004A41 1472 VFD "JA" January 1B592 00000046 1473 VFD "F" February 1B593 00004D52 1474 VFD "MR" March 1B594 004D4152 1475 VFD "MAR" " 1B595 00004150 1476 VFD "AP" April 1B596 00004D59 1477 VFD "MY" May 1B597 004D4159 1478 VFD "MAY" " 1B598 00004A4E 1479 VFD "JN" June 1B599 004A554E 1480 VFD "JUN" " 1B59A 00004A4C 1481 VFD "JL" July 1B59B 004A554C 1482 VFD "JUL" " 1B59C 00004147 1483 VFD "AG" August 1B59D 00004155 1484 VFD "AU" " 1B59E 00000053 1485 VFD "S" September 1B59F 0000004F 1486 VFD "O" October 1B5A0 0000004E 1487 VFD "N" November 1B5A1 00000044 1488 VFD "D" December 00000014 ABS 1489 MNTHCNT EQU DISPW MONTHTAB size of this here table 1490 0001B5A2 1491 MNTHNUM LABEL 1B5A4 0000000E 1492 VFD 13,14,14 pm,am numbers 1B5AD 00000006 1493 VFD 1,2,3,3,4,5,5,6,6 month numbers 1B5B5 0000000C 1494 VFD 7,7,8,8,9,10,11,12 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 114 (RDUISUB) F 15 Input subroutines 1496 1497 ********************************************************************************** 1498 * * 1499 * PMFND and AMFND are jumped to when a character string is * 1500 * either a P.M. or A.M. HOURS is checked to see if they need to be * 1501 * adjusted for the A.M. or P.M. If so the adjustment is done to TIME. * 1502 * * 1503 ********************************************************************************** 1504 0001B5B6 1505 PMFND LABEL 1B5B6 F7C3B5C7 7 1506 JBT R7/FNDPM EXPM already have a pm or am 1B5B7 F3CBB5CA 7 1507 JBF R7/FNDTM B4DATE date has not been found 1B5B8 EDCBC210 7 CBM 1508 STW R7/FNDPM save we have found one 1509 1B5B9 6004000C 0 IMM 1510 LD R0 12 to add to hours 1B5BA 64178804 0 6 BASE 1511 CPR R0 SP,HOURS does hour need to be changed? 1B5BB FE0BB573 1512 JLE SKIPSTUF nope 1B5BC 1C01B4D7 0 1513 MUL R0 MSHOUR convert to msecs 1B5BD 98178803 0 6 BASE 1514 ADDM R0 SP,TIME makes it pm 1B5BE FE0FB573 1515 JMP SKIPSTUF 1516 * --- 1517 1518 0001B5BF 1519 AMFND LABEL 1B5BF F7C3B5C7 7 1520 JBT R7/FNDPM EXPM already have a pm or am 1B5C0 F3CBB5CA 7 1521 JBF R7/FNDTM B4DATE date has not been found 1522 1B5C1 6004000C 0 IMM 1523 LD R0 12 to see if hours need subtracting 1B5C2 64178804 0 6 BASE 1524 CPR R0 SP,HOURS 1B5C3 FE05B573 1525 JGT SKIPSTUF they are in proper range 1B5C4 1C01B4D7 0 1526 MUL R0 MSHOUR convert to msecs 1B5C5 B0178803 0 6 BASE 1527 RSBM R0 SP,TIME adjust time 1B5C6 FE0FB573 1528 JMP SKIPSTUF 1529 * --- 1530 0001B5C7 1531 EXPM LABEL 1B5C7 6005D386 0 IMM 1532 LD R0 ADR ERM811 go to error handling routine 1B5C8 60840000 2 IMM 1533 LD R2 0 save bad things happened 1B5C9 FE0FB5DC 1534 JMP LVTIMIN leave this subroutine 1535 * --- 1536 0001B5CA 1537 B4DATE LABEL 1B5CA 6005D38E 0 IMM 1538 LD R0 ADR ERM812 go to error handling routine 1B5CB 60840000 2 IMM 1539 LD R2 0 save bad things happened 1B5CC FE0FB5DC 1540 JMP LVTIMIN leave this subroutine 1541 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 115 (RDUISUB) F 15 Input subroutines 1543 0001B5CD 1544 ENDSTRNG LABEL 1B5CD E501A8E5 4 1545 ST R4 BUFPT for later use 1B5CE 61538000 5 6 REG 1546 LD R5 SP need a temp stack pointer 1B5CF DC01B783 1547 CALL PACKDATE 1B5D0 4301A8E8 1548 PAR2 TIMETEMP put raw time here 1B5D1 41574803 5 BASE 1549 PARV R5,TIME msecs in today 1B5D2 41574805 5 BASE 1550 PARV R5,DATE 1B5D3 41574806 5 BASE 1551 PARV R5,MONTH 1B5D4 40574807 5 BASE 1552 PARVL R5,YEAR 1553 * \ / 1554 1B5D5 60040000 0 IMM 1555 LD R0 0 say all is ok 1B5D6 5C178809 6 BASE 1556 CMZ SP,SINGLE are we in a single word time 1B5D7 FE03B5DC 1557 JEQ LVTIMIN nope 1558 * \ / 1559 1B5D8 62440800 12 IMM 1560 LD2 R1 0800 rounding factor 1B5D9 9A41A8E8 12 1561 ADD2M R1 TIMETEMP add into time before truncation 1B5DA 6051B4D9 1 @ 1562 LD R1 @MIDDATA get 32 bit time 1B5DB E441A8E8 1 1563 ST R1 TIMETEMP 1564 * \ / 1565 0001B5DC 1566 LVTIMIN LABEL 1B5DC 63178801 456 BASE 1567 LD2 R4 SP,TMINR4R5 restore these registers 1B5DD 6241A8E8 12 1568 LD2 R1 TIMETEMP 1B5DE E441A830 1 1569 ST R1 SBUFFW 1B5DF 5D1F800A 6 STAK 1570 LEAVE POP 1571 * --- 1572 1573 END of TIMEIN subroutines 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 116 (RDUISUB) F 15 Input subroutines 1575 1576 ********************************************************************************** 1577 * * 1578 * GRABCHAR. Routine to get the next char. * 1579 * Call: * 1580 * LD R4 => the char minus one (pointer bumped first) * 1581 * CALLNP GRABCHAR * 1582 * ST R0 upperfied character * 1583 * ST R1 code for the char * 1584 * R4 -> char * 1585 * Eats R0:R1, R4. * 1586 * * 1587 ********************************************************************************** 1588 1589 BLOCK 1590 ENTRY GRABCHAR 1591 1592 BEGFRAME 1593 ENDFRAME 1594 1B5E0 DD5F8001 6 STAK 1595 GRABCHAR ENTRNP PUSH 1B5E1 D00B1F30 4 CBM 1596 INC R4/NXTCHAR advance to next character 1B5E2 60170000 0 4 CACH 1597 LD R0 CACH R4,0 get the char 1B5E3 7804007F 0 IMM 1598 AND R0 GASMASK remove the parity bit 1B5E4 64040061 0 IMM 1599 CPR R0 LOWCASE a lower case char? 1B5E5 FE09B5E9 1600 JLT GRAB30 jump if not 1B5E6 6404007A 0 IMM 1601 CPR R0 LOWTOP out of the lower range? 1B5E7 FE05B5E9 1602 JGT GRAB30 if so, don't upperfy 1B5E8 10040020 0 IMM 1603 SUB R0 LOWBIAS convert to upper case 0001B5E9 1604 GRAB30 LABEL 1B5E9 6071B2D7 1 0 @ 1605 LD R1 @CODES(R0) get the char group code 1B5EA 5D1F8001 6 STAK 1606 LEAVE POP 1607 * --- 1608 END of GRABCHAR 1609 1610 END of TIMEIN subroutines 131 132 INPUT RDUOSUB 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 117 (RDUOSUB) F 16 Output subroutines 3 4 ********************************************************************************** 5 * * 6 * This is the DATADISP routine. It is not very big at all as it * 7 * uses a table (DISPTAB) to call one of the data formatting output * 8 * routines to do the actual work. When called, VALUE must contain * 9 * the data to be output, OBP must point to the output buffer place * 10 * for the value, DISPTYPE must contain the display type code, * 11 * and COM must point to the command entry being executed. * 12 * Call: * 13 * VALUE = value to output * 14 * DISPTYPE contains display type * 15 * OBP -> current position in output buffer * 16 * COM -> command element * 17 * CALLNP DATADISP * 18 * Eats R0:R2, Adjusts R3 (OBP) * 19 * * 20 ********************************************************************************** 21 22 BLOCK 23 ENTRY DATADISP 24 25 BEGFRAME 26 ENDFRAME 27 1B5EB DD5F8001 6 STAK 28 DATADISP ENTRNP PUSH 1B5EC 60895423 2 5 ZBM 29 LD R2 COM,COMDATA check data width 1B5ED 60A5AC9D 2 2 30 LD R2 DATADIGS(R2) get digit count for hex 1B5EE 6001A8F3 0 31 LD R0 DISPTYPE get display type to use 1B5EF 5D61ACAB 0 32 XCT DISPTAB(R0) then output the thing 1B5F0 5D1F8001 6 STAK 33 LEAVE POP 34 * --- 35 36 END of DATADISP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 118 (RDUOSUB) F 16 Output subroutines 38 39 ********************************************************************************** 40 * * 41 * HEXOUT formats the number in VAULE into the * 42 * standard hexadecimal format and leaves it in OBUFF. * 43 * HEXOUT will format all 8 digits. * 44 * HEXOUTN will format a fixed number of digits. * 45 * The digit count is passed in R2 and that number of * 46 * digits is always output. * 47 * HEXOUTA formats a 17-bit address. * 48 * HEXOUTD will format a single hex digit. * 49 * Eats R0:R3. * 50 * Leaves OBP -> to current position in output buffer. * 51 * * 52 ********************************************************************************** 53 54 BLOCK 55 ENTRY HEXOUT 56 ENTRY HEXOUTN 57 ENTRY HEXOUTA 58 ENTRY HEXOUTD 59 ENTRY HEXOUTC 60 61 BEGFRAME 62 ENDFRAME 63 1B5F1 DD5F8001 6 STAK 64 HEXOUT ENTRNP PUSH 1B5F2 6001A8ED 0 65 LD R0 VALUE get value to decode 1B5F3 60840007 2 IMM 66 LD R2 8-1 we want 8 digits no matter what 67 * \ / 68 0001B5F4 69 HEXO10 LABEL 1B5F4 604A0040 1 0 CBM 70 LD R1 R0/BITS 0:3 get 4 bits of number 1B5F5 6073AC42 1 1 @ 71 LD R1 @HEXC(R1) get proper ASCII character 1B5F6 E477AC01 1 3 @ 72 ST R1 @OBPT(OBP) stuff into output line 1B5F7 18C40001 3 IMM 73 ADD OBP 1 advance buffer pointer 1B5F8 600A0800 0 0 CBM 74 LD R0 R0/BITS 4:3 rotate to next digit 1B5F9 FAA7B5F4 2 75 JDR R2 HEXO10 and cycle through all eight 76 * \ / 77 1B5FA 5D1F8001 6 STAK 78 LEAVE POP 79 * --- 80 81 * R2 = number of digits to format. 1B5FB DD5F8001 6 STAK 82 HEXOUTN ENTRNP PUSH 1B5FC 6001A8ED 0 83 LD R0 VALUE get value to display 1B5FD 5D65AC43 2 84 XCT HEXSHIFT(R2) rotate value by digits 1B5FE FAA7B5F4 2 85 JDR R2 HEXO10 (R2 has count) 86 * \ / 87 1B5FF 5D1F8001 6 STAK 88 LEAVE POP 89 * --- 90 1B600 DD5F8001 6 STAK 91 HEXOUTA ENTRNP PUSH 1B601 6001A8ED 0 92 LD R0 VALUE get address to output 1B602 600A1800 0 0 CBM 93 LD R0 R0/BITS 12:11 rotate to proper start 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 119 (RDUOSUB) F 16 Output subroutines 1B603 60840004 2 IMM 94 LD R2 5-1 five digits 1B604 FE0FB5F4 95 JMP HEXO10 then go output 96 * --- 97 1B605 DD5F8001 6 STAK 98 HEXOUTD ENTRNP PUSH 1B606 6001A8ED 0 99 LD R0 VALUE get value to list 1B607 7804000F 0 IMM 100 AND R0 0F insure a single digit 1B608 6031AC42 0 0 @ 101 LD R0 @HEXC(R0) get ASCII equivalent 1B609 E437AC01 0 3 @ 102 ST R0 @OBPT(OBP) place in output buffer 1B60A 18C40001 3 IMM 103 ADD OBP 1 advance buffer pointer 1B60B 5D1F8001 6 STAK 104 LEAVE POP 105 * --- 106 1B60C DD5F8001 6 STAK 107 HEXOUTC ENTRNP PUSH 1B60D 60840007 2 IMM 108 LD R2 8-1 get digit count 1B60E 6001A8ED 0 109 LD R0 VALUE get value to output 1B60F FA09B612 0 110 JLTZ R0 HEXO20 if negative output hex sign 1B610 6404000A 0 IMM 111 CPR R0 10 see if we need identifier 1B611 FE09B615 112 JLT HEXO30 we don't if small enough 113 * \ / 114 0001B612 115 HEXO20 LABEL 1B612 60440023 1 IMM 116 LD R1 HATCH get the hex sign 1B613 E477AC01 1 3 @ 117 ST R1 @OBPT(OBP) so user knows it's hex 1B614 18C40001 3 IMM 118 ADD OBP 1 advance pointer 0001B615 119 HEXO30 LABEL 1B615 604A0040 1 0 CBM 120 LD R1 R0/BITS 0:3 get first digit 1B616 FA4DB5F4 1 121 JNEZ R1 HEXO10 jump if ready to list 1B617 600A0800 0 0 CBM 122 LD R0 R0/BITS 4:3 rotate to next 1B618 FAA3B615 2 123 DRJ R2 HEXO30 try another 124 * \ / 125 1B619 FE0FB5F4 126 JMP HEXO10 we always want at least one 127 * --- 128 129 END HEXOUT subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 120 (RDUOSUB) F 16 Output subroutines 131 132 ********************************************************************************** 133 * * 134 * HEXTOCHAR. Convert integer to character string (in hex). * 135 * CALL HEXTOCHAR * 136 * PARV value to convert * 137 *optional: PARV result size * 138 * PARL result buffer * 139 * * 140 * Eats R0:R2. * 141 * Stack required = 4. * 142 * * 143 ********************************************************************************** 144 145 BLOCK 146 ENTRY HEXTOCHAR 147 148 BEGFRAME 00178801 6 BASE 149 CONVVAL BSS 1 value to convert 00178802 6 BASE 150 CONVVALPTR BSS 1 pointer to one digit in value 00178803 6 BASE 151 RESULTLEN BSS 1 length of result 152 ENDFRAME 153 1B61A DD1F8004 6 STAK 154 HEXTOCHAR ENTR PUSH 1B61B C1578801 6 BASE 155 STPV SP,CONVVAL save value to convert 1B61C E4178803 0 6 BASE 156 ST R0 SP,RESULTLEN 1B61D 60040008 0 IMM 157 LD R0 8 1B61E E0178803 0 6 BASE 158 EXCH R0 SP,RESULTLEN default result length to 8 1B61F F3CBB621 7 159 JBF R7/STPVALUE NOLEN jump if length not given 1B620 C1578803 6 BASE 160 STPV SP,RESULTLEN save result length 0001B621 161 NOLEN LABEL 1B621 C0128000 2 REG 162 STPL R2 set result buffer pointer 163 1B622 60578803 1 6 BASE 164 LD R1 SP,RESULTLEN 1B623 50440008 1 IMM 165 MIN R1 8 number of digits wanted 1B624 389A8800 2 21 CACH 166 LEA R2 CACH R2,0(R1) point to end of result 1B625 70524000 1 1 REG 167 LDN R1 R1 make negative 1B626 38098042 0 6 ZBM 168 LEA R0 SP,CONVVAL/BITS 0:3(8) pointer after last digit wanted 1B627 E4178802 0 6 BASE 169 ST R0 SP,CONVVALPTR save it 170 0001B628 171 LOOP LABEL 1B628 601D8C02 0 61 FPVR 172 LD R0 @(SP,CONVVALPTR)(R1) get a digit 1B629 6031AC42 0 0 @ 173 LD R0 @HEXC(R0) convert to printable 1B62A E41A8800 0 21 CACH 174 ST R0 CACH R2,0(R1) save it 1B62B FA61B628 1 175 IRJ R1 LOOP and loop till all done 176 * \ / 177 1B62C 5D1F8004 6 STAK 178 LEAVE POP 179 * --- 180 181 END of HEXTOCHAR subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 121 (RDUOSUB) F 16 Output subroutines 183 184 ********************************************************************************** 185 * * 186 * DECOUT formats the contents of VALUE into a decimal * 187 * number. The number is considered signed, and a minus sign * 188 * will be printed if necessary. The number itself will be * 189 * left-justified, and no leading zeros are included. * 190 * Call: * 191 * VALUE contains word to be formatted * 192 * OBP -> current position in OBUFF * 193 * CALLNP DECOUT * 194 * OBP -> new current postion in OBUFF * 195 * Eats R0:R2, sets R3. * 196 * * 197 ********************************************************************************** 198 199 BLOCK 200 ENTRY DECOUT 201 202 BEGFRAME 203 ENDFRAME 204 1B62D DD5F8001 6 STAK 205 DECOUT ENTRNP PUSH 1B62E 6001A8ED 0 206 LD R0 VALUE get the value to be decoded 1B62F FA07B634 0 207 JGEZ R0 DECO10 jump if positive 208 * \ / 209 1B630 70120000 0 0 REG 210 LDN R0 R0 change the sign 1B631 6044002D 1 IMM 211 LD R1 MINUS get a minus sign 1B632 E477AC01 1 3 @ 212 ST R1 @OBPT(OBP) place in output buffer 1B633 18C40001 3 IMM 213 ADD OBP 1 advance buffer pointer 214 0001B634 215 DECO10 LABEL 1B634 60840009 2 IMM 216 LD R2 NDIGSD get maximum number of digits 1B635 62120000 010 REG 217 LD2 R0 R0 play games with number 1B636 58C40010 IMM 218 IORPSR MODIFBIT how 'bout some black magic? 0001B637 219 DECO20 LABEL 1B637 1425AC34 0 2 220 DIV R0 TENTAB(R2) look for first non-zero digit 1B638 FA0DB63D 0 221 JNEZ R0 DECO40 jump if we are there 1B639 FAA7B637 2 222 JDR R2 DECO20 otherwise keep searching 223 * \ / 224 0001B63A 225 DECO30 LABEL 1B63A 60040000 0 IMM 226 LD R0 0 zero out crud 1B63B 58C40010 IMM 227 IORPSR MODIFBIT more black magic 1B63C 1425AC34 0 2 228 DIV R0 TENTAB(R2) extract one digit 0001B63D 229 DECO40 LABEL 1B63D 58840010 IMM 230 CLBPSR MODIFBIT keep magic under control 1B63E 18040030 0 IMM 231 ADD R0 NUMBIAS make it an ASCII character 1B63F E437AC01 0 3 @ 232 ST R0 @OBPT(OBP) at last, a character to print! 1B640 18C40001 3 IMM 233 ADD OBP 1 next, please!!! 1B641 FAA7B63A 2 234 JDR R2 DECO30 continue for all digits 235 * \ / 236 1B642 5D1F8001 6 STAK 237 LEAVE POP 238 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 122 (RDUOSUB) F 16 Output subroutines 239 240 END of DECOUT subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 123 (RDUOSUB) F 16 Output subroutines 242 243 ********************************************************************************** 244 * * 245 * ASCOUT puts into ascii format and places into the output * 246 * buffer the word in VALUE. Non-printables are listed as * 247 * question marks. The user can use hex to see what they really * 248 * are. * 249 * Call: * 250 * OBP -> current postion in OBUFF * 251 * VALUE contains word to be ouput * 252 * CALLNP ASCOUT * 253 * OBP -> new current position * 254 * Eats R0:R2, sets R3. * 255 * * 256 ********************************************************************************** 257 258 BLOCK 259 ENTRY ASCOUT 260 261 BEGFRAME 262 ENDFRAME 263 1B643 DD5F8001 6 STAK 264 ASCOUT ENTRNP PUSH 1B644 3801A8ED 0 265 LEA R0 VALUE point to data word 1B645 60840000 2 IMM 266 LD R2 0 pointer to data 267 * \ / 268 0001B646 269 ASCO10 LABEL 1B646 605A1000 1 02 CACH 270 LD R1 CACH R0,0(R2) pick up one character 1B647 7844007F 1 IMM 271 AND R1 GASMASK clear off excess fat 1B648 64440020 1 IMM 272 CPR R1 BLANK be sure it's listable 1B649 FE09B64C 273 JLT ASCO20 jump if not 1B64A 6444007E 1 IMM 274 CPR R1 TILDE still checking 1B64B FE0BB64D 275 JLE ASCO40 jump if we can list it 276 * \ / 277 0001B64C 278 ASCO20 LABEL 1B64C 6044003F 1 IMM 279 LD R1 QUESTION get our catch-all character 280 * \ / 281 0001B64D 282 ASCO40 LABEL 1B64D E477AC01 1 3 @ 283 ST R1 @OBPT(OBP) and add to output line 1B64E 18C40001 3 IMM 284 ADD OBP 1 advance output pointer 1B64F 18840001 2 IMM 285 ADD R2 1 advance counter/pointer 1B650 64840004 2 IMM 286 CPR R2 NCPW done a whole word? 1B651 FE09B646 287 JLT ASCO10 if not then go do another 288 * \ / 289 1B652 5D1F8001 6 STAK 290 LEAVE POP 291 * --- 292 293 END of ASCOUT subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 124 (RDUOSUB) F 16 Output subroutines 295 296 ********************************************************************************** 297 * * 298 * This is the PAK6OUT subroutine. It is called to convert * 299 * the PAK-6 symbol in VALUE to its ascii equivalent and place * 300 * it in OBUFF starting at the position pointed to by OBP. * 301 * Call: * 302 * VALUE contains 32 bit symbol * 303 * OBP -> current position in output buffer * 304 * CALLNP PAK6OUT * 305 * * 306 * Eats R0:R2, adjusts OBP (R3) * 307 * * 308 ********************************************************************************** 309 310 BLOCK 311 ENTRY PAK6OUT 312 ENTRY PAK12OUT 313 314 BEGFRAME 315 ENDFRAME 316 1B653 DD5F8001 6 STAK 317 PAK6OUT ENTRNP PUSH 1B654 60840005 2 IMM 318 LD R2 6-1 six digits 1B655 6041A8ED 1 319 LD R1 VALUE get value to unpack 0001B656 320 PAK6O10 LABEL 1B656 60040000 0 IMM 321 LD R0 0 eliminate confusing junk 1B657 58C40010 IMM 322 IORPSR MODIFBIT say we want special handling 1B658 1425AC57 0 2 323 DIV R0 FORTYTAB(R2) extract a "digit" (0-39) 1B659 58840010 IMM 324 CLBPSR MODIFBIT undo funny magic 1B65A FA03B65F 0 325 JEQZ R0 PAK6OEXIT jump if all done 1B65B 6031AC56 0 0 @ 326 LD R0 @P6CHARS(R0) get the real character 1B65C E437AC01 0 3 @ 327 ST R0 @OBPT(OBP) add into output buffer 1B65D 18C40001 3 IMM 328 ADD OBP 1 advance buffer pointer 1B65E FAA7B656 2 329 JDR R2 PAK6O10 recycle 330 * \ / 331 0001B65F 332 PAK6OEXIT LABEL 1B65F 5D1F8001 6 STAK 333 LEAVE POP 334 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 125 (RDUOSUB) F 16 Output subroutines 336 337 ********************************************************************************** 338 * * 339 * This is the PAK12OUT routine. It is merely a 2-word * 340 * version of the PAK6OUT routine. In fact, it calls the * 341 * PAK6OUT routine to do all of its dirty work!! * 342 * Call: * 343 * VALUE contains 64 bit symbol * 344 * OBP -> current location in output buffer * 345 * CALLNP PAK12OUT * 346 * * 347 * Eats R0:R2, adjusts OBP (R3), munches VALUE. * 348 * * 349 ********************************************************************************** 350 1B660 DD5F8001 6 STAK 351 PAK12OUT ENTRNP PUSH 1B661 DC41B653 352 CALLNP PAK6OUT go do the first half 1B662 6001A8EE 0 353 LD R0 VALUE(1) get second half of number 1B663 E401A8ED 0 354 ST R0 VALUE stuff it where it wants to be 1B664 DC41B653 355 CALLNP PAK6OUT and decode that half 1B665 5D1F8001 6 STAK 356 LEAVE POP 357 * --- 358 359 END of PAK6OUT and PAK12OUT subroutines 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 126 (RDUOSUB) F 16 Output subroutines 361 362 BLOCK 363 ENTRY OPOUT 364 365 ********************************************************************************** 366 * * 367 * This table is used to determine the operation to perform * 368 * when disassembling instructions. * 369 * * 370 ********************************************************************************** 371 1B666 00000000 372 ACTIONS HALT 0 OOO - 0 1B667 FE0FB6D7 373 JMP OPOOPNMA OMA - 1 1B668 DC41B739 374 CALLNP REGO ORG - 2 1B669 DC41B74B 375 CALLNP CONO OCO - 3 1B66A DC41B84A 376 CALLNP BYTO OBY - 4 1B66B DC41B742 377 CALLNP IDXO ODX - 5 1B66C FE0FB6D5 378 JMP OPOOPNGD OGD - 6 1B66D FE0FB6DB 379 JMP OPOOPNCM OCM - 7 1B66E FE0FB6E3 380 JMP OPOOPNAT OAT - 8 1B66F FE0FB6EB 381 JMP OPOOPNPR OPR - 9 1B670 FE0FB6EE 382 JMP OPOOPNCH OCH - 10 1B671 FE0FB6E5 383 JMP OPOOPNLP OLP - 11 1B672 FE0FB6E7 384 JMP OPOOPNRP ORP - 12 1B673 FE0FB6E9 385 JMP OPOOPNPL OPL - 13 1B674 FE0FB6F0 386 JMP OPOOPNI1 OI1 - 14 1B675 FE0FB6F2 387 JMP OPOOPNF1 OF1 - 15 1B676 FE0FB6F4 388 JMP OPOOPNF2 OF2 - 16 1B677 FE0FB6F6 389 JMP OPOOPNST OST - 17 1B678 FE0FB6F8 390 JMP OPOOPNLZ OLZ - 18 1B679 FE0FB6FC 391 JMP OPOOPNRZ ORZ - 19 1B67A FE0FB6FE 392 JMP OPOOPNRW ORW - 20 1B67B FE0FB701 393 JMP OPOOPNCA OCA - 21 1B67C FE0FB703 394 JMP OPOOPNCB OCB - 22 1B67D FE0FB705 395 JMP OPOOPNCC OCC - 23 1B67E FE0FB707 396 JMP OPOOPNRA ORA - 24 1B67F FE0FB70A 397 JMP OPOOPNRB ORB - 25 1B680 FE0FB70C 398 JMP OPOOPNRC ORC - 26 1B681 FE0FB717 399 JMP OPOOPNS1 OS1 - 27 1B682 FE0FB71B 400 JMP OPOOPNS2 OS2 - 28 1B683 FE0FB70E 401 JMP OPOOPNHX OHX - 29 1B684 FE0FB71F 402 JMP OPOEXIT OEX - 30 1B685 FE0FB6D6 403 JMP OPOOPNGR OGR - 31 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 127 (RDUOSUB) F 16 Output subroutines 405 406 ********************************************************************************** 407 * * 408 * This is the OPOUT routine. It is called to disassemble * 409 * the instruction in VALUE and list it out in readable form with * 410 * proper symbol substitution as well. The output buffer must be * 411 * set up and OBP must be initialized by the caller. Also, the * 412 * caller probably wants to set SYMSFLAG off in order to have the * 413 * operand decoded instead of displayed as a symbol. * 414 * Call: * 415 * VALUE = instruction in hex * 416 * OBP -> position to start instruction output at * 417 * CALLNP OPOUT * 418 * OBP -> end of line * 419 * Eats R0:R4. * 420 * * 421 ********************************************************************************** 422 423 BEGFRAME 00178801 6 BASE 424 OPOWORD BSS 1 temp for TYPE 00178802 6 BASE 425 OPOTMP BSS 1 temp for R5 00098E31 6 ZBM 426 OPOREG EQU OPOWORD/BITS 7:9 00099451 6 ZBM 427 OPOBIT EQU OPOWORD/BITS 10:14 00098E31 6 ZBM 428 OPOPAR EQU OPOWORD/BITS 7:9 00178803 6 BASE 429 OPOOBP BSS 1 temp for output buffer pointer 00178804 6 BASE 430 OPOOP BSS 1 temp for OP 00178805 6 BASE 431 OPOCNTL BSS 1 temp for operand output control 432 ENDFRAME 433 0000000A ABS 434 OPNSPOT EQU 10 place to start operand field 435 1B686 DD5F8006 6 STAK 436 OPOUT ENTRNP PUSH 1B687 E5578802 5 6 BASE 437 ST R5 SP,OPOTMP save R5 from harm 1B688 E4D78803 3 6 BASE 438 ST OBP SP,OPOOBP save output buffer pointer 1B689 DC41BA5B 439 CALLNP RELOCATE make sure we are in the right universe 1B68A 60C1A8ED 3 440 LD R3 VALUE get the word to be disassembled 1B68B E4D78801 3 6 BASE 441 ST R3 SP,OPOWORD save from later harm 1B68C 604AC070 1 3 CBM 442 LD R1 R3/OPBITS get top 7 bits of op-code 1B68D 6073AEFC 1 1 @ 443 LD R1 @PREOP(R1) get pre-op type class 1B68E 60CAC100 3 3 CBM 444 LD R3 R3/MAXOPBITS get most possible op-code bits 1B68F 78E3AEF8 3 1 445 AND R3 OCMASKTAB(R1) chop down to size 1B690 60440000 1 IMM 446 LD R1 0 1B691 608400D3 2 IMM 447 LD R2 NUMOPS+1 set up for binary search 0001B692 448 OPO10 LABEL 1B692 60124000 0 1 REG 449 LD R0 R1 1B693 18128000 0 2 REG 450 ADD R0 R2 generate next index 1B694 14040002 0 IMM 451 DIV R0 2 1B695 64124000 0 1 REG 452 CPR R0 R1 is this too much?? 1B696 FE03B71D 453 JEQ OPO90 if so, then go list in hex 1B697 61520000 5 0 REG 454 LD OP R0 juggle 1B698 1D440002 5 IMM 455 MUL OP OPSIZE generate table pointer 1B699 1945AD52 5 IMM 456 ADD OP (ADR(OPTABLE))-OPSIZE 1B69A 68C94100 3 5 ZBM 457 UCPR R3 OP,OPCODE all that for one lousy compare!!! 1B69B FE03B6A1 458 JEQ OPO40 jump if a match - it's about time 1B69C FE05B69F 459 JGT OPO30 too big?? 1B69D E4128000 0 2 REG 460 ST R0 R2 was too small, adjust high end 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 128 (RDUOSUB) F 16 Output subroutines 1B69E FE0FB692 461 JMP OPO10 and try again 462 * --- 463 0001B69F 464 OPO30 LABEL 1B69F E4124000 0 1 REG 465 ST R0 R1 too big, raise lower bound 1B6A0 FE0FB692 466 JMP OPO10 back for another round 467 * --- 468 0001B6A1 469 OPO40 LABEL (found it!!!!!!) 1B6A1 E5578804 5 6 BASE 470 ST OP SP,OPOOP save so we can find later 1B6A2 60D78803 3 6 BASE 471 LD OBP SP,OPOOBP restore buffer pointer 1B6A3 60174801 0 5 BASE 472 LD R0 OP,OPNAME get the name field 1B6A4 E401A8ED 0 473 ST R0 VALUE set up to decode 1B6A5 DC41B653 474 CALLNP PAK6OUT decode pack-6 format 1B6A6 60040020 0 IMM 475 LD R0 BLANK tack on a blank 1B6A7 E437AC01 0 3 @ 476 ST R0 @OBPT(OBP) just for looks! 1B6A8 18C40001 3 IMM 477 ADD OBP 1 1B6A9 61578804 5 6 BASE 478 LD OP SP,OPOOP get table pointer back again 1B6AA 60097820 0 5 ZBM 479 LD R0 OP,OPMT get modifier type 1B6AB 5CA1B721 0 480 LDPC OPOMJT(R0) go process accordingly 481 * --- 482 0001B6AC 483 OPOMOD10 LABEL (register type) 1B6AC 60098E31 0 6 ZBM 484 LD R0 SP,OPOREG get the register specifier 1B6AD E401A8F1 0 485 ST R0 REGVAL stuff in the right place 1B6AE DC41B739 486 CALLNP REGO go output register name 1B6AF FE0FB6BD 487 JMP OPOOPN and then go do operand 488 * --- 489 0001B6B0 490 OPOMOD20 LABEL (CBM - REG/BIT) 1B6B0 60098E31 0 6 ZBM 491 LD R0 SP,OPOREG otherwise do register first 1B6B1 E401A8F1 0 492 ST R0 REGVAL save the register number 1B6B2 60020014 0 IMM 493 LD R0 MODECBM*MODEBITS start with CBM mode 1B6B3 60499451 1 6 ZBM 494 LD R1 SP,OPOBIT now get starting bit 1B6B4 E44A2450 1 0 CBM 495 ST R1 R0/BYTESB use as byte start bit 1B6B5 EDCA2E50 0 CBM 496 STW R0/BYTELEN and set length as one 1B6B6 E401A8F0 0 497 ST R0 CONVAL save constructed byte thing 1B6B7 DC41B739 498 CALLNP REGO output a register name 1B6B8 DC41B84A 499 CALLNP BYTO now output the byte specifier 1B6B9 FE0FB6BD 500 JMP OPOOPN and that wraps up here 501 * --- 502 0001B6BA 503 OPOMOD40 LABEL (parameter type) 1B6BA 60098E31 0 6 ZBM 504 LD R0 SP,OPOPAR get the parameter field 1B6BB E401A8F0 0 505 ST R0 CONVAL save the value to list 1B6BC DC41B74B 506 CALLNP CONO and go list it out 0001B6BD 507 OPOOPN LABEL now for the operand field 1B6BD 18C40002 3 IMM 508 ADD OBP 2 advance output buffer pointer 1B6BE 60178803 0 6 BASE 509 LD R0 SP,OPOOBP get initial buffer pointer 1B6BF 54D6100A 3 0 REG 510 MAX OBP R0+OPNSPOT tab to a nice place 1B6C0 61578804 5 6 BASE 511 LD OP SP,OPOOP get table pointer once more 1B6C1 60097C20 0 5 ZBM 512 LD R0 OP,OPOT get operand class 1B6C2 5CA1B725 0 513 LDPC OPOOJT(R0) and process accordingly 514 * --- 515 0001B6C3 516 OPOO10 LABEL (constant) 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 129 (RDUOSUB) F 16 Output subroutines 1B6C3 60099F11 0 6 ZBM 517 LD R0 SP,OPOWORD/ADRBITS get the 17 bit value 1B6C4 E401A8F0 0 518 ST R0 CONVAL set up for outputter 1B6C5 DC41B74B 519 CALLNP CONO go output a constant 1B6C6 FE0FB71F 520 JMP OPOEXIT and then you can go 521 * --- 522 0001B6C7 523 OPOO30 LABEL (memory address - 17 bit) 1B6C7 60099F11 0 6 ZBM 524 LD R0 SP,OPOWORD/ADRBITS get the value 1B6C8 E401A8F0 0 525 ST R0 CONVAL set up to locate in list 1B6C9 DC41B729 526 CALLNP MEMO output a memory address 1B6CA FE0FB71F 527 JMP OPOEXIT then it's time to go! 528 * --- 529 0001B6CB 530 OPOO40 LABEL (22-bit goodie word) 1B6CB 60099451 0 6 ZBM 531 LD R0 SP,OPOWORD/MODEBITS get mode field 1B6CC 6131ACB3 4 0 @ 532 LD R4 @MODETAB(R0) get the operand code 1B6CD 1D04000C 4 IMM 533 MUL R4 NAPC adjust for table index 1B6CE FB23B707 4 534 DRJ R4 OPOOPNRA go get possible register 535 0001B6CF 536 OPOONEXT LABEL 1B6CF 61178805 4 6 BASE 537 LD R4 SP,OPOCNTL restore control registers 0001B6D0 538 OPOONXT2 LABEL 1B6D0 BC130000 0 4 REG 539 INCL R0 R4 advance action pointer and load 1B6D1 6031ACB9 0 0 @ 540 LD R0 @ACTTAB(R0) pick up the action code 1B6D2 E5178805 4 6 BASE 541 ST R4 SP,OPOCNTL save registers from harm 1B6D3 5D61B666 0 542 XCT ACTIONS(R0) and perform next action 1B6D4 FE0FB6CF 543 JMP OPOONEXT recycle the loop if we get here 544 * --- 545 0001B6D5 546 OPOOPNGD LABEL (22-bit goodie word) 1B6D5 FE0FB6CF 547 JMP OPOONEXT no-op in RFP world 548 * --- 549 0001B6D6 550 OPOOPNGR LABEL (goodie without register) 1B6D6 FE0FB6CF 551 JMP OPOONEXT and check the results 552 * --- 553 0001B6D7 554 OPOOPNMA LABEL (memory address) 1B6D7 60099F11 0 6 ZBM 555 LD R0 SP,OPOWORD/ADRBITS get the address portion 1B6D8 E401A8F0 0 556 ST R0 CONVAL save in output location 1B6D9 DC41B729 557 CALLNP MEMO ship it out! 1B6DA FE0FB6CF 558 JMP OPOONEXT and then head back for more 559 * --- 560 0001B6DB 561 OPOOPNCM LABEL (comma) 1B6DB 5C01AAC0 562 CMZ USINGNEW new format ?? 1B6DC FE03B6E0 563 JEQ OPOONOCRT no, we are fine 564 * \ / 1B6DD 6004005E 0 IMM 565 LD R0 CARAT get a carat 1B6DE E437AC01 0 3 @ 566 ST R0 @OBPT(OBP) set it into buffer 1B6DF 18C40001 3 IMM 567 ADD OBP 1 bump to next location 0001B6E0 568 OPOONOCRT LABEL 1B6E0 6004002C 0 IMM 569 LD R0 COMMA get comma to output 0001B6E1 570 OPOOCHAR LABEL 1B6E1 E437AC01 0 3 @ 571 ST R0 @OBPT(OBP) add to the string 1B6E2 FAE1B6D0 3 572 IRJ OBP OPOONXT2 advance pointer and head back 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 130 (RDUOSUB) F 16 Output subroutines 573 * --- 574 0001B6E3 575 OPOOPNAT LABEL (at-sign) 1B6E3 60040040 0 IMM 576 LD R0 ATSIGN get the signal 1B6E4 FE0FB6E1 577 JMP OPOOCHAR and go place in buffer 578 * --- 579 0001B6E5 580 OPOOPNLP LABEL (left-paren) 1B6E5 60040028 0 IMM 581 LD R0 LPAREN 1B6E6 FE0FB6E1 582 JMP OPOOCHAR 583 * --- 584 0001B6E7 585 OPOOPNRP LABEL (right-paren) 1B6E7 60040029 0 IMM 586 LD R0 RPAREN 1B6E8 FE0FB6E1 587 JMP OPOOCHAR 588 * --- 589 0001B6E9 590 OPOOPNPL LABEL (plus) 1B6E9 6004002B 0 IMM 591 LD R0 PLUS 1B6EA FE0FB6E1 592 JMP OPOOCHAR 593 * --- 594 0001B6EB 595 OPOOPNPR LABEL (PAIR) 1B6EB 6005CD2D 0 IMM 596 LD R0 ADR(MESPAIR) 0001B6EC 597 OPOOLIT LABEL 1B6EC DC41B87B 598 CALLNP MESSMOVE add message to string 1B6ED FE0FB6CF 599 JMP OPOONEXT and head on back 600 * --- 601 0001B6EE 602 OPOOPNCH LABEL (CACH) 1B6EE 6005CD2F 0 IMM 603 LD R0 ADR(MESCACH) 1B6EF FE0FB6EC 604 JMP OPOOLIT 605 * --- 606 0001B6F0 607 OPOOPNI1 LABEL (INT1) 1B6F0 6005CD33 0 IMM 608 LD R0 ADR(MESINT1) 1B6F1 FE0FB6EC 609 JMP OPOOLIT 610 * --- 611 0001B6F2 612 OPOOPNF1 LABEL (FLT1) 1B6F2 6005CD35 0 IMM 613 LD R0 ADR(MESFLT1) 1B6F3 FE0FB6EC 614 JMP OPOOLIT 615 * --- 616 0001B6F4 617 OPOOPNF2 LABEL (FLT2) 1B6F4 6005CD37 0 IMM 618 LD R0 ADR(MESFLT2) 1B6F5 FE0FB6EC 619 JMP OPOOLIT 620 * --- 621 0001B6F6 622 OPOOPNST LABEL (STAK) 1B6F6 6005CD31 0 IMM 623 LD R0 ADR(MESSTAK) 1B6F7 FE0FB6EC 624 JMP OPOOLIT 625 * --- 626 0001B6F8 627 OPOOPNLZ LABEL (left-justify, zero-fill) 1B6F8 60099F11 0 6 ZBM 628 LD R0 SP,OPOWORD/ADRBITS get the 17-bit field 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 131 (RDUOSUB) F 16 Output subroutines 1B6F9 600A1E00 0 0 CBM 629 LD R0 R0/BITS 15:14 rotate to the top 0001B6FA 630 OPOOCON LABEL 1B6FA E401A8F0 0 631 ST R0 CONVAL stuff into the constant area 1B6FB FE0FB6D0 632 JMP OPOONXT2 and then go do next 633 * --- 634 0001B6FC 635 OPOOPNRZ LABEL (right-justify, zero-fill) 1B6FC 60099F11 0 6 ZBM 636 LD R0 SP,OPOWORD/ADRBITS 1B6FD FE0FB6FA 637 JMP OPOOCON 638 * --- 639 0001B6FE 640 OPOOPNRW LABEL (right-justify, ones-fill) 1B6FE 60099F11 0 6 ZBM 641 LD R0 SP,OPOWORD/ADRBITS 1B6FF D14A0100 0 CBM 642 STMW R0/BITS 0:15 1B700 FE0FB6FA 643 JMP OPOOCON 644 * --- 645 0001B701 646 OPOOPNCA LABEL (constant, type 'a') 1B701 6009B841 0 6 ZBM 647 LD R0 SP,OPOWORD/CONBITSA 1B702 FE0FB6FA 648 JMP OPOOCON 649 * --- 650 0001B703 651 OPOOPNCB LABEL (constant, type 'b') 1B703 6009A4E1 0 6 ZBM 652 LD R0 SP,OPOWORD/CONBITSB 1B704 FE0FB6FA 653 JMP OPOOCON 654 * --- 655 0001B705 656 OPOOPNCC LABEL (constant, type 'c') 1B705 6009ACA1 0 6 ZBM 657 LD R0 SP,OPOWORD/CONBITSC 1B706 FE0FB6FA 658 JMP OPOOCON 659 * --- 660 0001B707 661 OPOOPNRA LABEL (register, type 'a') 1B707 60099E31 0 6 ZBM 662 LD R0 SP,OPOWORD/REGBITSA 0001B708 663 OPOOREG LABEL 1B708 E401A8F1 0 664 ST R0 REGVAL save the value 1B709 FE0FB6D0 665 JMP OPOONXT2 return for more 666 * --- 667 0001B70A 668 OPOOPNRB LABEL (register, type 'b') 1B70A 6009A431 0 6 ZBM 669 LD R0 SP,OPOWORD/REGBITSB 1B70B FE0FB708 670 JMP OPOOREG 671 * --- 672 0001B70C 673 OPOOPNRC LABEL (register, type 'c') 1B70C 60099831 0 6 ZBM 674 LD R0 SP,OPOWORD/REGBITSC 1B70D FE0FB708 675 JMP OPOOREG 676 * --- 677 0001B70E 678 OPOOPNHX LABEL (hex output) 1B70E 60040028 0 IMM 679 LD R0 LPAREN 1B70F E437AC01 0 3 @ 680 ST R0 @OBPT(OBP) put in a parenthesis 1B710 18C40001 3 IMM 681 ADD OBP 1 1B711 60178801 0 6 BASE 682 LD R0 SP,OPOWORD get the entire word 1B712 DC41B5F1 683 CALLNP HEXOUT ship it out 1B713 60040029 0 IMM 684 LD R0 RPAREN and close off the line 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 132 (RDUOSUB) F 16 Output subroutines 1B714 E437AC01 0 3 @ 685 ST R0 @OBPT(OBP) 1B715 18C40001 3 IMM 686 ADD OBP 1 1B716 FE0FB6CF 687 JMP OPOONEXT then go back for more 688 * --- 689 0001B717 690 OPOOPNS1 LABEL (control change S1) 1B717 6009A441 0 6 ZBM 691 LD R0 SP,OPOWORD/S1BITS get the sub-class value 0001B718 692 OPOOX LABEL 1B718 1C04000C 0 IMM 693 MUL R0 NAPC adjust for table indexing 1B719 19120000 4 0 REG 694 ADD R4 R0 swizzle the index value 1B71A FE0FB6D0 695 JMP OPOONXT2 and go back quietly 696 * --- 697 0001B71B 698 OPOOPNS2 LABEL (control change S2) 1B71B 6009AA11 0 6 ZBM 699 LD R0 SP,OPOWORD/S2BITS get sub-class field 1B71C FE0FB718 700 JMP OPOOX go adjust the index 701 * --- 702 0001B71D 703 OPO90 LABEL 1B71D 60D78803 3 6 BASE 704 LD OBP SP,OPOOBP restore buffer pointer 1B71E DC41B5F1 705 CALLNP HEXOUT just output in hex 0001B71F 706 OPOEXIT LABEL 1B71F 61578802 5 6 BASE 707 LD R5 SP,OPOTMP restore R5 1B720 5D1F8006 6 STAK 708 LEAVE POP 709 * --- 710 1B721 0001B6BD 711 OPOMJT ADR OPOOPN no modifier 1B722 0001B6AC 712 ADR OPOMOD10 register 1B723 0001B6B0 713 ADR OPOMOD20 REG/BIT 1B724 0001B6BA 714 ADR OPOMOD40 parameter 715 1B725 0001B71F 716 OPOOJT ADR OPOEXIT plain (no operand) 1B726 0001B6C3 717 ADR OPOO10 constant 1B727 0001B6C7 718 ADR OPOO30 memory address (17-bit) 1B728 0001B6CB 719 ADR OPOO40 22-bit goodie word 720 721 END of OPOUT subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 133 (RDUOSUB) F 16 Output subroutines 723 724 ********************************************************************************** 725 * * 726 * MEMO is called by the OPOUT processor to place a memory * 727 * address, which is saved in CONVAL, into the output buffer. If * 728 * a symbol has been defined for the location then the symbol * 729 * name is put in the output, else "ma xxxxx" is used. * 730 * Call: * 731 * CONVAL contains address * 732 * OBP -> current position in output buffer * 733 * CALLNP MEMO * 734 * Sets OBP. * 735 * Eats R0:R5, VALUE, TYPE. * 736 * * 737 ********************************************************************************** 738 739 BLOCK 740 ENTRY MEMO 741 742 BEGFRAME 743 ENDFRAME 744 1B729 DD5F8001 6 STAK 745 MEMO ENTRNP PUSH 1B72A 6001A8F0 0 746 LD R0 CONVAL get the value to list 1B72B E401A8ED 0 747 ST R0 VALUE put where needed 748 * 749 * Get the code for a memory location, depending on which symbol 750 * format that is being used. 751 * 1B72C 60040005 0 IMM 752 LD R0 SYMTYPEGD type for memory addresses 1B72D 5C01AAC0 753 CMZ USINGNEW new format ?? 1B72E FE03B730 754 JEQ MEMO15 no, we have what we need 755 * \ / 1B72F 60040001 0 IMM 756 LD R0 NEWMEM yes, get the new memory code 0001B730 757 MEMO15 LABEL 1B730 E401A8F2 0 758 ST R0 TYPE set type to search for 1B731 DC41BAB0 759 CALLNP VALLOOK go see if we can match 1B732 FB0BB735 4 760 JLEZ SYM MEMO20 jump if nothing found 1B733 DC41BADF 761 CALLNP SYMOUT else list out the symbol 1B734 5D1F8001 6 STAK 762 LEAVE POP 763 * --- 764 0001B735 765 MEMO20 LABEL 1B735 6005CD28 0 IMM 766 LD R0 ADR(MESMA) "ma " 1B736 DC41B87B 767 CALLNP MESSMOVE say this is a memory address 1B737 DC41B600 768 CALLNP HEXOUTA and list out 17 bits 1B738 5D1F8001 6 STAK 769 LEAVE POP 770 * --- 771 772 END of MEMO subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 134 (RDUOSUB) F 16 Output subroutines 774 775 ********************************************************************************** 776 * * 777 * REGO is called by the OPOUT routine to list out register * 778 * symbols. This is VERY simple, as there is always a register * 779 * symbol. * 780 * Call: * 781 * OBP -> current position in output buffer * 782 * REGVAL contains the regster number * 783 * CALLNP REGO * 784 * OBP -> new position in output buffer * 785 * Eats R0. * 786 * * 787 ********************************************************************************** 788 789 BLOCK 790 ENTRY REGO 791 792 BEGFRAME 793 ENDFRAME 794 1B739 DD5F8001 6 STAK 795 REGO ENTRNP PUSH 1B73A 60040052 0 IMM 796 LD R0 "R" register name uses R 1B73B E437AC01 0 3 @ 797 ST R0 @OBPT(OBP) into the pot 1B73C 18C40001 3 IMM 798 ADD OBP 1 stir a little 1B73D 6001A8F1 0 799 LD R0 REGVAL get register number 1B73E 18040030 0 IMM 800 ADD R0 NUMBIAS make into ASCII digit 1B73F E437AC01 0 3 @ 801 ST R0 @OBPT(OBP) add it to the handle 1B740 18C40001 3 IMM 802 ADD OBP 1 advance pointer 1B741 5D1F8001 6 STAK 803 LEAVE POP 804 * --- 805 806 END of REGO subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 135 (RDUOSUB) F 16 Output subroutines 808 809 ********************************************************************************** 810 * * 811 * This is the IDXO routine. It is just like the REGO * 812 * routine but it also encloses its register with parens. * 813 * OBP -> current position in output buffer * 814 * REGVAL contains the regster number * 815 * CALLNP IDXO * 816 * OBP -> new position in output buffer * 817 * Eats R0, sets R3. * 818 * * 819 ********************************************************************************** 820 821 BLOCK 822 ENTRY IDXO 823 824 BEGFRAME 825 ENDFRAME 826 1B742 DD5F8001 6 STAK 827 IDXO ENTRNP PUSH 1B743 60040028 0 IMM 828 LD R0 LPAREN get a left parenthesis 1B744 E437AC01 0 3 @ 829 ST R0 @OBPT(OBP) place in output line 1B745 18C40001 3 IMM 830 ADD OBP 1 1B746 DC41B739 831 CALLNP REGO go list the register 1B747 60040029 0 IMM 832 LD R0 RPAREN now for the close 1B748 E437AC01 0 3 @ 833 ST R0 @OBPT(OBP) that should do it 1B749 18C40001 3 IMM 834 ADD OBP 1 advance pointer 1B74A 5D1F8001 6 STAK 835 LEAVE POP 836 * --- 837 838 END of IDXO subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 136 (RDUOSUB) F 16 Output subroutines 840 841 ********************************************************************************** 842 * * 843 * CONO simply lists a symbol as its constant value. * 844 * Call: * 845 * CONVAL contains constant's value * 846 * OBP -> current position in output buffer * 847 * CALLNP CONO * 848 * Eats R0:R2, sets R3, wipes out VALUE. * 849 * * 850 ********************************************************************************** 851 852 BLOCK 853 ENTRY CONO 854 855 BEGFRAME 856 ENDFRAME 857 1B74B DD5F8001 6 STAK 858 CONO ENTRNP PUSH 1B74C 6001A8F0 0 859 LD R0 CONVAL get the value to list 1B74D E401A8ED 0 860 ST R0 VALUE transfer to needed place 1B74E DC41B60C 861 CALLNP HEXOUTC output hex constant 1B74F 5D1F8001 6 STAK 862 LEAVE POP 863 * --- 864 865 END of CONO subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 137 (RDUOSUB) F 16 Output subroutines 874 BLOCK 875 876 ENTRY TIMEOUT 877 ENTRY TIMEOUTS 878 879 ********************************************************************************** 880 * * 881 * TIMEOUT subroutine takes the value in VALUE, as a double word * 882 * time, unpacks it into time, date, month, year, and day of the week, * 883 * and places them in character form into the output buffer OBUFF. * 884 * Since we only have the first word we fetch the second word from * 885 * the location past REALADDR. * 886 * TIMEOUTS does the same except that it treats the value in VALUE * 887 * as a single word time. * 888 * Call: * 889 * VALUE contains word(s) to be unpacked * 890 * OBP -> current position in output buffer * 891 * CALLNP TIMEOUT(S) * 892 * OBP -> new position in output buffer * 893 * Eats R0:R2, sets R3. * 894 * * 895 ********************************************************************************** 896 897 BEGFRAME 00178801 6 BASE 898 MONTH BSS 1 store month 00178802 6 BASE 899 WEEKDAY BSS 1 store number indicating weekday 00178803 6 BASE 900 TIME BSS 1 store time in ms 00178804 6 BASE 901 YEAR BSS 1 store year 00178805 6 BASE 902 DATE BSS 1 store day of month 00178806 6 BASE 903 SECONDS BSS 1 store seconds 00178807 6 BASE 904 MINUTES BSS 1 store minutes 00178808 6 BASE 905 SINGLE BSS 1 flag for single word time 00178809 6 BASE 906 TEMPVALUE BSS 2 save VALUE 0017880B 6 BASE 907 TIMER4R5 BSS 2 store registers 908 ENDFRAME 909 1B7BD DD5F800D 6 STAK 910 TIMEOUT ENTRNP PUSH 1B7BE E717880B 456 BASE 911 ST2 R4 SP,TIMER4R5 save these registers 1B7BF E4D78808 3 6 BASE 912 ST OBP SP,SINGLE prevent SHIPCOM from destroying this 1B7C0 6281F38D 23 913 LD2 R2 DATA get the present contents 1B7C1 E6978809 236 BASE 914 ST2 R2 SP,TEMPVALUE save them for a few msecs 1B7C2 60894634 2 5 ZBM 915 LD R2 COM,GMMSLOT get slot code of transfer 916 1B7C3 D001A921 917 INC REALADDR increment address 1B7C4 60494C43 1 5 ZBM 918 LD R1 COM,COMADDR get address type code 1B7C5 6063AC85 1 1 919 LD R1 ADRMASK(R1) get the proper mask 1B7C6 F841A921 1 920 ANDM R1 REALADDR keep address within range 921 1B7C7 DC01BBAC 922 CALL SHIPCOM read the second word of time 1B7C8 4101BBF5 923 PAR RESPERROR error address 1B7C9 41494034 5 ZBM 924 PARV COM,GMMCLS class=3 1B7CA 4165A97B 2 925 PARV SLOTS(R2) slot to read from 1B7CB 41440002 IMM 926 PARV BCMREAD BCM=2 1B7CC 4041A921 927 PARVL REALADDR address to start at 928 1B7CD D041A921 929 DEC REALADDR decrement address 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 138 (RDUOSUB) F 16 Output subroutines 1B7CE 60494C43 1 5 ZBM 930 LD R1 COM,COMADDR get address type code 1B7CF 6063AC85 1 1 931 LD R1 ADRMASK(R1) get the proper mask 1B7D0 F841A921 1 932 ANDM R1 REALADDR keep address within range 933 1B7D1 60D78808 3 6 BASE 934 LD OBP SP,SINGLE restore it now 1B7D2 6001F38E 0 935 LD R0 DATA(1) get the next word 1B7D3 E401A8EE 0 936 ST R0 VALUE(1) place in second word of value 1B7D4 62578809 126 BASE 937 LD2 R1 SP,TEMPVALUE now restore DATA(1) 1B7D5 E641F38D 12 938 ST2 R1 DATA there, all better now 1B7D6 6001B834 0 939 LD R0 TIMMASK get the time mask 1B7D7 F801A8ED 0 940 ANDM R0 VALUE zero out first 20 bits 1B7D8 EC178808 6 BASE 941 STZ SP,SINGLE say not single word time 1B7D9 FE0FB7E0 942 JMP UNPACK skip single word entry 943 * --- 944 1B7DA DD5F800D 6 STAK 945 TIMEOUTS ENTRNP PUSH 1B7DB E717880B 456 BASE 946 ST2 R4 SP,TIMER4R5 save these registers 1B7DC 6001A8ED 0 947 LD R0 VALUE get single word time 1B7DD EE01A8ED 948 STZ2 VALUE zero out value 1B7DE E411B833 0 @ 949 ST R0 @MIDTIME store in double word time format 1B7DF EDD78808 6 BASE 950 STW SP,SINGLE 951 * \ / 952 953 * unpack the raw time into time, date, month, year, and weekday 0001B7E0 954 UNPACK LABEL 1B7E0 6201A8ED 01 955 LD2 R0 VALUE 1B7E1 E601A8E8 01 956 ST2 R0 TIMETEMP save the original VALUE 1B7E2 61538000 5 6 REG 957 LD R5 SP we need to save SP 1B7E3 DC01B750 958 CALL UNPACKDATE breaks time into time/date/month/year 1B7E4 4341A8ED 959 PARV2 VALUE contains raw time 1B7E5 41174803 5 BASE 960 PAR R5,TIME ms since midnight gets put here 1B7E6 41174805 5 BASE 961 PAR R5,DATE date in month gets put here 1B7E7 41174801 5 BASE 962 PAR R5,MONTH month goes here (Jan = 1) 1B7E8 41174804 5 BASE 963 PAR R5,YEAR year goes here 1B7E9 40174802 5 BASE 964 PARL R5,WEEKDAY yes, the weekday goes here (Sun = 0) 965 1B7EA 60578802 1 6 BASE 966 LD R1 SP,WEEKDAY index into DAYTAB 1B7EB 3823B843 0 1 967 LEA R0 DAYTAB(R1) get location of weekday 1B7EC 60440003 1 IMM 968 LD R1 3 3 chars to move 1B7ED 38B7AC01 2 3 @ 969 LEA R2 @OBPT(OBP) where to put it 1B7EE FE400000 970 CMOVE do it 971 1B7EF 60440002 1 IMM 972 LD R1 2 want 2 blanks now 1B7F0 FE580020 973 CFILL " " 974 1B7F1 18C40005 3 IMM 975 ADD OBP 5 need OBP to point to buf position 1B7F2 60178805 0 6 BASE 976 LD R0 SP,DATE get date 1B7F3 E401A8ED 0 977 ST R0 VALUE place in value 1B7F4 DC41B62D 978 CALLNP DECOUT place in output string 979 1B7F5 6004002D 0 IMM 980 LD R0 MINUS date separator 1B7F6 E437AC01 0 3 @ 981 ST R0 @OBPT(OBP) into buffer 1B7F7 18C40001 3 IMM 982 ADD OBP 1 bump up buffer pointer 983 1B7F8 60578801 1 6 BASE 984 LD R1 SP,MONTH index into MNTHTAB 1B7F9 3823B836 0 1 985 LEA R0 MNTHTAB(R1-1) get location of month name 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 139 (RDUOSUB) F 16 Output subroutines 1B7FA 60440003 1 IMM 986 LD R1 3 3 chars to move 1B7FB 38B7AC01 2 3 @ 987 LEA R2 @OBPT(OBP) where to put it 1B7FC FE400000 988 CMOVE do it 1B7FD 18C40003 3 IMM 989 ADD OBP 3 advance pointer 990 1B7FE 6004002D 0 IMM 991 LD R0 MINUS date separator 1B7FF E437AC01 0 3 @ 992 ST R0 @OBPT(OBP) into buffer 1B800 18C40001 3 IMM 993 ADD OBP 1 advance buffer pointer 994 995 * is year in 20th century? if so remove first 2 digits 1B801 61178804 4 6 BASE 996 LD R4 SP,YEAR need year to work with 1B802 6501B835 4 997 CPR R4 CENT19 is year < 1950 1B803 FE09B807 998 JLT DIFCENT year is not in 20th century 1B804 6501B836 4 999 CPR R4 CENT20 is year > 1999 1B805 FE07B807 1000 JGE DIFCENT year is after 20th century 1B806 1104076C 4 IMM 1001 SUB R4 1900 just want last 2 digits of year 0001B807 1002 DIFCENT LABEL 1B807 E501A8ED 4 1003 ST R4 VALUE put in place for DECOUT 1B808 DC41B62D 1004 CALLNP DECOUT place in output string 1005 1B809 38B7AC01 2 3 @ 1006 LEA R2 @OBPT(OBP) pointer into buffer 1B80A 60440002 1 IMM 1007 LD R1 2 want 2 blanks now 1B80B FE580020 1008 CFILL BLANK 1B80C 18C40002 3 IMM 1009 ADD OBP 2 advance buffer pointer 1010 1011 * compute time of day 1B80D 60978803 2 6 BASE 1012 LD R2 SP,TIME get the time 1B80E 1481AC23 2 1013 DIV R2 MSECSS get rid of milliseconds 1B80F 58C40010 IMM 1014 IORPSR MODIFBIT set modified arithmetic bit 1B810 60440000 1 IMM 1015 LD R1 0 1B811 1444003C 1 IMM 1016 DIV R1 60 separate seconds and minutes 1B812 E4978806 2 6 BASE 1017 ST R2 SP,SECONDS remainder is seconds 1B813 60040000 0 IMM 1018 LD R0 0 1B814 1404003C 0 IMM 1019 DIV R0 60 separate minutes and hours 1B815 E4578807 1 6 BASE 1020 ST R1 SP,MINUTES remainder is minutes 1B816 E401A8ED 0 1021 ST R0 VALUE result is hours 1B817 58840010 IMM 1022 CLBPSR MODIFBIT unset modified arithmetic 1023 1024 * now put time into output string 1B818 DC41B62D 1025 CALLNP DECOUT hours first 1B819 6004003A 0 IMM 1026 LD R0 COLON separator 1B81A E437AC01 0 3 @ 1027 ST R0 @OBPT(OBP) present buffer address 1B81B 18C40001 3 IMM 1028 ADD OBP 1 advance buffer pointer 1029 1B81C 60178807 0 6 BASE 1030 LD R0 SP,MINUTES 1B81D 6404000A 0 IMM 1031 CPR R0 10 minutes < 10? 1B81E FE07B822 1032 JGE MINSOK minutes are big enough 1B81F 60440030 1 IMM 1033 LD R1 "0" 1B820 E477AC01 1 3 @ 1034 ST R1 @OBPT(OBP) present buffer address 1B821 18C40001 3 IMM 1035 ADD OBP 1 advance buffer pointer 0001B822 1036 MINSOK LABEL 1B822 E401A8ED 0 1037 ST R0 VALUE store minutes in VALUE 1B823 DC41B62D 1038 CALLNP DECOUT put minutes into output string 1039 1B824 5C178808 6 BASE 1040 CMZ SP,SINGLE is this a single word time 1B825 FE0DB831 1041 JNE SKPSEC if so don't need seconds 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 140 (RDUOSUB) F 16 Output subroutines 1B826 6004003A 0 IMM 1042 LD R0 COLON separator 1B827 E437AC01 0 3 @ 1043 ST R0 @OBPT(OBP) present buffer address 1B828 18C40001 3 IMM 1044 ADD OBP 1 advance buffer pointer 1045 1B829 60178806 0 6 BASE 1046 LD R0 SP,SECONDS 1B82A 6404000A 0 IMM 1047 CPR R0 10 seconds < 10? 1B82B FE07B82F 1048 JGE SECSOK seconds are big enough 1B82C 60440030 1 IMM 1049 LD R1 "0" 1B82D E477AC01 1 3 @ 1050 ST R1 @OBPT(OBP) present buffer address 1B82E 18C40001 3 IMM 1051 ADD OBP 1 advance buffer pointer 0001B82F 1052 SECSOK LABEL 1B82F E401A8ED 0 1053 ST R0 VALUE store seconds in VALUE 1B830 DC41B62D 1054 CALLNP DECOUT put seconds into output string 1055 0001B831 1056 SKPSEC LABEL 1B831 6317880B 456 BASE 1057 LD2 R4 SP,TIMER4R5 restore registers 1B832 5D1F800D 6 STAK 1058 LEAVE POP 1059 * --- 1060 1B833 A009A8ED 1061 MIDTIME PTR VALUE/BITS 20:51 points to 32 bit time 1B834 00000FFF 1062 TIMMASK VFD 000000FFF zero out first 20 bits 1B835 0000079E 1063 CENT19 VFD 1950 beginning of 20th century 1B836 000007D0 1064 CENT20 VFD 2000 beginning of 21st century 1065 0001B837 1066 MNTHTAB LABEL Table of months to be indexed into 1B837 4A616E00 1067 TEXTZ "Jan" 1B838 46656200 1068 TEXTZ "Feb" 1B839 4D617200 1069 TEXTZ "Mar" 1B83A 41707200 1070 TEXTZ "Apr" 1B83B 4D617900 1071 TEXTZ "May" 1B83C 4A756E00 1072 TEXTZ "Jun" 1B83D 4A756C00 1073 TEXTZ "Jul" 1B83E 41756700 1074 TEXTZ "Aug" 1B83F 53657000 1075 TEXTZ "Sep" 1B840 4F637400 1076 TEXTZ "Oct" 1B841 4E6F7600 1077 TEXTZ "Nov" 1B842 44656300 1078 TEXTZ "Dec" 1079 0001B843 1080 DAYTAB LABEL table of day of week 1B843 53756E00 1081 TEXTZ "Sun" 1B844 4D6F6E00 1082 TEXTZ "Mon" 1B845 54756500 1083 TEXTZ "Tue" 1B846 57656400 1084 TEXTZ "Wed" 1B847 54687500 1085 TEXTZ "Thu" 1B848 46726900 1086 TEXTZ "Fri" 1B849 53617400 1087 TEXTZ "Sat" 1088 1089 END of TIMEOUT subroutines 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 141 (RDUOSUB) F 16 Output subroutines 1091 1092 ********************************************************************************** 1093 * * 1094 * This is the BYTO routine. It is called to format for * 1095 * output a bit specifier explicitly decoded into the starting * 1096 * and ending bit. The byte specifier is expected to be in CONVAL * 1097 * when called. * 1098 * * 1099 * Eats R0:R2, sets R3. * 1100 * * 1101 ********************************************************************************** 1102 1103 BLOCK 1104 ENTRY BYTO 1105 1106 BEGFRAME 00178801 6 BASE 1107 BYTOTMP BSS 1 place to save our word 0009A451 6 ZBM 1108 BYTOSB EQU BYTOTMP/BYTESB start bit position 0009AE51 6 ZBM 1109 BYTOLB EQU BYTOTMP/BYTELEN length bits position 1110 ENDFRAME 1111 1B84A DD5F8002 6 STAK 1112 BYTO ENTRNP PUSH 1113 * 1114 * If using the old format then output a slash. However, the 1115 * new format uses a dot instead. 1116 * 1B84B 6004002F 0 IMM 1117 LD R0 SLASH first, output a slash 1B84C 5C01AAC0 1118 CMZ USINGNEW new format ?? 1B84D FE03B84F 1119 JEQ BYTO10 no, we have what we want (slash) 1120 * \ / 1B84E 6004002E 0 IMM 1121 LD R0 DOT new format, we want a dot instead 0001B84F 1122 BYTO10 LABEL 1B84F E437AC01 0 3 @ 1123 ST R0 @OBPT(OBP) as a separator 1B850 18C40001 3 IMM 1124 ADD OBP 1 advance buffer pointer 1B851 6001A8F0 0 1125 LD R0 CONVAL get the word to use 1B852 E4178801 0 6 BASE 1126 ST R0 SP,BYTOTMP save for later use 1B853 EC0A3960 0 CBM 1127 STZ R0/BYTEXTRA clear any displacement 1B854 E401A8ED 0 1128 ST R0 VALUE set up for symbol search 1B855 6009AE51 0 6 ZBM 1129 LD R0 SP,BYTOLB get the byte length 1B856 FA23B85D 0 1130 DRJ R0 BYTO20 jump if multi-bits 1B857 6005CD29 0 IMM 1131 LD R0 ADR(MESBIT) this is a one-bit field 1B858 DC41B87B 1132 CALLNP MESSMOVE move the 'BIT' message 1B859 6009A451 0 6 ZBM 1133 LD R0 SP,BYTOSB get the start bit 1B85A E401A8ED 0 1134 ST R0 VALUE that is the one to output 1B85B DC41B62D 1135 CALLNP DECOUT just use decimal output 1B85C 5D1F8002 6 STAK 1136 LEAVE POP 1137 * --- 1138 0001B85D 1139 BYTO20 LABEL 1B85D 6005CD2B 0 IMM 1140 LD R0 ADR(MESBITS) this one sez 'BITS' 1B85E DC41B87B 1141 CALLNP MESSMOVE shift into buffer 1B85F 6009A451 0 6 ZBM 1142 LD R0 SP,BYTOSB get the start bit 1B860 E401A8ED 0 1143 ST R0 VALUE set the value to output 1B861 DC41B62D 1144 CALLNP DECOUT just use decimal output 1B862 6004003A 0 IMM 1145 LD R0 COLON oh, get a separator 1B863 E437AC01 0 3 @ 1146 ST R0 @OBPT(OBP) for looks 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 142 (RDUOSUB) F 16 Output subroutines 1B864 18C40001 3 IMM 1147 ADD OBP 1 1B865 6009A451 0 6 ZBM 1148 LD R0 SP,BYTOSB get start bit again 1B866 1809AE51 0 6 ZBM 1149 ADD R0 SP,BYTOLB add the length 1B867 1804001F 0 IMM 1150 ADD R0 NBPW-1 bias for zero case 1B868 7804001F 0 IMM 1151 AND R0 NBPW-1 allow for wrap-around 1B869 E401A8ED 0 1152 ST R0 VALUE now we can use it 1B86A DC41B62D 1153 CALLNP DECOUT now put out the end bit 1B86B 5D1F8002 6 STAK 1154 LEAVE POP 1155 * --- 1156 1157 END of BYTO subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 143 (RDUOSUB) F 16 Output subroutines 1159 1160 ********************************************************************************** 1161 * * 1162 * This is the BLANKOUT routine. It is just to blank out the * 1163 * output buffer to prevent some chaos. If you can't follow this * 1164 * you are in big trouble!!! * 1165 * Alternate entry starts at the second character into * 1166 * OBUFF. * 1167 * * 1168 * Eats R1:R2, sets R3. * 1169 * * 1170 ********************************************************************************** 1171 1172 BLOCK 1173 ENTRY BLANKOUT 1174 ENTRY BLANKOUTW 1175 1176 BEGFRAME 1177 ENDFRAME 1178 1B86C DD5F8001 6 STAK 1179 BLANKOUTW ENTRNP PUSH 1B86D 60C40001 3 IMM 1180 LD OBP 1 initialize buffer pointer 1B86E FE0FB871 1181 JMP BLNK10 then merge in 1182 * --- 1183 1B86F DD5F8001 6 STAK 1184 BLANKOUT ENTRNP PUSH 1B870 60C40000 3 IMM 1185 LD OBP 0 initialize output buffer ptr 0001B871 1186 BLNK10 LABEL 1B871 60440060 1 IMM 1187 LD R1 OKLEN how many to blank 1B872 6085A818 2 IMM 1188 LD R2 ADR(OBUFF) this is the output buffer 1B873 FE580020 1189 CFILL BLANK blank it out good 1B874 5D1F8001 6 STAK 1190 LEAVE POP 1191 * --- 1192 1193 END of BLANKOUT subroutines 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 144 (RDUOSUB) F 16 Output subroutines 1195 1196 ********************************************************************************** 1197 * * 1198 * MESSMOVE is used to move a string of text from where ever * 1199 * it is to the output buffer. The message is pointed to by R0, * 1200 * and the output buffer position is in OBP. The message must * 1201 * have a null as a terminator, which will also be moved to the * 1202 * buffer. OBP will be returned pointing to the null so that * 1203 * further messages, numbers, etc., may be appended. * 1204 * Alternate entry, MESSMOVEZ, will zero OBP at start-up. * 1205 * Alternate entry, MESSMOVEW, will set OBP to one at start-up. * 1206 * Call: * 1207 * R0 -> * 1208 * OBP = current index into output buffer * 1209 * CALLNP MESSMOVE * 1210 * OBP = index into output buffer of terminating zero * 1211 * * 1212 * Eats R1:R3. * 1213 * stack required = 1 * 1214 * * 1215 ********************************************************************************** 1216 1217 BLOCK 1218 ENTRY MESSMOVE 1219 ENTRY MESSMOVEW 1220 ENTRY MESSMOVEZ 1221 1222 BEGFRAME 1223 ENDFRAME 1224 1B875 DD5F8001 6 STAK 1225 MESSMOVEZ ENTRNP PUSH 1B876 60C40000 3 IMM 1226 LD OBP 0 zero buffer pointer 1B877 FE0FB87C 1227 JMP MM10 and merge in 1228 * --- 1229 1B878 DD5F8001 6 STAK 1230 MESSMOVEW ENTRNP PUSH 1B879 60C40001 3 IMM 1231 LD OBP 1 set buffer pointer 1B87A FE0FB87C 1232 JMP MM10 then merge in 1233 * --- 1234 1B87B DD5F8001 6 STAK 1235 MESSMOVE ENTRNP PUSH 0001B87C 1236 MM10 LABEL 1B87C 60840000 2 IMM 1237 LD R2 0 start at front of message 0001B87D 1238 MM20 LABEL 1B87D 605A1000 1 02 CACH 1239 LD R1 CACH R0,0(R2) get one character of message 1B87E FA43B882 1 1240 JEQZ R1 MMEXIT jump if time to exit 1B87F E477AC01 1 3 @ 1241 ST R1 @OBPT(OBP) stuff in the buffer 1B880 18C40001 3 IMM 1242 ADD OBP 1 advance output buffer pointer 1B881 FAA1B87D 2 1243 IRJ R2 MM20 and recycle 1244 * --- 1245 0001B882 1246 MMEXIT LABEL 1B882 5D1F8001 6 STAK 1247 LEAVE POP 1248 * --- 1249 1250 END of MESSMOVE subroutines 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 145 (RDUOSUB) F 16 Output subroutines 1252 1253 ********************************************************************************** 1254 * * 1255 * OUT will write a line to the users terminal. It * 1256 * also handles ---MORE--- processing and logging the line. * 1257 * The output line is scanned for the terminator (0), to * 1258 * determine the number of characters to write out. * 1259 * LINECNT is used to determine if the user has had more * 1260 * than a screenful of output, and if so we will wait for the * 1261 * pokey human to read what we have to say before continuing. * 1262 * Alternate entry, OUTB, is used for binary write. * 1263 * Alternate entry, OUTO, writes OBUFFF (OBP contains count * 1264 * of characters in OBUFF to be output). * 1265 * Call: * 1266 * R0 -> zero terminated message (except for OUTO) * 1267 * CALLNP OUT * 1268 * * 1269 * Eats R0:R2. * 1270 * stack required = 11 * 1271 * 4 + max ( LOGIT (7), OUT (4), OUTPROMPT ( ) * 1272 * READLINE ( ), SAVEEVENT (1) ) * 1273 * * 1274 ********************************************************************************** 1275 1276 BLOCK 1277 ENTRY OUT 1278 ENTRY OUTB 1279 ENTRY OUTO 1280 1281 BEGFRAME 00178801 6 BASE 1282 OUTFLAG BSS 1 flag for normal or binary out 00178802 6 BASE 1283 OUTTMP BSS 2 temp for output record info 1284 ENDFRAME 1285 1B883 DD5F8004 6 STAK 1286 OUTB ENTRNP PUSH 1B884 EDD78801 6 BASE 1287 STW SP,OUTFLAG set flag for binary output 1B885 FE0FB88C 1288 JMP OUT10 go merge in 1289 * --- 1290 1B886 DD5F8004 6 STAK 1291 OUTO ENTRNP PUSH 1B887 EC37AC01 3 @ 1292 STZ @OBPT(OBP) tack on a terminator 1B888 6005A818 0 IMM 1293 LD R0 ADR(OBUFF) point to output buffer 1B889 FE0FB88B 1294 JMP OUT00 then do a normal entry 1295 * --- 1296 1B88A DD5F8004 6 STAK 1297 OUT ENTRNP PUSH 0001B88B 1298 OUT00 LABEL 1B88B EC178801 6 BASE 1299 STZ SP,OUTFLAG say this is a normal write 0001B88C 1300 OUT10 LABEL 1B88C 60920000 2 0 REG 1301 LD R2 R0 save the buffer pointer 1B88D 60440060 1 IMM 1302 LD R1 OKLEN max length to check 1B88E DA1C0800 0 1 1303 SRCHI R0 R1 NULL do it to it 1B88F 30440060 1 IMM 1304 RSB R1 OKLEN get the real count 1305 1B890 BC01A915 0 1306 INCL R0 LINECNT advance line counter 1B891 6401A914 0 1307 CPR R0 LINEMAX too many for page? 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 146 (RDUOSUB) F 16 Output subroutines 1B892 FE0BB8A1 1308 JLE OUT20 jump if room for one more 1B893 5C01A914 1309 CMZ LINEMAX infinite length terminal? 1B894 FE03B8A1 1310 JEQ OUT20 if so then no problem 1311 * \ / 1312 1B895 E6578802 126 BASE 1313 ST2 R1 SP,OUTTMP save record info a moment 1B896 EC01A915 1314 STZ LINECNT say we have room to print 1B897 6005CD39 0 IMM 1315 LD R0 ADR(MOREMESS) "--more--" 1B898 DC41B88A 1316 CALLNP OUT recurse away 1B899 DC41B8C2 1317 CALLNP OUTPROMPT print the prompt and ... 1B89A EDC1A8D8 1318 STW MOREPROC say we are doing more processing 1B89B DC41B3B6 1319 CALLNP READLINE ... get the user command 1B89C EC01A8D8 1320 STZ MOREPROC done with more processing 1B89D FA4DBE47 1 1321 JNEZ R1 BAILOUT go process input if got some 1B89E 6484000D 2 IMM 1322 CPR R2 CR terminator only - check it 1B89F FE0DBE47 1323 JNE BAILOUT and if not eol then exit 1B8A0 62578802 126 BASE 1324 LD2 R1 SP,OUTTMP recover real output info 1325 * \ / 1326 0001B8A1 1327 OUT20 LABEL 1B8A1 60040040 0 IMM 1328 LD R0 FRWRITE get xreq code for write 1B8A2 5C178801 6 BASE 1329 CMZ SP,OUTFLAG normal or binary?? 1B8A3 FE03B8A5 1330 JEQ OUT40 jump if normal 1B8A4 60040042 0 IMM 1331 LD R0 FRWRITEB switch to binary 0001B8A5 1332 OUT40 LABEL 1B8A5 DC41CCC7 1333 CALLNP SAVEEVENT save the event 1B8A6 08840002 IMM 1334 FREQ LUNSOUT+XREQ and let the user see it 1B8A7 DC41CCB3 1335 CALLNP LOGIT log it 1B8A8 5D1F8004 6 STAK 1336 LEAVE POP 1337 * --- 1338 1339 END of OUT subroutines 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 147 (RDUOSUB) F 16 Output subroutines 1341 1342 ********************************************************************************** 1343 * * 1344 * These routines just print out various control characters * 1345 * to keep the terminal's prompt at the proper location. * 1346 * The entry OUTCRLF outputs a carriage return, line feed and logs it. * 1347 * The entry CRLF does a CR and LF but does not log it. * 1348 * The entry OUTCR is used to output a carriage return. * 1349 * The entry OUTLF just does a line feed. * 1350 * * 1351 * Eats R0:R2 * 1352 * * 1353 ********************************************************************************** 1354 1355 BLOCK 1356 ENTRY OUTCR 1357 ENTRY OUTCRLF 1358 ENTRY CRLF 1359 ENTRY OUTLF 1360 ENTRY MESCR 1361 1362 BEGFRAME 1363 ENDFRAME 1364 1B8A8 0000000A 1365 MESLF VFD 8:LF 1B8A9 0000000D 1366 MESCR VFD 8:CR 00000001 ABS 1367 MCRLEN EQU 1 1B8AA 0000000A 1368 MESCRLF VFD 8:CR,LF 00000002 ABS 1369 MCRLFLEN EQU 2 1370 1B8AC DD5F8001 6 STAK 1371 OUTCR ENTRNP PUSH 1B8AD 60040042 0 IMM 1372 LD R0 FRWRITEB 1B8AE 60440001 1 IMM 1373 LD R1 MCRLEN get registers for write 1B8AF 6085B8AA 2 IMM 1374 LD R2 ADR(MESCR) just a CR 1B8B0 08840002 IMM 1375 FREQ LUNSOUT+XREQ that's all there is to it! 1B8B1 5D1F8001 6 STAK 1376 LEAVE POP 1377 * --- 1378 1B8B2 DD5F8001 6 STAK 1379 OUTLF ENTRNP PUSH 1B8B3 60040042 0 IMM 1380 LD R0 FRWRITEB 1B8B4 60440001 1 IMM 1381 LD R1 MCRLEN get registers for write 1B8B5 6085B8A9 2 IMM 1382 LD R2 ADR(MESLF) just a LF 1B8B6 08840002 IMM 1383 FREQ LUNSOUT+XREQ that's all there is to it! 1B8B7 5D1F8001 6 STAK 1384 LEAVE POP 1385 * --- 1386 1B8B8 DD5F8001 6 STAK 1387 OUTCRLF ENTRNP PUSH 1B8B9 6005B8AB 0 IMM 1388 LD R0 ADR(MESCRLF) point to message 1B8BA DC41B883 1389 CALLNP OUTB list it out 1B8BB 5D1F8001 6 STAK 1390 LEAVE POP 1391 * --- 1392 1B8BC DD5F8001 6 STAK 1393 CRLF ENTRNP PUSH 1B8BD 60040042 0 IMM 1394 LD R0 FRWRITEB 1B8BE 60440002 1 IMM 1395 LD R1 MCRLFLEN set up for write 1B8BF 6085B8AB 2 IMM 1396 LD R2 ADR(MESCRLF) just a CR LF 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 148 (RDUOSUB) F 16 Output subroutines 1B8C0 08840002 IMM 1397 FREQ LUNSOUT+XREQ there they go!! 1B8C1 5D1F8001 6 STAK 1398 LEAVE POP 1399 * --- 1400 1401 END of OUTCRLF routines 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 149 (RDUOSUB) F 16 Output subroutines 1403 1404 ********************************************************************************** 1405 * * 1406 * This routine puts out a prompt if we are not running in * 1407 * interactive mode. It is used just prior to command input. * 1408 * Eats R0:R2. * 1409 * * 1410 ********************************************************************************** 1411 1412 BLOCK 1413 ENTRY OUTPROMPT 1414 1415 BEGFRAME 1416 ENDFRAME 1417 1B8C2 DD5F8001 6 STAK 1418 OUTPROMPT ENTRNP PUSH 1B8C3 5C01A8D6 1419 CMZ STATE RDU mode or port zero? 1B8C4 FE03B8CA 1420 JEQ PR00 jump if port zero 1B8C5 60040041 0 IMM 1421 LD R0 FRWRITETF RDU mode, output a prompt 1B8C6 60440005 1 IMM 1422 LD R1 PROMPTLEN tell user we are waiting 1B8C7 6085AC0D 2 IMM 1423 LD R2 ADR PROMPT "RDU:" 1B8C8 08840002 IMM 1424 FREQ LUNSOUT+XREQ make the request 1B8C9 DC41CCE5 1425 CALLNP LOGPROMPT Log the stupid prompt 0001B8CA 1426 PR00 LABEL 1B8CA 5D1F8001 6 STAK 1427 LEAVE POP 1428 * --- 1429 1430 END of OUTPROMPT subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 150 (RDUOSUB) F 16 Output subroutines 1432 1433 ********************************************************************************** 1434 * * 1435 * This is the SLOTOUT routine. It is called to output the slot * 1436 * number from SLOT and to fetch the WRU(0) for the slot and * 1437 * display that too. * 1438 * Call: * 1439 * SLOT contains slot number * 1440 * CALLNP SLOTOUT * 1441 * Eats R0:R3. Munches VALUE. * 1442 * * 1443 ********************************************************************************** 1444 1445 BLOCK 1446 ENTRY SLOTOUT 1447 1448 BEGFRAME 00178801 6 BASE 1449 SLTOTEMP BSS2 1 temp for r2 and r3 1450 ENDFRAME 1451 1B8CB DD5F8003 6 STAK 1452 SLOTOUT ENTRNP PUSH 1B8CC DC41B86C 1453 CALLNP BLANKOUTW make a new output line 1B8CD 6001A924 0 1454 LD R0 SLOT get slot to output 1B8CE E401A8ED 0 1455 ST R0 VALUE set up to decode it 1B8CF DC41B605 1456 CALLNP HEXOUTD list the slot number 1B8D0 18C40002 3 IMM 1457 ADD OBP 2 advance line pointer 1B8D1 E6978801 236 BASE 1458 ST2 R2 SP,SLTOTEMP save r2 and r3 from harm 1B8D2 DC01BBAC 1459 CALL SHIPCOM now get the WRU info 1B8D3 4101BBF5 1460 PAR RESPERROR error address 1B8D4 41440000 IMM 1461 PARV KLAS0 class=0 1B8D5 4141A924 1462 PARV SLOT slot=slot 1B8D6 41440004 IMM 1463 PARV BCMWRU bcm=4 (wru) 1B8D7 40440000 IMM 1464 PARVL 0 address=0 1B8D8 6001F38E 0 1465 LD R0 DATA(1) get the wru response 1B8D9 E401A8ED 0 1466 ST R0 VALUE put into value to output 1B8DA 6005CDEC 0 IMM 1467 LD R0 ADR(MESWRU) "Wru:" 1B8DB 62978801 236 BASE 1468 LD2 R2 SP,SLTOTEMP restore r2 and r3 1B8DC DC41B87B 1469 CALLNP MESSMOVE add to the output line 1B8DD DC41B5F1 1470 CALLNP HEXOUT and add in the wru response 1B8DE 5D1F8003 6 STAK 1471 LEAVE POP 1472 * --- 1473 1474 END of SLOTOUT subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 151 (RDUOSUB) F 16 Output subroutines 1476 1477 ********************************************************************************** 1478 * * 1479 * This is the PPSLOTO routine. It is just like SLOTOUT * 1480 * except that it adds the device id for the current ppu port. * 1481 * The slot number is output, then the wru(0), and finally the * 1482 * DID. PPUSLOT should contain the proper slot number, and * 1483 * PPUPORT the port number. * 1484 * * 1485 * Eats R0:R3. Wipes out VALUE and ADDRESS. * 1486 * * 1487 ********************************************************************************** 1488 1489 BLOCK 1490 ENTRY PPSLOTO 1491 1492 BEGFRAME 00178801 6 BASE 1493 PPSOTEMP BSS 1 temp 1494 ENDFRAME 1495 1B8DF DD5F8002 6 STAK 1496 PPSLOTO ENTRNP PUSH 1B8E0 DC41B86C 1497 CALLNP BLANKOUTW make a new line 1B8E1 6001A97E 0 1498 LD R0 PPUSLOT get the slot to use 1B8E2 E401A8ED 0 1499 ST R0 VALUE set to output the thing 1B8E3 DC41B605 1500 CALLNP HEXOUTD list the slot number 1B8E4 18C40001 3 IMM 1501 ADD OBP 1 make room 1B8E5 6001A980 0 1502 LD R0 PPUPORT now get the ppu port number 1B8E6 E401A8ED 0 1503 ST R0 VALUE set to output that 1B8E7 DC41B605 1504 CALLNP HEXOUTD also a single digit 1B8E8 18C40002 3 IMM 1505 ADD OBP 2 advance line pointer 1B8E9 E4D78801 3 6 BASE 1506 ST OBP SP,PPSOTEMP save OBP from harm 1507 1B8EA DC01BBAC 1508 CALL SHIPCOM now get the WRU info 1B8EB 4101BBF5 1509 PAR RESPERROR error address 1B8EC 41440000 IMM 1510 PARV KLAS0 class=0 1B8ED 4141A97E 1511 PARV PPUSLOT slot=ppuslot 1B8EE 41440004 IMM 1512 PARV BCMWRU bcm=4 (wru) 1B8EF 40440000 IMM 1513 PARVL 0 address=0 1B8F0 6001F38E 0 1514 LD R0 DATA(1) get the wru response 1B8F1 E401A8ED 0 1515 ST R0 VALUE put into value to output 1B8F2 6005CDEC 0 IMM 1516 LD R0 ADR(MESWRU) "Wru:" 1B8F3 60D78801 3 6 BASE 1517 LD OBP SP,PPSOTEMP restore buffer pointer 1B8F4 DC41B87B 1518 CALLNP MESSMOVE add to the output line 1B8F5 DC41B5F1 1519 CALLNP HEXOUT and output the wru response 1B8F6 18C40001 3 IMM 1520 ADD OBP 1 make a little elbow room 1B8F7 60440000 1 IMM 1521 LD R1 0 now to get the device id 1B8F8 6001A980 0 1522 LD R0 PPUPORT get the port number to use 1B8F9 E40A5840 0 1 CBM 1523 ST R0 R1/PORTSPOT set up address to read from 1B8FA E441A91F 1 1524 ST R1 ADDRESS now we can fetch our info 1B8FB E4D78801 3 6 BASE 1525 ST OBP SP,PPSOTEMP save OBP again 1B8FC DC01BBAC 1526 CALL SHIPCOM send out the read request 1B8FD 4101BBF5 1527 PAR RESPERROR error address 1B8FE 41440000 IMM 1528 PARV KLAS0 class=0 1B8FF 4141A97E 1529 PARV PPUSLOT slot=ppuslot 1B900 41440002 IMM 1530 PARV BCMREAD bcm=2 1B901 4041A91F 1531 PARVL ADDRESS address=address 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 152 (RDUOSUB) F 16 Output subroutines 1B902 6001F38E 0 1532 LD R0 DATA(1) get the did response 1B903 E401A8ED 0 1533 ST R0 VALUE ready to output 1B904 6005CE49 0 IMM 1534 LD R0 ADR(MGPDI) "Did:" 1B905 60D78801 3 6 BASE 1535 LD OBP SP,PPSOTEMP restore buffer pointer 1B906 DC41B87B 1536 CALLNP MESSMOVE add to the line 1B907 DC41B5F1 1537 CALLNP HEXOUT and finish up with the data 1B908 5D1F8002 6 STAK 1538 LEAVE POP 1539 * --- 1540 1541 END of PPSLOTO subroutine 133 134 INPUT RDUSYMB 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 153 (RDUSYMB) F 18 Symbol info support subroutines 3 4 ********************************************************************************** 5 * * 6 * This routine is called to input the source ident, subroutine, * 7 * and symbol information. It is called when the Debugger is first * 8 * entered or when the user requests a new program be loaded. The * 9 * symbol lists are initialized so that if no information is avail- * 10 * able, the lists will operate with only our internal symbols. If * 11 * more info is present, it will be brought in and the correct lists * 12 * built for later traversing. * 13 * * 14 ********************************************************************************** 15 0001B909 16 SUSTAK BASE SP stack area 17 BSS 1 return address 00178801 6 BASE 18 SUTMP BSS 2 temp for R2,R3 19 DRCT 00000003 ABS 20 SUSS EQU DISPW SUSTAK 21 ORG SUSTAK 22 1B909 DD5F8003 6 STAK 23 SETUP ENTRNP STAK SP,SUSS 1B90A 3941A986 5 24 LEA SUB TREETOP point to our symbols block 1B90B EC174800 5 BASE 25 STZ SUB,SUBFPTR zap the father 1B90C EC174802 5 BASE 26 STZ SUB,SUBSPTR the son 1B90D EC174801 5 BASE 27 STZ SUB,SUBBPTR and the holy ghost 28 * 29 * Zap some stuff in case we are using the new format. 30 * 1B90E 6145AAC8 5 IMM 31 LD SUB ADR NEWTREEHED top of tree 1B90F EC174800 5 BASE 32 STZ SUB,NEWDADPTR bye daddy 1B910 EC174801 5 BASE 33 STZ SUB,NEWBROPTR bye bro' 1B911 EC174802 5 BASE 34 STZ SUB,NEWSONPTR bye kids !! 1B912 5C01A919 35 CMZ AUXLUN do we have a symbols lun? 1B913 FE09B97E 36 JLT SUEXIT bail out now if not 37 * \ / 1B914 60040090 0 IMM 38 LD R0 FRPOSITION be sure our info is there 1B915 60420010 1 IMM 39 LD R1 DBDSKPAGE*WPP*NCPW get byte address 1B916 0881A919 40 FREQ AUXLUN(XREQ) see what lies in store 1B917 FA09B97E 0 41 JLTZ R0 SUEXIT exit if problems 1B918 FA43B97E 1 42 JEQZ R1 SUEXIT or if no data 1B919 60040030 0 IMM 43 LD R0 FRREAD now get control info 1B91A 6044005C 1 IMM 44 LD R1 NEWCNTRLLN*NCPW size of area 1B91B 6085AAA9 2 IMM 45 LD R2 ADR NEWCONTROL and place to read into 1B91C 0881A919 46 FREQ AUXLUN(XREQ) slurp it up 1B91D FA09B983 0 47 JLTZ R0 SU910 jump if an error 1B91E FA4DB983 1 48 JNEZ R1 SU910 or if funny length 49 * 50 * Now see if it is the old or new format and make a break for it. 51 * 1B91F 6001AAAD 0 52 LD R0 NEWFORMAT get the word that is supposed to tell 1B920 64040001 0 IMM 53 CPR R0 NEWFORMCOD see if it is the new format 1B921 FE03BB19 54 JEQ USENEWSTUF jump if it is new 55 * \ / 1B922 6145A986 5 IMM 56 LD SUB ADR TREETOP reset to old format 1B923 EC01AAC0 57 STZ USINGNEW say it is the old format 58 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 154 (RDUSYMB) F 18 Symbol info support subroutines 1B924 D1528000 2 REG 59 STMW R2 our memory page to start at 1B925 E4978801 2 6 BASE 60 ST R2 SP,SUTMP save current mem page num 1B926 6101AAAC 4 61 LD R4 SYMTOP get top byte of syms 1B927 15041000 4 IMM 62 DIV R4 NCPW*WPP pick up page number 1B928 60C1AAAB 3 63 LD R3 SYMSTRT get first byte of syms 1B929 14C41000 3 IMM 64 DIV R3 NCPW*WPP convert to page number 1B92A 64D24000 3 1 REG 65 CPR R3 R1 is it the same as last read? 1B92B FE03B932 66 JEQ SU50 if so then advance to next 67 * \ / 68 1B92C 6052C000 1 3 REG 69 LD R1 R3 else start at that page 1B92D 18840001 2 IMM 70 ADD R2 1 need next memory page 1B92E E4978801 2 6 BASE 71 ST R2 SP,SUTMP and remember start page 0001B92F 72 SU40 LABEL 1B92F 60040094 0 IMM 73 LD R0 FRMAPINOC now to map in a page 1B930 0881A919 74 FREQ AUXLUN(XREQ) bring it in 1B931 FA09B983 0 75 JLTZ R0 SU910 jump if any problems 76 * \ / 77 0001B932 78 SU50 LABEL 1B932 18840001 2 IMM 79 ADD R2 1 advance to next memory page 1B933 64840061 2 IMM 80 CPR R2 BOTTOM out of memory? 1B934 FE07B981 81 JGE SU900 if so then no where to go 82 * \ / 83 1B935 18440001 1 IMM 84 ADD R1 1 advance disk page number 1B936 64530000 1 4 REG 85 CPR R1 R4 done yet? 1B937 FE0BB92F 86 JLE SU40 loop back if not 1B938 60C1AAAB 3 87 LD R3 SYMSTRT done mapping, get start byte 1B939 14C40004 3 IMM 88 DIV R3 NCPW convert address to words 1B93A 78C403FF 3 IMM 89 AND R3 WPP-1 get just offset within page 1B93B 60178801 0 6 BASE 90 LD R0 SP,SUTMP get first memory page number 1B93C 1C040400 0 IMM 91 MUL R0 WPP convert to word address 1B93D 18D20000 3 0 REG 92 ADD R3 R0 and bias to that page 1B93E 6016C800 0 3 BASE 93 LD R0 R3,0 get start of global block 1B93F FA03B97E 0 94 JEQZ R0 SUEXIT exit if no info 1B940 1001AAAB 0 95 SUB R0 SYMSTRT unbias from disk address 1B941 14040004 0 IMM 96 DIV R0 NCPW convert from disk address 1B942 1812C000 0 3 REG 97 ADD R0 R3 rebias to our core address 1B943 6145A986 5 IMM 98 LD SUB ADR(TREETOP) point to our own symbol info 1B944 E4174802 0 5 BASE 99 ST R0 SUB,SUBSPTR save pointer to son 1B945 E4134000 0 5 REG 100 ST R0 SUB and then move down to new block 1B946 6096C801 2 3 BASE 101 LD R2 R3,1 get the last location 1B947 1081AAAB 2 102 SUB R2 SYMSTRT unbias from disk address 1B948 14840004 2 IMM 103 DIV R2 NCPW this is a big pain!! 1B949 1892C000 2 3 REG 104 ADD R2 R3 rebias for core address 0001B94A 105 SU70 LABEL 1B94A 39174807 4 5 BASE 106 LEA SYM SUB,SUBSBLK assume a short block 1B94B 19095834 4 5 ZBM 107 ADD SYM SUB,SUBNAMEL bias for name length 1B94C 6017400C 0 5 CACH 108 LD R0 SUB,SUBLEVEL check the lexical level 1B94D 64040001 0 IMM 109 CPR R0 1 are we at level 0 or 1? 1B94E FE05B953 110 JGT SU75 if not then go get symbols 1B94F EC094014 5 ZBM 111 STZ SUB,SUBDBSRC say no source exists 1B950 EC094214 5 ZBM 112 STZ SUB,SUBSRCLST say we don't want any listed 1B951 3917480B 4 5 BASE 113 LEA SYM SUB,SUBBLK point to the symbol info 1B952 19095834 4 5 ZBM 114 ADD SYM SUB,SUBNAMEL bias for program name length 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 155 (RDUSYMB) F 18 Symbol info support subroutines 0001B953 115 SU75 LABEL 1B953 65128000 4 2 REG 116 CPR SYM R2 are there any symbols at all??? 1B954 ED094414 5 ZBM 117 STLLT SUB,SUBSYMS remember the answer 1B955 FE07B95D 118 JGE SU95 jump out not 0001B956 119 SU80 LABEL 1B956 60491F10 1 4 ZBM 120 LD R1 SYM,SYMLEN now get this block's length 1B957 18530000 1 4 REG 121 ADD R1 SYM make a pointer to next 1B958 64528000 1 2 REG 122 CPR R1 R2 is this the last? 1B959 FE07B95C 123 JGE SU90 jump if so - done!! 1B95A E4491F10 1 4 ZBM 124 ST R1 SYM,SYMPTR else link into list 1B95B FB37B956 4 125 LJNA SYM SU80 and cycle around 126 * --- 127 0001B95C 128 SU90 LABEL 1B95C EC091F10 4 ZBM 129 STZ SYM,SYMPTR make this list end 0001B95D 130 SU95 LABEL 1B95D E5528000 5 2 REG 131 ST SUB R2 advance our cut-off pointer 1B95E 6001AAAB 0 132 LD R0 SYMSTRT get disk base address 1B95F 60440004 1 IMM 133 LD R1 NCPW prepare for division 1B960 5C174800 5 BASE 134 CMZ SUB,SUBFPTR does this guy have a daddy??? 1B961 FE03B965 135 JEQ SU100 jump if non-pointer 136 * \ / 137 1B962 B0174800 0 5 BASE 138 RSBM R0 SUB,SUBFPTR unbias the father pointer 1B963 B4574800 1 5 BASE 139 RDVM R1 SUB,SUBFPTR finish the job 1B964 98D74800 3 5 BASE 140 ADDM R3 SUB,SUBFPTR rebias to our base core address 0001B965 141 SU100 LABEL 1B965 5C174801 5 BASE 142 CMZ SUB,SUBBPTR is this guy an only child? 1B966 FE03B96A 143 JEQ SU110 144 * \ / 145 1B967 B0174801 0 5 BASE 146 RSBM R0 SUB,SUBBPTR do same thing for brother ptr 1B968 B4574801 1 5 BASE 147 RDVM R1 SUB,SUBBPTR get completely clean 1B969 98D74801 3 5 BASE 148 ADDM R3 SUB,SUBBPTR rebias 0001B96A 149 SU110 LABEL 1B96A 5C174802 5 BASE 150 CMZ SUB,SUBSPTR is there an offspring? 1B96B FE03B971 151 JEQ SU120 1B96C B0174802 0 5 BASE 152 RSBM R0 SUB,SUBSPTR now convert the son 1B96D B4574802 1 5 BASE 153 RDVM R1 SUB,SUBSPTR complete the clean-up 1B96E 98D74802 3 5 BASE 154 ADDM R3 SUB,SUBSPTR 1B96F 61574802 5 5 BASE 155 LD SUB SUB,SUBSPTR if son exists, play with him next 1B970 FE0FB94A 156 JMP SU70 head on back around 157 * --- 158 0001B971 159 SU120 LABEL 1B971 5C174801 5 BASE 160 CMZ SUB,SUBBPTR is there a brother? 1B972 FE03B975 161 JEQ SU130 jump if not 1B973 61574801 5 5 BASE 162 LD SUB SUB,SUBBPTR if so, then fix him up next 1B974 FE0FB94A 163 JMP SU70 164 * --- 165 0001B975 166 SU130 LABEL 1B975 5C174800 5 BASE 167 CMZ SUB,SUBFPTR is this guy an orphan?? 1B976 FE03B97C 168 JEQ SU140 then go give him a dad 1B977 61574800 5 5 BASE 169 LD SUB SUB,SUBFPTR no son or brother, back up some 1B978 5C174801 5 BASE 170 CMZ SUB,SUBBPTR does father have a brother? 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 156 (RDUSYMB) F 18 Symbol info support subroutines 1B979 FE03B975 171 JEQ SU130 jump if not 1B97A 61574801 5 5 BASE 172 LD SUB SUB,SUBBPTR else fix up his brother next 1B97B FE0FB94A 173 JMP SU70 174 * --- 175 0001B97C 176 SU140 LABEL 1B97C 6005A986 0 IMM 177 LD R0 ADR(TREETOP) point to our own symbols 1B97D E4174800 0 5 BASE 178 ST R0 SUB,SUBFPTR give our last guy a father 0001B97E 179 SUEXIT LABEL 1B97E 6145A986 5 IMM 180 LD SUB ADR(TREETOP) point to head of symbols 1B97F E541A928 5 181 ST SUB SUBPC remember our tree-house 0001B980 182 SUEXIT2 LABEL 1B980 5D1F8003 6 STAK 183 LEAVE STAK SP,SUSS return from this madness 184 * --- 185 0001B981 186 SU900 LABEL 1B981 6005D312 0 IMM 187 LD R0 ADR(ERM600) "Too many symbols for Debugger" 1B982 FE0FBE35 188 JMP RDUERR 189 * --- 190 0001B983 191 SU910 LABEL 1B983 6005D31B 0 IMM 192 LD R0 ADR(ERM601) "Bad block in symbol information" 1B984 FE0FBE35 193 JMP RDUERR 194 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 157 (RDUSYMB) F 18 Symbol info support subroutines 196 197 ********************************************************************************** 198 * * 199 * This is the SYMGET routine. It is called to fetch * 200 * a symbol from the input line and look it up in the * 201 * symbol tables. It returns pointers to the symbol * 202 * block found or an error code. * 203 * It calls SYMSCAN to search for the symbol in the * 204 * current subprogram block, or SYMLOOK if the user * 205 * specifies a particular subprogram which is located * 206 * with the SUBLOOK routine. * 207 * Call: * 208 * BUFPT -> input buffer * 209 * CALLNP SYMGET * 210 * JNEZ R0 symbol not found, R0 -> error message * 211 * R2 contains FI code. * 212 * Returns: SYM pointing to symbol entry if found * 213 * SUB pointing to subprogram block symbol is in * 214 * Eats R0:R5. * 215 * * 216 ********************************************************************************** 217 218 1B985 DD5F8001 6 STAK 219 SYMGET ENTRNP STAK SP,1 1B986 6141A928 5 220 LD SUB SUBPC start with current subprogram 1B987 DC41B33C 221 CALLNP FETCHAP go pick up symbol from line 1B988 F2AFB9A0 2 222 JBF R2/TALPH SG92 jump if not alpha symbol 223 * 224 * Set SUB with the proper tree head pointer. If using the new 225 * format the point to NEWTREEHED else point to TREETOP for the 226 * old format. 227 * 1B989 6145A986 5 IMM 228 LD SUB ADR(TREETOP) point to our whole tree 1B98A 5C01AAC0 229 CMZ USINGNEW new format ?? 1B98B FE03B98D 230 JEQ NEWSG05 skip over next load if not 231 * \ / 1B98C 6145AAC8 5 IMM 232 LD SUB ADR NEWTREEHED point to entire tree 0001B98D 233 NEWSG05 LABEL 1B98D 6444003A 1 IMM 234 CPR R1 COLON is terminator a colon? 1B98E FE0DB99A 235 JNE SG40 if not, then this is symbol name 236 * \ / 237 0001B98F 238 SG10 LABEL 1B98F DC41B9F5 239 CALLNP SUBLOOKS look for the subprogram name 1B990 FB43B99E 5 240 JEQZ SUB SG91 or at least it was supposed to be 1B991 DC41B39C 241 CALLNP GETCHAR skip past the colon 1B992 DC41B33C 242 CALLNP FETCHAP now get the symbol 1B993 F2AFB9A3 2 243 JBF R2/TALPH SG93 this is subject to same limits 1B994 6444003A 1 IMM 244 CPR R1 COLON is this also a subprogram? 1B995 FE03B98F 245 JEQ SG10 if so then go 'round again 1B996 DC41B9B5 246 CALLNP SYMLOOK see if symbol exists for this 1B997 FB03B99C 4 247 JEQZ SYM SG90 jump if symbol not found 0001B998 248 SG20 LABEL 1B998 60040000 0 IMM 249 LD R0 0 say we have no error 0001B999 250 SGEXIT LABEL 1B999 5D1F8001 6 STAK 251 LEAVE STAK SP,1 and exit from this dump 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 158 (RDUSYMB) F 18 Symbol info support subroutines 252 * --- 253 0001B99A 254 SG40 LABEL 1B99A DC41BA46 255 CALLNP SYMSCAN see if we can locate this symbol 1B99B FB0DB998 4 256 JNEZ SYM SG20 jump if we found it!! 0001B99C 257 SG90 LABEL 1B99C 6005D322 0 IMM 258 LD R0 ADR ERM700 "Symbol not found" 1B99D FE0FB9A4 259 JMP SG95 260 * --- 261 0001B99E 262 SG91 LABEL 1B99E 6005D33D 0 IMM 263 LD R0 ADR ERM704 "Subprogram not found" 1B99F FE0FB9A4 264 JMP SG95 265 * --- 266 0001B9A0 267 SG92 LABEL 1B9A0 60840200 2 IMM 268 LD R2 1*TNUM pretend may have a number 1B9A1 6005D32E 0 IMM 269 LD R0 ADR ERM702 "Expecting symbol name" 1B9A2 FE0FB999 270 JMP SGEXIT 271 * --- 272 0001B9A3 273 SG93 LABEL 1B9A3 6005D32E 0 IMM 274 LD R0 ADR ERM702 "Expecting symbol name" 0001B9A4 275 SG95 LABEL 1B9A4 60840000 2 IMM 276 LD R2 1*TERR this time it's a real error 1B9A5 FE0FB999 277 JMP SGEXIT 278 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 159 (RDUSYMB) F 18 Symbol info support subroutines 280 281 ********************************************************************************** 282 * * 283 * This is the SYMSET routine. It is called with the * 284 * subprogram block pointer set up pointing to a block * 285 * which is to have its symbol list searched. This routine * 286 * determines if the subprogram block is a big or little * 287 * one and sets up the SYM pointer accordingly. It also * 288 * checks for an empty symbols list, and returns SYM = 0 * 289 * if that is the case. * 290 * * 291 * For the new format, all we must do is obtain the pointer * 292 * from the current subprogram block pointed to by SUB. * 293 * * 294 * * 295 * Eats R0, sets R4. * 296 * NOTE: R2 must be set to entry value on exit. * 297 * * 298 ********************************************************************************** 299 300 1B9A6 DD5F8001 6 STAK 301 SYMSET ENTRNP STAK SP,1 302 * 303 * If using new format then go set SYM our own way. 304 * 1B9A7 5C01AAC0 305 CMZ USINGNEW new format ?? 1B9A8 FE0DB9B3 306 JNE NEWSYMSET yep, go to it 307 * \ / 308 * 309 * Use old format. 310 * 1B9A9 61040000 4 IMM 311 LD SYM 0 preset SYM pointer 1B9AA 5C094414 5 ZBM 312 CMZ SUB,SUBSYMS be sure there are symbols 1B9AB FE03B9B2 313 JEQ SYMSEXIT jump if no symbols 314 * \ / 315 1B9AC 3917480B 4 5 BASE 316 LEA SYM SUB,SUBBLK pretend we have a normal block 1B9AD 6017400C 0 5 CACH 317 LD R0 SUB,SUBLEVEL now check the level 1B9AE 64040001 0 IMM 318 CPR R0 1 levels 0 and 1 are bigger 1B9AF FE0BB9B1 319 JLE SYMS10 exit if guess was correct 1B9B0 39174807 4 5 BASE 320 LEA SYM SUB,SUBSBLK else change our mind 0001B9B1 321 SYMS10 LABEL 1B9B1 19095834 4 5 ZBM 322 ADD SYM SUB,SUBNAMEL bias for size of name 0001B9B2 323 SYMSEXIT LABEL 1B9B2 5D1F8001 6 STAK 324 LEAVE STAK SP,1 and return to caller 325 * --- 326 * 327 * All we need to do with the new format is grab the symbol pointer 328 * from the current subprogram block pointed to by SUB. If there are 329 * no symbols, the pointer will be nil (0). 330 * 0001B9B3 331 NEWSYMSET LABEL 1B9B3 61174803 4 5 BASE 332 LD SYM SUB,NEWSYMPTR grab it 1B9B4 FE0FB9B2 333 JMP SYMSEXIT and return 334 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 160 (RDUSYMB) F 18 Symbol info support subroutines 336 337 ********************************************************************************** 338 * * 339 * This is the SYMLOOK subroutine. It is called to search * 340 * the symbol table of the user-routine pointne to by SUB * 341 * looking for a symbol which matches that in SBUFF. If * 342 * found, SYM will be returned pointing to the block that * 343 * matches. If no match is found, SYM will be 0. * 344 * * 345 * The code for the new format must convert the ASCII symbol * 346 * to the special packed format and then search for a match. * 347 * The symbol list must be searched using the RELSH instruction * 348 * instead of the LSRCH instruction. * 349 * * 350 * Eats R0:R1, sets R4. * 351 * * 352 * NOTE: R2 and R3 must be restored to entry values on exit. * 353 * * 354 ********************************************************************************** 355 356 BLOCK 357 358 ENTRY SYMLOOK 359 360 BEGFRAME 00178801 6 BASE 361 SYMLR2SAVE BSS 2 just what it says, saves R2,R3 00178803 6 BASE 362 RELLINK BSS 1 relative link 00178804 6 BASE 363 SYMLLENGTH BSS 1 length word for compare 364 ENDFRAME 365 1B9B5 DD5F8005 6 STAK 366 SYMLOOK ENTRNP PUSH set stack frame 1B9B6 DC41B9A6 367 CALLNP SYMSET set up symbol list pointer 1B9B7 E6978801 236 BASE 368 ST2 R2 SP,SYMLR2SAVE save them both 369 * 370 * If using the new format then we must search very differently. 371 * 1B9B8 5C01AAC0 372 CMZ USINGNEW new format ?? 1B9B9 FE0DB9C9 373 JNE NEWSYML10 yes, go to it 374 * \ / 375 * 376 * Search the old way. 377 * 0001B9BA 378 SYML10 LABEL 1B9BA 6001A830 0 379 LD R0 SBUFFW get first word of symbol to find 1B9BB 3C170802 0 4 BASE 380 LSRCH R0 SYM,SYMNAME give it a go 1B9BC FE0DB9C5 381 JNE SYMLEXIT jump if not a match 382 * \ / 383 384 * The first part of the name is a match. Check the rest of it. 1B9BD 60490630 1 4 ZBM 385 LD R1 SYM,SYMNAMEL get length of name 1B9BE 6441A8EB 1 386 CPR R1 SBL is it the same length? 1B9BF FE0DB9C7 387 JNE SYML40 jump if not - move on 1B9C0 FA43B9C5 1 388 JEQZ R1 SYMLEXIT if one word then all done!!! 0001B9C1 389 SYML20 LABEL 1B9C1 601D0802 0 41 BASE 390 LD R0 SYM,SYMNAME(R1) get a word of the name 1B9C2 6423A830 0 1 391 CPR R0 SBUFFW(R1) how does it match what we want? 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 161 (RDUSYMB) F 18 Symbol info support subroutines 1B9C3 FE0DB9C7 392 JNE SYML40 move along if not perfect 1B9C4 FA67B9C1 1 393 JDR R1 SYML20 continue the compare if ok so far 394 * \ / 395 0001B9C5 396 SYMLEXIT LABEL 1B9C5 62978801 236 BASE 397 LD2 R2 SP,SYMLR2SAVE reset them both 1B9C6 5D1F8005 6 STAK 398 LEAVE POP return home 399 * --- 400 0001B9C7 401 SYML40 LABEL 1B9C7 FB37B9BA 4 402 LJNA SYM SYML10 advance to next and go try again 1B9C8 FE0FB9C5 403 JMP SYMLEXIT sorry about that 404 * --- 405 ********************************************************************************** 406 * * 407 * The symbol tree is linked together using relative links from the * 408 * beginning of the first block. However, since 0 is a nil pointer, * 409 * the very first location (the real zeroeth one) is considered to * 410 * be location 1. There is a special instruction, RELSH, to search * 411 * lists of this type. The rest of the comments will step through * 412 * the details of the process. * 413 * * 414 ********************************************************************************** 415 * 416 * First we convert the ASCII symbol to the special packed format 417 * 0001B9C9 418 NEWSYML10 LABEL start here 1B9C9 6001A8EB 0 419 LD R0 SBL symbol length in words - 1 1B9CA 18040001 0 IMM 420 ADD R0 1 symbol length in words 1B9CB 1C040004 0 IMM 421 MUL R0 CPW turn into characters 1B9CC 50040020 0 IMM 422 MIN R0 MAXSYMCHRS make sure we didn't get too big 1B9CD 6045A830 1 IMM 423 LD R1 ADR SBUFFW the ASCII buffer 1B9CE 38564000 1 1 CACH 424 LEA R1 CACH R1,0 character address of the ASCII buffer 1B9CF DC01BB7E 425 CALL ASCII2PAKD ask nicely for the conversion 1B9D0 41520000 0 REG 426 PARV R0 pass the length 1B9D1 40524000 1 REG 427 PARVL R1 pass the character address 428 * 429 * Calculate the number of words needed to hold this symbol in the 430 * packed form and save the answer for later. 431 * 1B9D2 6041AA98 1 432 LD R1 SRCHBUFLN number of packed characters 1B9D3 1C440006 1 IMM 433 MUL R1 PAKCHRBITS make the number of total bits needed 1B9D4 60040000 0 IMM 434 LD R0 0 zap front word for divide 1B9D5 58C40010 IMM 435 IORPSR MODIFBIT say we want funny math 1B9D6 14040020 0 IMM 436 DIV R0 NBPW divide by bits per word 1B9D7 58440010 IMM 437 XORPSR MODIFBIT normallicy returns 1B9D8 FA43B9DA 1 438 JEQZ R1 SYMXACTFIT no remainder 439 * \ / 1B9D9 60161001 0 0 REG 440 LD R0 R0+1 we need an extra full word 0001B9DA 441 SYMXACTFIT LABEL 1B9DA E4178804 0 6 BASE 442 ST R0 SP,SYMLLENGTH save it for later fun 443 * 444 * Now we shall search for the first character being a match. Note 445 * the RELSH instruction needs the base address to be 1 less than the 446 * real base address because the first entry is location 1 and not 447 * location 0. This is because 0 is still the indication of a list 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 162 (RDUSYMB) F 18 Symbol info support subroutines 448 * end (the nil relative pointer). Note that R3 is zapped by the 449 * RELSH instruction if we use R2 as our offset register. 450 * 1B9DB 60840001 2 IMM 451 LD R2 1 the first location 0001B9DC 452 LOOK4MATCH LABEL 1B9DC 60174803 0 5 BASE 453 LD R0 SUB,NEWSYMPTR real base address of symbol list 1B9DD 10040001 0 IMM 454 SUB R0 1 bias it down for the RELSH instruction 1B9DE 6051AA9A 1 @ 455 LD R1 @SRCHBUFFPT get the first character 1B9DF 5D888064 2 ZBM 456 RELSH R2,NEWSYMNAME go !! 1B9E0 FA83B9F3 2 457 JEQZ R2 NOMATCH if nil pointer then we didn't find anything !! 458 * \ / 459 * 460 * We have a candidate, the first chars match. Next see if the 461 * length in words to hold these symbols is the same. If not 462 * then go to the next symbol (if any). If so then do a string 463 * compare to obtain the real answer 464 * 1B9E1 E4978803 2 6 BASE 465 ST R2 SP,RELLINK save the register for awhile 1B9E2 18920000 2 0 REG 466 ADD R2 R0 make the real address of the current block 1B9E3 60088061 0 2 ZBM 467 LD R0 R2,NEWSYMNAMEL get length of symbol in words, cannot be 0 1B9E4 10040001 0 IMM 468 SUB R0 1 bias down to skip case word 1B9E5 64178804 0 6 BASE 469 CPR R0 SP,SYMLLENGTH match what we computed ?? 1B9E6 FE0DB9EB 470 JNE SYMLBAIL if not then bail out now, they cannot match 471 * \ / 1B9E7 1C040004 0 IMM 472 MUL R0 CPW make a character count 1B9E8 6045AA92 1 IMM 473 LD R1 ADR SRCHBUFF address of symbol we are looking for 1B9E9 38888064 2 2 ZBM 474 LEA R2 R2,NEWSYMNAME address of symbol we are looking at 1B9EA DA508000 1 20 475 CMSTR R1 R2 R0 compare 'em 0001B9EB 476 SYMLBAIL LABEL 1B9EB 61178803 4 6 BASE 477 LD SYM SP,RELLINK get the relative link 1B9EC 19174803 4 5 BASE 478 ADD SYM SUB,NEWSYMPTR add to base 1B9ED 11040001 4 IMM 479 SUB SYM 1 bias it back 1B9EE FA03B9C5 0 480 JEQZ R0 SYMLEXIT if R0 is 0 then the compare worked 481 * \ / 482 * 483 * This is not the name we want. Get the next relative link and 484 * jump back into the main loop. 485 * 1B9EF 61091F10 4 4 ZBM 486 LD SYM SYM,NEWNEXTSYM get the sucker 1B9F0 FB03B9C5 4 487 JEQZ SYM SYMLEXIT nil pointer, we are done 488 * \ / 1B9F1 60930000 2 4 REG 489 LD R2 SYM put new offset into useable register 1B9F2 FE0FB9DC 490 JMP LOOK4MATCH and go look at some more 491 * --- 492 * 493 * The RELSH instruction found no matches 494 * 0001B9F3 495 NOMATCH LABEL 1B9F3 61040000 4 IMM 496 LD SYM 0 zap the pointer 1B9F4 FE0FB9C5 497 JMP SYMLEXIT and leave now 498 * --- 499 500 END 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 163 (RDUSYMB) F 18 Symbol info support subroutines 502 503 ********************************************************************************** 504 * * 505 * The SUBLOOKS entry is used for successive calls which * 506 * must have SUB pointing to a tree node which is to serve as the * 507 * top of a sub-program tree. We look for a match with the * 508 * symbol in SBUFF. If a match is found, SUB is returned * 509 * pointing to the matching subprogram block. If no match is * 510 * found, SUB is returned with 0. * 511 * * 512 * Eats R0:R2. * 513 * * 514 ********************************************************************************** 515 516 BLOCK 517 518 ENTRY SUBLOOKS 519 520 BEGFRAME 00178801 6 BASE 521 TOPNODE BSS 1 top node of tree we are searching 00178802 6 BASE 522 SUBLENGTH BSS 1 length word for compare 523 ENDFRAME 524 1B9F5 DD5F8003 6 STAK 525 SUBLOOKS ENTRNP PUSH look again from current SUB 526 * 527 * Just as we must look for symbols differently, we must search 528 * for subprogram blocks differently if we are using the new format. 529 * 1B9F6 5C01AAC0 530 CMZ USINGNEW new format ?? 1B9F7 FE0DBA05 531 JNE NEWSUBLOOK si, go do it 532 * \ / 533 * 534 * Using the old format. 535 * 1B9F8 60934000 2 5 REG 536 LD R2 SUB save top node of tree 0001B9F9 537 SUBL10 LABEL 1B9F9 60495834 1 5 ZBM 538 LD R1 SUB,SUBNAMEL first be sure length is same 1B9FA 6441A8EB 1 539 CPR R1 SBL same length? 1B9FB FE0DBA01 540 JNE SUBL40 if not then forget it 0001B9FC 541 SUBL20 LABEL 1B9FC 601D4806 0 51 BASE 542 LD R0 SUB,SUBNAME(R1) get part of name 1B9FD 6423A830 0 1 543 CPR R0 SBUFFW(R1) does it match user input? 1B9FE FE0DBA01 544 JNE SUBL40 if not then try another 1B9FF FA67B9FC 1 545 JDR R1 SUBL20 verify entire name 546 * \ / 547 1BA00 5D1F8003 6 STAK 548 LEAVE POP return our report 549 * --- 550 0001BA01 551 SUBL40 LABEL 1BA01 DC01BA27 552 CALL SUBNEXT advance to next subprogram 1BA02 40528000 2 REG 553 PARVL R2 pass limiting node 1BA03 FB4DB9F9 5 554 JNEZ SUB SUBL10 see if there is one 555 * \ / 0001BA04 556 SUBLEXIT LABEL 1BA04 5D1F8003 6 STAK 557 LEAVE POP else return bad news 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 164 (RDUSYMB) F 18 Symbol info support subroutines 558 * --- 559 ********************************************************************************** 560 * * 561 * Here we are seaching through the subprogram tree structure for * 562 * the subprogram that we want. We call SUBNEXT to get the next * 563 * subprogram for us. Look until we find one or run out of them. * 564 * * 565 ********************************************************************************** 566 * 567 * First convert the ASCII buffer to the special packed format 568 * and then compare to the current subprogram name. If no match 569 * is found then call to get the next subprogram and try again. 570 * 0001BA05 571 NEWSUBLOOK LABEL start here 572 * 573 * Convert the ASCII buffer to packed format 574 * 1BA05 E5578801 5 6 BASE 575 ST SUB SP,TOPNODE save this for awhile 1BA06 6001A8EB 0 576 LD R0 SBL length of ASCII symbol in words - 1 1BA07 60161001 0 0 REG 577 LD R0 R0+1 length of ASCII symbol in words 1BA08 1C040004 0 IMM 578 MUL R0 CPW characters to convert 1BA09 50040020 0 IMM 579 MIN R0 MAXSYMCHRS make sure we didn't get too big 1BA0A 6045A830 1 IMM 580 LD R1 ADR SBUFFW word address of ASCII buffer 1BA0B 38564000 1 1 CACH 581 LEA R1 CACH R1,0 make a character pointer out of it 1BA0C DC01BB7E 582 CALL ASCII2PAKD go convert it 1BA0D 41520000 0 REG 583 PARV R0 convert this many chars 1BA0E 40524000 1 REG 584 PARVL R1 from this buffer 585 * 586 * Now compute the length in words that the packed subprogram 587 * name will need and save for a later compare. 588 * 1BA0F 6041AA98 1 589 LD R1 SRCHBUFLN get length in packed chars 1BA10 1C440006 1 IMM 590 MUL R1 PAKCHRBITS make into bits 1BA11 60040000 0 IMM 591 LD R0 0 ready for divide 1BA12 58C40010 IMM 592 IORPSR MODIFBIT set funny math 1BA13 14040020 0 IMM 593 DIV R0 NBPW divide by bits per word 1BA14 58440010 IMM 594 XORPSR MODIFBIT normallicy returns 1BA15 FA43BA17 1 595 JEQZ R1 SUBXACTFIT exactly correct 596 * \ / 1BA16 60161001 0 0 REG 597 LD R0 R0+1 remainder so add another whole word 0001BA17 598 SUBXACTFIT LABEL 1BA17 E4178802 0 6 BASE 599 ST R0 SP,SUBLENGTH save it 600 * 601 * The loop that compares 602 * 603 * \ / 0001BA18 604 NEWSUBL10 LABEL 605 * 606 * We have a possible match. First check for equal word lengths. 607 * If words lengths are unequal then bail out with no match. 608 * If they are equal then do a string compare to see if they really 609 * are identical and then take the proper action in either case. 610 * 1BA18 60094038 0 5 ZBM 611 LD R0 SUB,NEWNAMELEN get length of name 1BA19 FA03BA22 0 612 JEQZ R0 SUBLBAIL no name for this subprogram 613 * \ / 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 165 (RDUSYMB) F 18 Symbol info support subroutines 1BA1A 10040001 0 IMM 614 SUB R0 1 bias down to skip case word 1BA1B 64178802 0 6 BASE 615 CPR R0 SP,SUBLENGTH matching lengths ?? 1BA1C FE0DBA22 616 JNE SUBLBAIL no, cannot be a match 617 * \ / 1BA1D 1C040004 0 IMM 618 MUL R0 CPW make a byte count 1BA1E 6045AA92 1 IMM 619 LD R1 ADR SRCHBUFF address of packed symbol we are looking for 1BA1F 3889406A 2 5 ZBM 620 LEA R2 SUB,NEWSUBNAME address of packed name we are looking at 1BA20 DA508000 1 20 621 CMSTR R1 R2 R0 compare 'em 1BA21 FE03BA04 622 JEQ SUBLEXIT 623 * \ / 0001BA22 624 SUBLBAIL LABEL 1BA22 60178801 0 6 BASE 625 LD R0 SP,TOPNODE top of it all 1BA23 DC01BA27 626 CALL SUBNEXT next !! 1BA24 40520000 0 REG 627 PARVL R0 but don't go above here looking 1BA25 FB4DBA18 5 628 JNEZ SUB NEWSUBL10 if we found another then go check it out 629 * \ / 1BA26 FE0FBA04 630 JMP SUBLEXIT if we found no more then say goodbye 631 * --- 632 633 END 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 166 (RDUSYMB) F 18 Symbol info support subroutines 635 636 ********************************************************************************** 637 * * 638 * This is the SUBNEXT routine. It is called to move down * 639 * the subprogram tree to the next tree node. The son is the * 640 * first candidate and if none exists, then the brother is tried. * 641 * If there is neither a son nor a brother, the father's brother * 642 * is tried, and so on. * 643 * Called with SUB pointing to the last subprogram. Returns * 644 * with SUB pointing to the next subprogram in the tree or else * 645 * zero if there are no more. * 646 * * 647 * Sets R5, Eats no other registers. * 648 * * 649 ********************************************************************************** 650 0001BA27 651 SUBNSTAK BASE SP stack area 652 BSS 1 return address 00178801 6 BASE 653 SUBNTOP BSS 1 top node of sub-tree to search 654 DRCT 00000002 ABS 655 SUBNSS EQU DISPW SUBNSTAK 656 ORG SUBNSTAK 657 1BA27 DD1F8002 6 STAK 658 SUBNEXT ENTR STAK SP,SUBNSS 1BA28 C0578801 6 BASE 659 STPVL SP,SUBNTOP top node of sub-tree 660 * 661 * Get the next subprogram differently if using the new format. 662 * 1BA29 5C01AAC0 663 CMZ USINGNEW new format ?? 1BA2A FE0DBA39 664 JNE NEWSUBNEXT si, go do it 665 * \ / 666 * 667 * Old format. 668 * 1BA2B 5C174802 5 BASE 669 CMZ SUB,SUBSPTR does he have a son? 1BA2C FE03BA2F 670 JEQ SUBN20 jump if no son 1BA2D 61574802 5 5 BASE 671 LD SUB SUB,SUBSPTR else try looking in son 1BA2E FE0FBA38 672 JMP SUBNEXIT and go try again 673 * --- 674 0001BA2F 675 SUBN20 LABEL 1BA2F 5C174801 5 BASE 676 CMZ SUB,SUBBPTR does he have a brother? 1BA30 FE03BA33 677 JEQ SUBN30 jump if only-child 1BA31 61574801 5 5 BASE 678 LD SUB SUB,SUBBPTR use the brother if he exists 1BA32 FE0FBA38 679 JMP SUBNEXIT then go try this one 680 * --- 681 0001BA33 682 SUBN30 LABEL 1BA33 65578801 5 6 BASE 683 CPR SUB SP,SUBNTOP is this the top node? 1BA34 FE03BA37 684 JEQ SUBN40 if so then we crapped out 1BA35 61574800 5 5 BASE 685 LD SUB SUB,SUBFPTR dead-end. Back up to father 1BA36 FB4DBA2F 5 686 JNEZ SUB SUBN20 if we still have one! 0001BA37 687 SUBN40 LABEL 1BA37 61440000 5 IMM 688 LD SUB 0 say we did not find it 0001BA38 689 SUBNEXIT LABEL 1BA38 5D1F8002 6 STAK 690 LEAVE STAK SP,SUBNSS return home with our find 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 167 (RDUSYMB) F 18 Symbol info support subroutines 691 * --- 692 * 693 * Use the same algorithm as the code that searches the old 694 * structures to search the new structures for the next 695 * logical subprogram block. 696 * 0001BA39 697 NEWSUBNEXT LABEL 698 * 699 * Look for son. 700 * 1BA39 5C174802 5 BASE 701 CMZ SUB,NEWSONPTR any kids for him ?? 1BA3A FE03BA3D 702 JEQ SUBNNEW20 no son for him 703 * \ / 704 * 705 * Return with son. 706 * 1BA3B 61574802 5 5 BASE 707 LD SUB SUB,NEWSONPTR yes, nominate the son for duty 1BA3C FE0FBA38 708 JMP SUBNEXIT and return 709 * --- 710 * 711 * Look for brother. 712 * 0001BA3D 713 SUBNNEW20 LABEL 1BA3D 5C174801 5 BASE 714 CMZ SUB,NEWBROPTR any bro's around ?? 1BA3E FE03BA41 715 JEQ SUBNNEW30 no younger kids 716 * \ / 717 * 718 * Return with brother. 719 * 1BA3F 61574801 5 5 BASE 720 LD SUB SUB,NEWBROPTR get his bro' 1BA40 FE0FBA38 721 JMP SUBNEXIT and return 722 * --- 0001BA41 723 SUBNNEW30 LABEL 724 * 725 * If not past the top then get daddy. 726 * 1BA41 65578801 5 6 BASE 727 CPR SUB SP,SUBNTOP is this the top node 1BA42 FE03BA37 728 JEQ SUBN40 yep, can go no further 729 * \ / 1BA43 61574800 5 5 BASE 730 LD SUB SUB,NEWDADPTR get daddy 1BA44 FB4DBA3D 5 731 JNEZ SUB SUBNNEW20 look for daddy relatives if he exists 732 * \ / 733 * 734 * No one is left. 735 * 1BA45 FE0FBA37 736 JMP SUBN40 else return saying no dice 737 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 168 (RDUSYMB) F 18 Symbol info support subroutines 739 740 ********************************************************************************** 741 * * 742 * This is the SYMSCAN routine. It is used to search for a * 743 * symbol (in SBUFF) in the current subprogram symbol area or in * 744 * a parent subprogram. The symbol area pointed to by SUB is * 745 * searched first, and if no match is found, SUB is moved up * 746 * towards the global level. If a symbol match is found, SUB will * 747 * be left pointing to the subprogram entry the symbol match * 748 * occurred in, and SYM will point to the symbol entry itself. If * 749 * no match is found at all, SYM will be returned with 0. * 750 * * 751 * Eats R0:R1, sets R5. * 752 * NOTE: R2 must be set to entry value on exit. * 753 * * 754 ********************************************************************************** 755 1BA46 DD5F8001 6 STAK 756 SYMSCAN ENTRNP STAK SP,1 1BA47 6141A928 5 757 LD SUB SUBPC point to current subprogram 758 * 759 * If we can't find it in his direct fathers then we will search 760 * the entire tree looking for it. Decide which way to do it. 761 * 1BA48 5C01AAC0 762 CMZ USINGNEW new format ?? 1BA49 FE0DBA55 763 JNE NEWSYMSC10 yes, bail out of loop for a second 764 * \ / 765 * 766 * Do it the old way. 767 * 768 * \ / 0001BA4A 769 SYMSC10 LABEL 1BA4A DC41B9B5 770 CALLNP SYMLOOK look in subprogram "SUB" 1BA4B FB0DBA54 4 771 JNEZ SYM SYMSCEXIT exit if we found a match 1BA4C 61574800 5 5 BASE 772 LD SUB SUB,SUBFPTR get pointer to father block 1BA4D FB4DBA4A 5 773 JNEZ SUB SYMSC10 and look in this subprogram 1BA4E 6145A986 5 IMM 774 LD SUB ADR(TREETOP) no luck. Search entire tree 775 * 776 * Keep looking until found or tree exhausted. 777 * 778 * \ / 0001BA4F 779 SYMSC20 LABEL 1BA4F DC41B9B5 780 CALLNP SYMLOOK see if symbol is here 1BA50 FB0DBA54 4 781 JNEZ SYM SYMSCEXIT exit if we found it finally 1BA51 DC01BA27 782 CALL SUBNEXT else move to next subprogram 1BA52 40440000 IMM 783 PARVL 0 we don't care where it stops 1BA53 FB4DBA4F 5 784 JNEZ SUB SYMSC20 try this one if possible 0001BA54 785 SYMSCEXIT LABEL 1BA54 5D1F8001 6 STAK 786 LEAVE STAK SP,1 return to caller 787 * --- 788 * 789 * Get a pointer or two and resume the loop.1 790 * 0001BA55 791 NEWSYMSC10 LABEL 1BA55 DC41B9B5 792 CALLNP SYMLOOK look in subprogram "SUB" 1BA56 FB0DBA54 4 793 JNEZ SYM SYMSCEXIT exit if we found a match 794 * \ / 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 169 (RDUSYMB) F 18 Symbol info support subroutines 1BA57 61574800 5 5 BASE 795 LD SUB SUB,NEWDADPTR get daddy 1BA58 FB4DBA55 5 796 JNEZ SUB NEWSYMSC10 exit if we found a block 797 * \ / 1BA59 6145AAC8 5 IMM 798 LD SUB ADR NEWTREEHED no luck, search entire tree 1BA5A FE0FBA4F 799 JMP SYMSC20 back to normal flow 800 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 170 (RDUSYMB) F 18 Symbol info support subroutines 802 803 ********************************************************************************** 804 * * 805 * This is the RELOCATE routine. It is called to set the SUB * 806 * pointer at the proper block for the address in ADDRESS. Since * 807 * the global block covers the entire address range, there is * 808 * always a routine which will include the given address. * 809 * * 810 * Eats R0:R1 * 811 * * 812 ********************************************************************************** 813 1BA5B DD5F8001 6 STAK 814 RELOCATE ENTRNP STAK SP,1 1BA5C 6001A91F 0 815 LD R0 ADDRESS get the address we want 816 * 817 * Relocate to the proper block using either the old 818 * or new structures. 819 * 1BA5D 5C01AAC0 820 CMZ USINGNEW new format ?? 1BA5E FE0DBA6D 821 JNE NEWRELOCATE yes, go handle it 822 * \ / 823 * 824 * The old way. 825 * 1BA5F 6145A986 5 IMM 826 LD SUB ADR(TREETOP) point to the top block 0001BA60 827 RELO10 LABEL 1BA60 64095F13 0 5 ZBM 828 CPR R0 SUB,SUBBASE see if we fit here 1BA61 FE09BA68 829 JLT RELO40 jump if too low - exit 1BA62 64095F14 0 5 ZBM 830 CPR R0 SUB,SUBHIGH are we off the top?? 1BA63 FE05BA68 831 JGT RELO40 jump if so - try to advance 1BA64 60534000 1 5 REG 832 LD R1 SUB remember we can fit here 1BA65 61574802 5 5 BASE 833 LD SUB SUB,SUBSPTR get pointer to son, if any 1BA66 FB43BA6A 5 834 JEQZ SUB RELOEXIT if none, then time to leave 1BA67 FE0FBA60 835 JMP RELO10 else go check out our son 836 * --- 837 0001BA68 838 RELO40 LABEL 1BA68 61574801 5 5 BASE 839 LD SUB SUB,SUBBPTR get pointer to brother 1BA69 FB4DBA60 5 840 JNEZ SUB RELO10 jump if we do have a brother 0001BA6A 841 RELOEXIT LABEL 1BA6A 61524000 5 1 REG 842 LD SUB R1 get pointer to best fit 1BA6B E541A929 5 843 ST SUB SUBADR save in case of later need 1BA6C 5D1F8001 6 STAK 844 LEAVE STAK SP,1 and return our position 845 * --- 846 * 847 * Keep looking a subprogram blocks until we get an exact match 848 * for our address or run out of blocks to look at. We will always 849 * remember if we can fit in a block or not. 850 * 0001BA6D 851 NEWRELOCATE LABEL start here 1BA6D 6145AAC8 5 IMM 852 LD SUB ADR NEWTREEHED top of the tree 0001BA6E 853 NEWRELO10 LABEL 1BA6E 64095F17 0 5 ZBM 854 CPR R0 SUB,NEWLOWADDR check against low address 1BA6F FE09BA77 855 JLT NEWRELO40 too low 856 * \ / 1BA70 64095F18 0 5 ZBM 857 CPR R0 SUB,NEWHIGHADR check against high address 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 171 (RDUSYMB) F 18 Symbol info support subroutines 1BA71 FE05BA77 858 JGT NEWRELO40 too high 859 * \ / 1BA72 60534000 1 5 REG 860 LD R1 SUB remember that we can fit within these bounds 0001BA73 861 NEWTRYSON LABEL 1BA73 61574802 5 5 BASE 862 LD SUB SUB,NEWSONPTR go check out our kid 1BA74 60934000 2 5 REG 863 LD R2 SUB save for a second 1BA75 FB43BA6A 5 864 JEQZ SUB RELOEXIT if nil pointer then we are finished 865 * \ / 1BA76 FE0FBA6E 866 JMP NEWRELO10 go check out our son 867 * --- 0001BA77 868 NEWRELO40 LABEL 1BA77 61574801 5 5 BASE 869 LD SUB SUB,NEWBROPTR go check out our bro' 1BA78 FB4DBA6E 5 870 JNEZ SUB NEWRELO10 yes we have a brother to examine 871 * \ / 1BA79 61528000 5 2 REG 872 LD SUB R2 where we were before 1BA7A FE0FBA73 873 JMP NEWTRYSON try the son next 874 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 172 (RDUSYMB) F 18 Symbol info support subroutines 876 877 ********************************************************************************** 878 * * 879 * This is the LABELLOOK routine. It is called to search the * 880 * symbol list of the subprogram area containing the location in * 881 * ADDRSS for a symbol of type memory address. The SUB pointer is * 882 * relocated to the proper routine, and that subprogram's symbol * 883 * list is searched for a match. If found, SYM will be returned * 884 * pointing to the symbol block for the label, and if not found, * 885 * SYM will be zero. * 886 * * 887 * Eats R0:R1, sets R4,R5. * 888 * * 889 ********************************************************************************** 890 0001BA7B 891 LBLLSTAK BASE SP stack area 892 BSS 1 return address 00178801 6 BASE 893 LBLLSYM BSS 1 temp for symbol pointer 00178802 6 BASE 894 LBLLSUB BSS 1 temp for sub pointer 895 DRCT 00000003 ABS 896 LBLLSS EQU DISPW LBLLSTAK 897 ORG LBLLSTAK 898 1BA7B DD5F8003 6 STAK 899 LABELLOOK ENTRNP STAK SP,LBLLSS 1BA7C DC41BA5B 900 CALLNP RELOCATE setup to proper subprogram 1BA7D E5578802 5 6 BASE 901 ST SUB SP,LBLLSUB save the SUB pointer for exit 1BA7E EC178801 6 BASE 902 STZ SP,LBLLSYM we have no candidate yet 1BA7F 6005FFFF 0 IMM 903 LD R0 MAXADR biggest possible address 1BA80 E401A92B 0 904 ST R0 SYMBIAS save as best we have found 905 * 906 * If using the new format then do the looking differently. 907 * 1BA81 5C01AAC0 908 CMZ USINGNEW new symbol format ?? 1BA82 FE0DBA98 909 JNE NEWLBLL10 yes, go handle it 910 * \ / 911 * 912 * Use the old structures. 913 * 914 * \ / 0001BA83 915 LBLL10 LABEL 1BA83 DC41B9A6 916 CALLNP SYMSET set up symbol list pointer 1BA84 FB03BA93 4 917 JEQZ SYM LBLL40 exit if no symbols here 1BA85 60440005 1 IMM 918 LD R1 SYMTYPEGD symbol type for memory addr 0001BA86 919 LBLL20 LABEL 1BA86 64490C40 1 4 ZBM 920 CPR R1 SYM,SYMTYPE is this symbol of proper type? 1BA87 FE0DBA92 921 JNE LBLL30 ignore it if not 1BA88 5C090410 4 ZBM 922 CMZ SYM,SYMKILLED are we allowed to use this? 1BA89 FE0DBA92 923 JNE LBLL30 if not, go try another 1BA8A 60170801 0 4 BASE 924 LD R0 SYM,SYMVALUE get the symbol's value 1BA8B 3001A91F 0 925 RSB R0 ADDRESS determine distance from ours 1BA8C FA09BA92 0 926 JLTZ R0 LBLL30 ignore if greater 927 * \ / 928 1BA8D 6401A92B 0 929 CPR R0 SYMBIAS is previous one better? 1BA8E FE07BA92 930 JGE LBLL30 forget this one if so 1BA8F E401A92B 0 931 ST R0 SYMBIAS save the new winner 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 173 (RDUSYMB) F 18 Symbol info support subroutines 1BA90 FA03BA96 0 932 JEQZ R0 LBLLEXIT head out if right on 1BA91 E5178801 4 6 BASE 933 ST SYM SP,LBLLSYM remember the new winner 0001BA92 934 LBLL30 LABEL 1BA92 FB37BA86 4 935 LJNA SYM LBLL20 see if we can do better 936 * \ / 937 0001BA93 938 LBLL40 LABEL 1BA93 61574800 5 5 BASE 939 LD SUB SUB,SUBFPTR backup to our father 1BA94 FB4DBA83 5 940 JNEZ SUB LBLL10 and check that one out 941 * \ / 942 1BA95 61178801 4 6 BASE 943 LD SYM SP,LBLLSYM now pick up our winner 0001BA96 944 LBLLEXIT LABEL 1BA96 61578802 5 6 BASE 945 LD SUB SP,LBLLSUB restore SUB pointer 1BA97 5D1F8003 6 STAK 946 LEAVE STAK SP,LBLLSS return to our spawning ground 947 * --- 948 * 949 * Handle the situation just like the above code 950 * 0001BA98 951 NEWLBLL10 LABEL start here 1BA98 DC41B9A6 952 CALLNP SYMSET set up the SYM pointer 1BA99 FB03BAAC 4 953 JEQZ SYM NEWLBLL40 no symbols here, go see dear old dad for some 954 * \ / 1BA9A 60440001 1 IMM 955 LD R1 NEWMEM type code for a memory address 0001BA9B 956 NEWLBLL20 LABEL 1BA9B 64490040 1 4 ZBM 957 CPR R1 SYM,NEWSYMTYPE compare what we got with what we want 1BA9C FE0DBAA7 958 JNE NEWLBLL30 not what we want, go to next one 959 * \ / 1BA9D 5C091A10 4 ZBM 960 CMZ SYM,SKILLDBONLY is symbol dead ?? 1BA9E FE0DBAA7 961 JNE NEWLBLL30 yes, we cannot list it, keep looking 962 * \ / 1BA9F 60170802 0 4 BASE 963 LD R0 SYM,NEWSYMVALU get the acutal value of the sucker 1BAA0 3001A91F 0 964 RSB R0 ADDRESS subtract what we is looking for 1BAA1 FA09BAA7 0 965 JLTZ R0 NEWLBLL30 too far away, no use to us 966 * \ / 1BAA2 6401A92B 0 967 CPR R0 SYMBIAS is this the best guess so far ?? 1BAA3 FE07BAA7 968 JGE NEWLBLL30 no, the old one is still better 969 * \ / 1BAA4 E401A92B 0 970 ST R0 SYMBIAS our new best guess so far 1BAA5 FA03BA96 0 971 JEQZ R0 LBLLEXIT equal is as good as we can get 972 * \ / 1BAA6 E5178801 4 6 BASE 973 ST SYM SP,LBLLSYM say where we found it 0001BAA7 974 NEWLBLL30 LABEL 1BAA7 61091F10 4 4 ZBM 975 LD SYM SYM,NEWNEXTSYM get next relative link 1BAA8 FB03BAAC 4 976 JEQZ SYM NEWLBLL40 no next one 977 * \ / 1BAA9 19174803 4 5 BASE 978 ADD SYM SUB,NEWSYMPTR add in base address 1BAAA 11040001 4 IMM 979 SUB SYM 1 bias down since first location has a relative address of 1 1BAAB FE0FBA9B 980 JMP NEWLBLL20 go check out next symbol 981 * --- 0001BAAC 982 NEWLBLL40 LABEL 1BAAC 61574800 5 5 BASE 983 LD SUB NEWDADPTR see if daddy has better luck than we did 1BAAD FB4DBA98 5 984 JNEZ SUB NEWLBLL10 yes, we have a father 985 * \ / 1BAAE 61178801 4 6 BASE 986 LD SYM SP,LBLLSYM retrieve what we found 1BAAF FE0FBA96 987 JMP LBLLEXIT and return 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 174 (RDUSYMB) F 18 Symbol info support subroutines 988 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 175 (RDUSYMB) F 18 Symbol info support subroutines 990 991 ********************************************************************************** 992 * * 993 * This is the VALLOOK routine. It is called to search the * 994 * symbol tables for a symbol whose value matches that stored in * 995 * VALUE. Searching starts at the symbol table for the subprogram * 996 * pointed to by SUBADR, and backs up the father list to the * 997 * global block if necessary. If found, SYM will be left pointing * 998 * to the block which matches, and SUB will point to the * 999 * subprogram block for the symbol entry. If not found, SYM will * 1000 * be returned as 0, and SUB will be zero. Oh, the symbol type is * 1001 * also checked as well as the value, and must match the symbol * 1002 * type expected in TYPE. * 1003 * * 1004 * Eats R0, sets R4,R5. * 1005 * * 1006 ********************************************************************************** 1007 1008 BLOCK 1009 1010 ENTRY VALLOOK 1011 1012 BEGFRAME 00178801 6 BASE 1013 VALLR3SAVE BSS 1 just what it sez it is 1014 ENDFRAME 1015 1BAB0 DD5F8002 6 STAK 1016 VALLOOK ENTRNP PUSH 1BAB1 E4D78801 3 6 BASE 1017 ST R3 SP,VALLR3SAVE save the register since we zap it 1018 * 1019 * Again, we must look differently depending on what format 1020 * we are looking at. 1021 * 1BAB2 5C01AAC0 1022 CMZ USINGNEW new format ?? 1BAB3 FE0DBAC6 1023 JNE NEWVALL yes, go handle it 1024 * \ / 1025 * 1026 * Old format. 1027 * 1BAB4 6141A929 5 1028 LD SUB SUBADR point to current subprog block 1BAB5 5C01A92A 1029 CMZ SYMSFLAG do we want symbols? 1BAB6 FE0DBAB8 1030 JNE VALL10 all set if we do 1BAB7 6145A986 5 IMM 1031 LD SUB ADR(TREETOP) else allow only our predefined 0001BAB8 1032 VALL10 LABEL 1BAB8 DC41B9A6 1033 CALLNP SYMSET set up symbol list pointer 0001BAB9 1034 VALL20 LABEL 1BAB9 6001A8ED 0 1035 LD R0 VALUE get the value to locate 1BABA 3C170801 0 4 BASE 1036 LSRCH R0 SYM,SYMVALUE and see if we can find it 1BABB FE0DBAC2 1037 JNE VALL40 jump if searched list to end 1038 * \ / 1039 1BABC 6001A8F2 0 1040 LD R0 TYPE have match, check type 1BABD 64090C40 0 4 ZBM 1041 CPR R0 SYM,SYMTYPE be sure they match, too 1BABE FE0DBAC1 1042 JNE VALL30 jump if not of correct type 1BABF 5C090410 4 ZBM 1043 CMZ SYM,SYMKILLED was this one axed? 1BAC0 FE03BAC4 1044 JEQ VALLEXIT jump if we have our man (symbol) 0001BAC1 1045 VALL30 LABEL 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 176 (RDUSYMB) F 18 Symbol info support subroutines 1BAC1 FB37BAB9 4 1046 LJNA SYM VALL20 advance to next and keep trying 1047 * \ / 1048 0001BAC2 1049 VALL40 LABEL 1BAC2 61574800 5 5 BASE 1050 LD SUB SUB,SUBFPTR try looking in father block 1BAC3 FB73BAB8 5 1051 JNZA SUB VALL10 at least, if we have a father 1052 * \ / 1053 0001BAC4 1054 VALLEXIT LABEL 1BAC4 60D78801 3 6 BASE 1055 LD R3 SP,VALLR3SAVE reset R3 1BAC5 5D1F8002 6 STAK 1056 LEAVE POP and truck on home 1057 * --- 1058 * 1059 * Let's search from the current subprogram. 1060 * 0001BAC6 1061 NEWVALL LABEL 1BAC6 6141A929 5 1062 LD SUB SUBADR use current subprogram 1BAC7 5C01A92A 1063 CMZ SYMSFLAG do we want symbols ?? 1BAC8 FE0DBACA 1064 JNE NEWVALL10 yep, we are set for it 1065 * \ / 1BAC9 6145AAC8 5 IMM 1066 LD SUB ADR NEWTREEHED no, allow only the predefined ones 0001BACA 1067 NEWVALL10 LABEL 1BACA DC41B9A6 1068 CALLNP SYMSET set up the pointer 1BACB 60840001 2 IMM 1069 LD R2 1 initial relative pointer 0001BACC 1070 NEWVALL20 LABEL 1BACC 60174803 0 5 BASE 1071 LD R0 SUB,NEWSYMPTR base address of symbol list 1BACD 10040001 0 IMM 1072 SUB R0 1 bias back for relative address of 1 1BACE 6041A8ED 1 1073 LD R1 VALUE here is what we is looking for 1BACF 5D968802 2 BASE 1074 RELSH R2,NEWSYMVALU look for a matching value 1BAD0 FA83BADB 2 1075 JEQZ R2 NEWVALL40 no match, end of list found 1076 * \ / 1BAD1 18920000 2 0 REG 1077 ADD R2 R0 make a memory pointer 1BAD2 6001A8F2 0 1078 LD R0 TYPE get the type 1BAD3 64088040 0 2 ZBM 1079 CPR R0 R2,NEWSYMTYPE well ?? 1BAD4 FE0DBAD9 1080 JNE NEWVALL30 no, not what we really want 1081 * \ / 1BAD5 5C089A10 2 ZBM 1082 CMZ R2,SKILLDBONLY is this symbol killed off ?? 1BAD6 FE0DBAD9 1083 JNE NEWVALL30 if so then we cannot use it, go look for another 1084 * \ / 1085 * 1086 * We found what we wanted. Set SYM and vamoose. 1087 * 1BAD7 61128000 4 2 REG 1088 LD SYM R2 put it into the symbol pointer 1BAD8 FE0FBAC4 1089 JMP VALLEXIT and leave 1090 * --- 1091 * 1092 * Resume the search if the list is not empty. 1093 * 0001BAD9 1094 NEWVALL30 LABEL resume the linked list search 1BAD9 60889F10 2 2 ZBM 1095 LD R2 R2,NEWNEXTSYM get the next relative address 1BADA FA8DBACC 2 1096 JNEZ R2 NEWVALL20 if link is not 0 then continue 1097 * \ / 1098 * 1099 * Start a new search at daddy if we have found nothing so far. 1100 * 0001BADB 1101 NEWVALL40 LABEL 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 177 (RDUSYMB) F 18 Symbol info support subroutines 1BADB 61574800 5 5 BASE 1102 LD SUB SUB,NEWDADPTR look for daddy 1BADC FB4DBACA 5 1103 JNEZ SUB NEWVALL10 start all over with the next symbol list 1104 * \ / 1105 * 1106 * Nowhere else to look so get out with SYM pointing to nothing. 1107 * 1BADD 61040000 4 IMM 1108 LD SYM 0 say we found no one 1BADE FE0FBAC4 1109 JMP VALLEXIT get outta here 1110 * --- 1111 1112 END 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 178 (RDUSYMB) F 18 Symbol info support subroutines 1114 1115 ********************************************************************************** 1116 * * 1117 * This is the SYMOUT routine. It is used to move the name * 1118 * of the symbol entry pointed to by SYM into the output buffer * 1119 * at the position pointed to by OBP. It is quite similar to * 1120 * MESSMOVE, but moves characters until the number specified * 1121 * by the NAMEL field have been moved, or until a blank is * 1122 * encountered. OBP is left pointing to the next position in * 1123 * OBUFF. R0, R1, and R2 are clobberred. * 1124 * Call * 1125 * SYM -> symbol element * 1126 * OBP -> position in output buffer * 1127 * CALLNP SYMOUT * 1128 * Eats R0:R2, sets R3. * 1129 * * 1130 ********************************************************************************** 1131 1BADF DD5F8001 6 STAK 1132 SYMOUT ENTRNP STAK SP,1 1133 * 1134 * If using the new format then go find the symbol name 1135 * in a different way. 1136 * 1BAE0 5C01AAC0 1137 CMZ USINGNEW new format ?? 1BAE1 FE0DBAEE 1138 JNE NEWSYMOUT yes, go handle it 1139 * \ / 1140 * 1141 * Use old format. 1142 * 1BAE2 38170802 0 4 BASE 1143 LEA R0 SYM,SYMNAME point to the symbol name 1BAE3 60890630 2 4 ZBM 1144 LD R2 SYM,SYMNAMEL get length of name 1BAE4 1C840004 2 IMM 1145 MUL R2 NCPW convert to characters 1BAE5 18840004 2 IMM 1146 ADD R2 NCPW adjust for offset 1147 * 1148 * Come here with a symbol name pointed to by R0 and the count 1149 * of characters in R2. 1150 * 1151 * \ / 0001BAE6 1152 SYMO10 LABEL 1BAE6 60560000 1 0 CACH 1153 LD R1 CACH R0,0 get a character of the name 1BAE7 64440020 1 IMM 1154 CPR R1 BLANK is it a blank? 1BAE8 FE03BAED 1155 JEQ SYMOEXIT time to leave if it is 1BAE9 E477AC01 1 3 @ 1156 ST R1 @OBPT(OBP) add to string in output buffer 1BAEA D00A1F30 0 CBM 1157 INC R0/NXTCHAR advance to next character 1BAEB 18C40001 3 IMM 1158 ADD OBP 1 advance output buffer pointer 1BAEC FAA3BAE6 2 1159 DRJ R2 SYMO10 be sure we don't move too many 1160 * \ / 1161 0001BAED 1162 SYMOEXIT LABEL 1BAED 5D1F8001 6 STAK 1163 LEAVE STAK SP,1 now return to our caller 1164 * --- 1165 * 1166 * Convert the packed symbol name into an ASCII name and then 1167 * jump back to the output section. 1168 * 0001BAEE 1169 NEWSYMOUT LABEL 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 179 (RDUSYMB) F 18 Symbol info support subroutines 1BAEE DC01BB57 1170 CALL PAKD2ASCII ask nicely for conversion 1BAEF 41490061 4 ZBM 1171 PARV SYM,NEWSYMNAMEL length of the name in words including case 1BAF0 41090013 4 ZBM 1172 PAR SYM,NEWSYMCASE the case flag word address 1BAF1 40090064 4 ZBM 1173 PARL SYM,NEWSYMNAME the name address 1BAF2 6081AAA3 2 1174 LD R2 ASCIIBUFLN characters the routine found 1BAF3 6005AA9B 0 IMM 1175 LD R0 ADR ASCIIBUFF get the address of the message 1BAF4 FE0FBAE6 1176 JMP SYMO10 go combine efforts 1177 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 180 (RDUSYMB) F 18 Symbol info support subroutines 1179 1180 ********************************************************************************** 1181 * * 1182 * LABELOUT moves a label for a memory address into the * 1183 * output buffer. The label is pointed to by SYM on entry and any * 1184 * offset from SYM is passed in SYMBIAS. If the value is exactly * 1185 * right, SYMBIAS should be zero. This routine calls SYMOUT to * 1186 * output the symbol and then outputs the bias as a subscripted * 1187 * number by calling DECOUT to do the work. * 1188 * * 1189 * Call: * 1190 * SYMBIAS contains bias from symbol * 1191 * SYM -> symbol element * 1192 * OBP -> position in output buffer * 1193 * CALLNP LABELOUT * 1194 * Eats R0:R2, sets R3. * 1195 * * 1196 ********************************************************************************** 1197 1BAF5 DD5F8001 6 STAK 1198 LABELOUT ENTRNP STAK SP,1 1BAF6 DC41BADF 1199 CALLNP SYMOUT output the symbol first 1BAF7 6001A92B 0 1200 LD R0 SYMBIAS is the bias zero? 1BAF8 FA03BB01 0 1201 JEQZ R0 LBLOEXIT if so then we are done here 1202 * \ / 1203 1BAF9 E401A8ED 0 1204 ST R0 VALUE otherwise prepare to list 1BAFA 60040028 0 IMM 1205 LD R0 LPAREN get the necessary dress 1BAFB E437AC01 0 3 @ 1206 ST R0 @OBPT(OBP) neatness counts 1BAFC 18C40001 3 IMM 1207 ADD OBP 1 advance output buffer pointer 1BAFD DC41B62D 1208 CALLNP DECOUT output offset 1BAFE 60040029 0 IMM 1209 LD R0 RPAREN now for the rest of dress 1BAFF E437AC01 0 3 @ 1210 ST R0 @OBPT(OBP) this will do it 1BB00 18C40001 3 IMM 1211 ADD OBP 1 and get the hell out!! 0001BB01 1212 LBLOEXIT LABEL 1BB01 5D1F8001 6 STAK 1213 LEAVE STAK SP,1 be seeing you now! 1214 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 181 (RDUSYMB) F 18 Symbol info support subroutines 1216 1217 ********************************************************************************** 1218 * * 1219 * LOCOUT searches for a label on the statement at ADDRESS * 1220 * and moves it into the output line if one exists. It also * 1221 * outputs the hex address of the location. * 1222 * One parameter is passed as follows: * 1223 * -1 - Do not list any label * 1224 * 0 - List label only if exact match * 1225 * 1 - List label and bias * 1226 * Call: * 1227 * OBP -> current position in output buffer * 1228 * CALL LOCOUT * 1229 * PARVL bias flag * 1230 * * 1231 * Eats R0:R2,R4:R5. Sets R3. * 1232 * * 1233 ********************************************************************************** 1234 0001BB02 1235 LOCOSTAK BASE SP stack area 1236 BSS 1 return address 00178801 6 BASE 1237 LOCOFLAG BSS 1 controls label bias display 1238 DRCT 00000002 ABS 1239 LOCOSS EQU DISPW LOCOSTAK 1240 1BB04 DD1F8002 6 STAK 1241 LOCOUT ENTR STAK SP,LOCOSS 1BB05 C0578801 6 BASE 1242 STPVL SP,LOCOFLAG determines label format 1BB06 5C178801 6 BASE 1243 CMZ SP,LOCOFLAG now check our control flag 1BB07 FE09BB11 1244 JLT LOCO70 jump if not listing labels 1245 * \ / 1246 1BB08 DC41BA7B 1247 CALLNP LABELLOOK go see if this has a label 1BB09 FB03BB11 4 1248 JEQZ SYM LOCO70 jump if none found 1BB0A 5C178801 6 BASE 1249 CMZ SP,LOCOFLAG are we biasing labels? 1BB0B FE05BB0E 1250 JGT LOCO60 if so then go list now 1BB0C 5C01A92B 1251 CMZ SYMBIAS otherwise check the offset 1BB0D FE0DBB11 1252 JNE LOCO70 don't list if not exact 1253 * \ / 1254 0001BB0E 1255 LOCO60 LABEL 1BB0E DC41B86F 1256 CALLNP BLANKOUT clean up the output buffer 1BB0F DC41BAF5 1257 CALLNP LABELOUT ship out the symbol 1BB10 DC41B886 1258 CALLNP OUTO there it goes!! 0001BB11 1259 LOCO70 LABEL 1BB11 DC41B86C 1260 CALLNP BLANKOUTW re-blank output buffer 1BB12 6001A91F 0 1261 LD R0 ADDRESS get the address again 1BB13 E401A8ED 0 1262 ST R0 VALUE so we can list it out 1BB14 DC41B600 1263 CALLNP HEXOUTA tell where we are 1BB15 6004003A 0 IMM 1264 LD R0 COLON add some dress 1BB16 E437AC01 0 3 @ 1265 ST R0 @OBPT(OBP) for good looks 1BB17 18C40002 3 IMM 1266 ADD OBP 2 advance 1BB18 5D1F8002 6 STAK 1267 LEAVE STAK SP,LOCOSS now return to caller 1268 * --- 135 136 INPUT NEWSETUP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 182 (NEWSETUP) F 19 Symbol info support subroutines 2 ********************************************************************************** 3 * * 4 * This new section of code has been added to the SETUP code * 5 * to handle the new debugger symbol format. If the fifth * 6 * word of page 128 of the code file is a 1 then the new * 7 * debugger symbol format is assumed. This code does the * 8 * following: * 9 * * 10 * 1. Converts the control block .RAF pointers to * 11 * memory addresses. * 12 * 2. Maps in all the subprogram, symbol, and * 13 * source blocks. * 14 * 3. Converts all the .RAF pointers in the subprogram * 15 * to memory addresses. * 16 * * 17 ********************************************************************************** 18 0001BB19 19 USENEWSTUF LABEL start processing here 1BB19 EDC1AAC0 20 STW USINGNEW say we are using the new format 21 * 22 * Make the .RAF pointers in the control block into memory addresses. 23 * These pointers point to the first subprogram block, the start of 24 * the space allocated to the subprogram blocks, the start of the space 25 * allocated for the symbol blocks, and the start of the space allocated 26 * for the source blocks. 27 * 1BB1A 60020010 0 IMM 28 LD R0 DBDSKPAGE*WPP*CPW relative address 0 from where we start 1BB1B B001AAA9 0 29 RSBM R0 NEWTREETOP make it relative 1BB1C B001AAAE 0 30 RSBM R0 NEWSUBTOP make it relative 1BB1D B001AAB0 0 31 RSBM R0 NEWSYMTOP make it relative 1BB1E B001AAB2 0 32 RSBM R0 NEWSRCTOP make it relative 1BB1F 60040004 0 IMM 33 LD R0 CPW use characters per word to make a word address out of byte address 1BB20 B401AAA9 0 34 RDVM R0 NEWTREETOP make it a word address 1BB21 B401AAAE 0 35 RDVM R0 NEWSUBTOP make it a word address 1BB22 B401AAB0 0 36 RDVM R0 NEWSYMTOP make it a word address 1BB23 B401AAB2 0 37 RDVM R0 NEWSRCTOP make it a word address 38 * 39 * Find the high memory address that we will need to occupy with the 40 * symbol information. Accomplish this by finding out which pointer 41 * and its associated length point at the highest memory location. 42 * Simple enough. Also not HLL mode if source statements exist. 43 * 1BB24 6101AAAE 4 44 LD R4 NEWSUBTOP top of the subprogram blocks 1BB25 1901AAAF 4 45 ADD R4 NEWSUBLEN add in the number of words within the subprogram blocks area 1BB26 6041AAB0 1 46 LD R1 NEWSYMTOP top of the symbol blocks 1BB27 1841AAB1 1 47 ADD R1 NEWSYMLEN add in the number of words within the symbol blocks area 1BB28 6081AAB3 2 48 LD R2 NEWSRCLEN length of the source blocks 1BB29 FA83BB2B 2 49 JEQZ R2 NOSOURCE pause for a moment to check for source statements existing 50 * \ / 1BB2A 1881AAB2 2 51 ADD R2 NEWSRCTOP add in the starting address of the source blocks area 0001BB2B 52 NOSOURCE LABEL 1BB2B 55124000 4 1 REG 53 MAX R4 R1 get the bigger of the two 1BB2C 55128000 4 2 REG 54 MAX R4 R2 and then the biggest of the three 1BB2D E501AAC1 4 55 ST R4 HIGHADDR save the high address pointer 1BB2E 15040400 4 IMM 56 DIV R4 WPP make it into a page number 1BB2F E501AAC2 4 57 ST R4 HIGHPAGE save the high page number 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 183 (NEWSETUP) F 19 Symbol info support subroutines 1BB30 65040061 4 IMM 58 CPR R4 BOTTOM too many pages required ?? 1BB31 FE05B981 59 JGT SU900 yes, bail out now 60 * \ / 61 * 62 * Now we will map in (own copy mode) the pages that contain the 63 * symbol information that we will be using. 64 * 1BB32 60440080 1 IMM 65 LD R1 DBDSKPAGE our special debugger code file page (128) 1BB33 60840000 2 IMM 66 LD R2 0 start at the low end of memory 0001BB34 67 MAPINLOOP LABEL 1BB34 60040094 0 IMM 68 LD R0 FRMAPINOC request to map in page in own copy mode 1BB35 0881A919 69 FREQ AUXLUN(XREQ) the request 1BB36 FA09B983 0 70 JLTZ R0 SU910 something real bad happened 71 * \ / 1BB37 60565001 1 1 REG 72 LD R1 R1+1 next .RAF page 1BB38 60969001 2 2 REG 73 LD R2 R2+1 next memory page 1BB39 FB27BB34 4 74 JDR R4 MAPINLOOP next page counter 75 * \ / 76 * 77 * Now we must go through every subprogram block and change the 78 * .RAF addresses into memory addresses. This is accomplished 79 * by starting at the top of the subprogram block area and 80 * converting the location in that subprogram block. Then we 81 * add the length of that block to the base pointer to arrive at 82 * the next subprogram block and convert its locations. This 83 * process is repeated until all the subprogram blocks have been 84 * altered. 85 * 1BB3A 6081AAAF 2 86 LD R2 NEWSUBLEN the length will tell us when we have finished 1BB3B 6141AAAE 5 87 LD SUB NEWSUBTOP point to the phisically top block 0001BB3C 88 NEXTSUB LABEL 1BB3C 60440005 1 IMM 89 LD R1 PTRBLOKLEN length of consecutive pointers within the block 1BB3D FE0FBB43 90 JMP FIXLOOPEND enter this loop at the end to make the length into an index 91 * --- 0001BB3E 92 FIXLOOP LABEL 1BB3E 601D4800 0 51 BASE 93 LD R0 SUB,PTRBLOCK(R1) get the pointer 1BB3F FA03BB43 0 94 JEQZ R0 FIXLOOPEND we do nothing with NIL pointers 95 * \ / 1BB40 10020010 0 IMM 96 SUB R0 DBDSKPAGE*WPP*CPW subtract relative 0 from address 1BB41 14040004 0 IMM 97 DIV R0 CPW change byte oriented address into word address 1BB42 E41D4800 0 51 BASE 98 ST R0 SUB,PTRBLOCK(R1) reset the pointer 0001BB43 99 FIXLOOPEND LABEL 1BB43 FA67BB3E 1 100 JDR R1 FIXLOOP do the next pointer within the same block 101 * \ / 1BB44 60440009 1 IMM 102 LD R1 SHORTNONAM length of a short block not counting the name 1BB45 18494038 1 5 ZBM 103 ADD R1 SUB,NEWNAMELEN add in the name length 1BB46 5C095817 5 ZBM 104 CMZ SUB,NEWLONGBLK is an optional block attached ?? 1BB47 FE03BB4D 105 JEQ LENREADY no, we have the length we need 106 * \ / 1BB48 60174018 0 5 CACH 107 LD R0 SUB,NEWFCHARLN get the length of part of the optional block 1BB49 18040003 0 IMM 108 ADD R0 ROUNDCPW round it up before the divide 1BB4A 14040004 0 IMM 109 DIV R0 CPW now make it the number of words 1BB4B 18040002 0 IMM 110 ADD R0 OPTIONLEN length of fixed part of option block 1BB4C 18520000 1 0 REG 111 ADD R1 R0 add it in with the rest 0001BB4D 112 LENREADY LABEL 1BB4D 19524000 5 1 REG 113 ADD SUB R1 bump to next block 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 184 (NEWSETUP) F 19 Symbol info support subroutines 1BB4E 10924000 2 1 REG 114 SUB R2 R1 subtract the words we passed over 1BB4F FA85BB3C 2 115 JGTZ R2 NEXTSUB go do the next if we aren't done yet 116 * \ / 117 * 118 * Now give the first subprogram block a father by pointing to our 119 * tree head and make the tree head point to him as a son. 120 * 1BB50 6005AAC8 0 IMM 121 LD R0 ADR NEWTREEHED point to the head block 1BB51 6141AAA9 5 122 LD SUB NEWTREETOP first subprogram block 1BB52 E5560802 5 0 BASE 123 ST SUB R0,NEWSONPTR give our guy a son 1BB53 E4174800 0 5 BASE 124 ST R0 SUB,NEWDADPTR and give the son a dad 1BB54 6145AAC8 5 IMM 125 LD SUB ADR NEWTREEHED head of the list 1BB55 E541A928 5 126 ST SUB SUBPC remember where we started 1BB56 FE0FB980 127 JMP SUEXIT2 get outta here !! 128 * --- 137 138 INPUT NEWSYMSUPP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 185 (NEWSYMSUPP) F 20 support for handling new debugger symbol format 3 ********************************************************************************** 4 * * 5 * Name: PAKD2ASCII * 6 * * 7 * PAKD2ASCII takes a field which contains the newer debugger * 8 * packed symbol format and converts the field to an ASCII character * 9 * array. The packed character has a value of between 0 and * 10 * MAXPAKDCHR and is used as an index into one of two tables. If * 11 * corresponding bit in the NEWSYMCASE field is set, then the character * 12 * indexes the lower case character table, else if the bit is zero, * 13 * the character indexes the upper case character table. In any case, * 14 * the resulting characters are placed into the buffer ASCIIBUFF and * 15 * the length into ASCIIBUFLN. ASCIIBUFF is set to all blanks before * 16 * any characters are saved into it. The conversion continues until * 17 * the packed character obtained is 0. * 18 * * 19 * Call: * 20 * CALL PAKD2ASCII with SYM pointing to a symbol block * 21 * PARV length in words including case word * 22 * PAR forms address of upper/lower case word * 23 * PARL forms address of packed name * 24 * * 25 * Eats: R0:R2 * 26 * * 27 ********************************************************************************** 28 29 BLOCK start PAKD2ASCII 30 ENTRY PAKD2ASCII 31 32 BEGFRAME 00178801 6 BASE 33 P2ALENGTH BSS 1 max length of conversion 00178802 6 BASE 34 CASEPOINTR BSS 1 holds pointer to case word 00178803 6 BASE 35 NAMEPOINTR BSS 1 holds pointer to packed name 00178804 6 BASE 36 LCTABLPNTR BSS 1 holds pointer to the lower case table 00178805 6 BASE 37 UCTABLPNTR BSS 1 holds pointer to the upper case table 38 ENDFRAME 39 1BB57 DD1F8006 6 STAK 40 PAKD2ASCII ENTR PUSH start here 1BB58 C1578801 6 BASE 41 STPV SP,P2ALENGTH save the length 1BB59 C1178802 6 BASE 42 STP SP,CASEPOINTR save the pointer to the case flag 1BB5A C0178803 6 BASE 43 STPL SP,NAMEPOINTR save the pointer to the first packed item 44 * 45 * Zap buffer 46 * 1BB5B 6005AA9B 0 IMM 47 LD R0 ADR ASCIIBUFF address of buffer 1BB5C 60440020 1 IMM 48 LD R1 MAXSYMCHRS characters to zap 1BB5D DA000820 0 1 49 FILLI R0 R1 020 fill it with blanks 50 * 51 * Set some addresses up 52 * 1BB5E 6005ACE9 0 IMM 53 LD R0 ADR PK2UPCHAR word address of the upper case character array 1BB5F 38160000 0 0 CACH 54 LEA R0 CACH R0,0 make a character address 1BB60 E4178805 0 6 BASE 55 ST R0 SP,UCTABLPNTR save on stack 1BB61 6005ACF4 0 IMM 56 LD R0 ADR PK2LOWCHR word address of the lower case character array 1BB62 38160000 0 0 CACH 57 LEA R0 CACH R0,0 make a character address 1BB63 E4178804 0 6 BASE 58 ST R0 SP,LCTABLPNTR save on stack 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 186 (NEWSYMSUPP) F 20 support for handling new debugger symbol format 1BB64 60840000 2 IMM 59 LD R2 0 zero out the index 60 * 61 * Set max length in packed characters 62 * 1BB65 60178801 0 6 BASE 63 LD R0 SP,P2ALENGTH get length in words 1BB66 10040001 0 IMM 64 SUB R0 1 don't count case word 1BB67 1C040020 0 IMM 65 MUL R0 NBPW make it into bits 1BB68 14040006 0 IMM 66 DIV R0 PAKCHRBITS how many of these funnies will fit ?? 1BB69 E4178801 0 6 BASE 67 ST R0 SP,P2ALENGTH this many !! 1BB6A FA0BBB7C 0 68 JLEZ R0 BADSYM awful 69 * \ / 70 * 71 * Now obtain packed characters from the symbol block until we receive 72 * the fill character (SYMNONE), which is 0, or until we hit the max 73 * length which was calculated earlier from the word length. 74 * 0001BB6B 75 NEXTPAKCHR LABEL 1BB6B 60578805 1 6 BASE 76 LD R1 SP,UCTABLPNTR get upper case table pointer 1BB6C 60178802 0 6 BASE 77 LD R0 SP,CASEPOINTR get pointer to bit array 1BB6D 601A1400 0 02 @R 78 LD R0 @R0(R2) get the corresponding upper/lower case bit 1BB6E FA03BB70 0 79 JEQZ R0 CHARISUPPR it's upper case, we already have the correct pointer 80 * \ / 1BB6F 60578804 1 6 BASE 81 LD R1 SP,LCTABLPNTR get lower case table pointer 82 * 83 * Okay, get the packed character and index the proper table with it 84 * to obtain an ASCII character. Place this ASCII character in the 85 * ASCII character buffer we provide. 86 * 87 * \ / 0001BB70 88 CHARISUPPR LABEL 1BB70 60178803 0 6 BASE 89 LD R0 SP,NAMEPOINTR get pointer to packed item array 1BB71 601A1400 0 02 @R 90 LD R0 @R0(R2) get a packed character 1BB72 FA03BB7A 0 91 JEQZ R0 NOMORECHRS none left to convert 92 * \ / 1BB73 D0578801 6 BASE 93 DEC SP,P2ALENGTH did we max out yet ?? 1BB74 FE09BB7A 94 JLT NOMORECHRS if less then zero then we sure did 95 * \ / 1BB75 64040027 0 IMM 96 CPR R0 MAXPAKDCHR is it above the max ?? 1BB76 FE05BB7C 97 JGT BADSYM if so then bail out now 98 * \ / 1BB77 601A4400 0 10 @R 99 LD R0 @R1(R0) this is the conversion step 1BB78 E435AAA4 0 2 @ 100 ST R0 @ASCIIBUFPT(R2) save it into buffer 1BB79 FAA1BB6B 2 101 IRJ R2 NEXTPAKCHR alway do the jump and bump index 102 * --- 0001BB7A 103 NOMORECHRS LABEL 1BB7A E481AAA3 2 104 ST R2 ASCIIBUFLN save the count of characters 1BB7B 5D1F8006 6 STAK 105 LEAVE POP bye 106 * --- 0001BB7C 107 BADSYM LABEL 1BB7C 6005D32E 0 IMM 108 LD R0 ADR ERM702 bad symbol 1BB7D FE0FBE35 109 JMP RDUERR 110 * --- 111 112 END end of PAKD2ASCII 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 187 (NEWSYMSUPP) F 20 support for handling new debugger symbol format 114 ********************************************************************************** 115 * * 116 * Name: ASCII2PAKD * 117 * * 118 * ASCII2PAKD converts the characters in an ASCII character array * 119 * into packed characters within a dummy symbol block area. It also * 120 * sets the upper/lower case bits within the NEWSYMCASE field as is * 121 * necessary. The packed buffer area is filled with 0s before any * 122 * items are stored into it. The number of characters processed is * 123 * saved into SRCHBUFLN. Conversion continues until the requested * 124 * number of characters is processed OR the fetched ASCII character * 125 * is a (hex 020). * 126 * * 127 * Call: * 128 * CALL ASCII2PAKD * 129 * PARV LENGTH length of the buffer in chars * 130 * PARVL BUFCHARADD character address of buffer * 131 * * 132 * Eats: R0:R2 * 133 * * 134 ********************************************************************************** 135 136 BLOCK start of ASCII2PAKD 137 ENTRY ASCII2PAKD 138 139 BEGFRAME 00178801 6 BASE 140 BUFLENGTH BSS 1 character length of the buffer 141 ENDFRAME 142 1BB7E DD1F8002 6 STAK 143 ASCII2PAKD ENTR PUSH start here 1BB7F C1578801 6 BASE 144 STPV SP,BUFLENGTH save the length of the buffer 1BB80 C0528000 2 REG 145 STPVL R2 character address of the ASCII buffer 1BB81 6005AA91 0 IMM 146 LD R0 ADR SRCHCASEBF address of buffer 1BB82 6044001C 1 IMM 147 LD R1 LENTOZERO characters to zap 1BB83 DA000800 0 1 148 FILLI R0 R1 0 place zeros into the buffer 1BB84 60440000 1 IMM 149 LD R1 0 zero out index 150 * 151 * Grab characters until the count is up. Each character is biased down 152 * and then used to index a table of the packed values. 153 * 154 * \ / 0001BB85 155 NEXTASCII LABEL 1BB85 601A8C00 0 21 @R 156 LD R0 @R2(R1) get the ASCII character 1BB86 7804007F 0 IMM 157 AND R0 GASMASK save only the low 7 bits 1BB87 64040020 0 IMM 158 CPR R0 020 a space ?? 1BB88 FE03BB93 159 JEQ ASCIIEXIT yes, no need to go any further 160 * \ / 1BB89 10040021 0 IMM 161 SUB R0 LOWBOUND bias down by the lowest valued ASCII character 1BB8A FA09BB95 0 162 JLTZ R0 BADSYM no dice with this one !! 163 * \ / 1BB8B 6031ACFF 0 0 @ 164 LD R0 @ASC2PAKPT(R0) use biased value to index the conversion table 1BB8C FA03BB95 0 165 JEQZ R0 BADSYM illegal value was obtained 166 * \ / 1BB8D E433AA9A 0 1 @ 167 ST R0 @SRCHBUFFPT(R1) save the lower 6 bits only 1BB8E 600A3010 0 0 CBM 168 LD R0 R0/UPLOWBIT get the upper/lower case flag bit 1BB8F E433AA99 0 1 @ 169 ST R0 @SRCHCASEPT(R1) save the bit we have 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 188 (NEWSYMSUPP) F 20 support for handling new debugger symbol format 1BB90 60565001 1 1 REG 170 LD R1 R1+1 bump index 1BB91 64578801 1 6 BASE 171 CPR R1 SP,BUFLENGTH see if we reached the end yet 1BB92 FE09BB85 172 JLT NEXTASCII if less than length then go do another 173 * \ / 0001BB93 174 ASCIIEXIT LABEL 1BB93 E441AA98 1 175 ST R1 SRCHBUFLN save the count 1BB94 5D1F8002 6 STAK 176 LEAVE POP bye 177 * --- 0001BB95 178 BADSYM LABEL 1BB95 6005D32E 0 IMM 179 LD R0 ADR ERM702 bad symbol 1BB96 FE0FBE35 180 JMP RDUERR 181 * --- 182 183 END end of ASCII2PAKD 139 140 INPUT RDUUSUB 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 189 (RDUUSUB) F 21 Utility subroutines 3 4 ********************************************************************************** 5 * * 6 * These are the SHIPCOM routines. They are called to send * 7 * a command or data to the SSU. They build a five-character * 8 * command string and send that out to the encryptor and then to * 9 * the phone line. Each routine takes four or five parameters * 10 * (see the calling sequence). * 11 * * 12 * Param 0 - Error address * 13 * Param 1 - Class code for command * 14 * Param 2 - Slot number for command * 15 * Param 3 - BCM for command * 16 * Param 4 - Address/Data for command * 17 * Param 5 - Delay time * 18 * * 19 * Data returned by the command is stored in DATA. This may * 20 * be a single word or as many as 16 words depending on the type * 21 * of command. The caller must know how much to expect. * 22 * The data is checked for errors and if one occurs we will * 23 * go to the the error address passed us. R1 will contain the * 24 * error code. * 25 * 0 - no error * 26 * 1 - system error occurred, error message printed, (return RDUSYSERR) * 27 * 2 - bus error occurred (return to RDUSYSERR) * 28 * 3 - system not initialized (return to RDUNOINIT) * 29 * 4 - CPU halted (return to RDUENTER) * 30 * 5 - user break request (return to RDUBRK) * 31 * 6 - bus error occurred, WRU(1) in R1 (CALLNP BUSERR * 32 * JMP RDUSYSERR) * 33 * 7 - some other error occurred, R0 => error message (return to RDUERR) * 34 * * 35 * SHIPCOMD is an entry for data ship with no BCM. * 36 * SHIPCOMT entry is for requesting a timed response. * 37 * SHIPCOMDT entry is for data ship with no BCM but timed. * 38 * SHIPCOM is the normal entry with no time delay. * 39 * * 40 * Eats R0:R3. * 41 * * 42 ********************************************************************************** 43 44 BLOCK 45 ENTRY SHIPCOM 46 ENTRY SHIPCOMD 47 ENTRY SHIPCOMDT 48 ENTRY SHIPCOMT 49 50 BEGFRAME 00178801 6 BASE 51 SCTIME BSS 1 flag for timed response 00178802 6 BASE 52 SCERRAD BSS 1 error address 00178803 6 BASE 53 SCSAVR4 BSS 1 save for R4 54 ENDFRAME 55 1BB97 DD1F8004 6 STAK 56 SHIPCOMD ENTR PUSH 1BB98 C1178802 6 BASE 57 STP SP,SCERRAD save the error address 1BB99 C141A932 58 STPV XCLASS set class code 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 190 (RDUUSUB) F 21 Utility subroutines 1BB9A C141A933 59 STPV XSLOT set slot number 1BB9B C041A934 60 STPVL XDATA set data word 1BB9C FE0FBBB2 61 JMP SCNOTIME then merge in 62 * --- 63 1BB9D DD1F8004 6 STAK 64 SHIPCOMT ENTR PUSH 1BB9E C1178802 6 BASE 65 STP SP,SCERRAD save the error address 1BB9F C141A932 66 STPV XCLASS set class 1BBA0 C141A933 67 STPV XSLOT set slot 1BBA1 C151AC0A @ 68 STPV @XBCM set bcm 1BBA2 C151AC0C @ 69 STPV @XADDR set data 1BBA3 C0578801 6 BASE 70 STPVL SP,SCTIME remember delay time 1BBA4 FE0FBBB3 71 JMP SC10 then merge in 72 * --- 73 1BBA5 DD1F8004 6 STAK 74 SHIPCOMDT ENTR PUSH 1BBA6 C1178802 6 BASE 75 STP SP,SCERRAD save the error address 1BBA7 C141A932 76 STPV XCLASS set class 1BBA8 C141A933 77 STPV XSLOT and slot 1BBA9 C141A934 78 STPV XDATA and the data 1BBAA C0578801 6 BASE 79 STPVL SP,SCTIME remember extra delay time 1BBAB FE0FBBB3 80 JMP SC10 then merge in 81 * --- 82 1BBAC DD1F8004 6 STAK 83 SHIPCOM ENTR PUSH 1BBAD C1178802 6 BASE 84 STP SP,SCERRAD save the error address 1BBAE C141A932 85 STPV XCLASS set class code 1BBAF C141A933 86 STPV XSLOT set slot number 1BBB0 C151AC0A @ 87 STPV @XBCM set BCM 1BBB1 C051AC0C @ 88 STPVL @XADDR set data 89 * \ / 90 0001BBB2 91 SCNOTIME LABEL 1BBB2 EC178801 6 BASE 92 STZ SP,SCTIME no extra delay time 0001BBB3 93 SC10 LABEL 1BBB3 5C01A933 94 CMZ XSLOT see if we have a slot 1BBB4 FE09BBCF 95 JLT SC90 if not then stop in our tracks 96 * \ / 97 1BBB5 6001A932 0 98 ld r0 xclass check class 1BBB6 64040005 0 IMM 99 cpr r0 klas5 is it a class five? 1BBB7 FE0DBBBF 100 jne noprob 1BBB8 6001A934 0 101 ld r0 xdata check data (BCM) 1BBB9 64026000 0 IMM 102 cpr r0 030000000 is it a clear all? 1BBBA FE0DBBBF 103 jne noprob 1BBBB 60178801 0 6 BASE 104 ld r0 sp,sctime check for extra time 1BBBC 64040005 0 IMM 105 cpr r0 5 ensure that it was requested 1BBBD FE07BBBF 106 jge noprob 1BBBE 00000000 107 halt 0 0001BBBF 108 noprob label 109 1BBBF E5178803 4 6 BASE 110 ST R4 SP,SCSAVR4 save R4 1BBC0 60578801 1 6 BASE 111 LD R1 SP,SCTIME get the extra wait time 1BBC1 DC01F6D8 112 CALL IORDYMSG prepare message for transmit 1BBC2 41524000 1 REG 113 PARV R1 tell I/O how long to wait 1BBC3 4141A932 114 PARV XCLASS pass class 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 191 (RDUUSUB) F 21 Utility subroutines 1BBC4 4141A933 115 PARV XSLOT pass slot 1BBC5 4041A934 116 PARVL XDATA pass data 117 118 * TCNONE 1BBC6 DC41F6F6 119 CALLNP XMIT send message to SSU 1BBC7 DC01F708 120 CALL GRESP now receive the response 1BBC8 4045BE59 IMM 121 PARVL ADR(RDULOST) bail out if lost system 1BBC9 61178803 4 6 BASE 122 LD R4 SP,SCSAVR4 restore R4 123 124 * TCRESTORE 1BBCA DC41BC01 125 CALLNP RESPCHECK check out the response 1BBCB FA45BBCD 1 126 JGTZ R1 SHPCMERR error occurred 1BBCC 5D1F8004 6 STAK 127 LEAVE POP 128 * --- 129 0001BBCD 130 SHPCMERR LABEL 1BBCD 61D78802 7 6 BASE 131 LD R7 SP,SCERRAD want to return to the error address 1BBCE 5D1F8004 6 STAK 132 LEAVE POP 133 * --- 134 0001BBCF 135 SC90 LABEL 1BBCF 6005CF1C 0 IMM 136 LD R0 ADR(ERM109) "no slot for this device" 1BBD0 FE0FBE35 137 JMP RDUERR complain loudly 138 * --- 139 140 END of SHIPCOM subroutines 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 192 (RDUUSUB) F 21 Utility subroutines 142 143 ********************************************************************************** 144 * * 145 * SHIPWRU sends a request to the remote machine similar * 146 * to SHIPCOM except it does no response checking and gets its * 147 * parameters from COM. * 148 * Call: * 149 * COM => command table entry * 150 * SBUFFW = slot number * 151 * CALLNP SHIPWRU * 152 * Eats R0:R3. * 153 * * 154 ********************************************************************************** 155 156 BLOCK 157 ENTRY SHIPWRU 158 159 BEGFRAME 00178801 6 BASE 160 SWSAVR4 BSS 1 save for R4 161 ENDFRAME 162 1BBD1 DD5F8002 6 STAK 163 SHIPWRU ENTRNP PUSH 1BBD2 EC11AC0C @ 164 STZ @XADDR set address to 0 1BBD3 60094C34 0 5 ZBM 165 LD R0 COM,GCNBCM 1BBD4 E411AC0A 0 @ 166 ST R0 @XBCM set bcm 1BBD5 E5178801 4 6 BASE 167 ST R4 SP,SWSAVR4 save R4 1BBD6 DC01F6D8 168 CALL IORDYMSG prepare message for transmit 1BBD7 41440000 IMM 169 PARV 0 tell I/O how long to wait 1BBD8 41494034 5 ZBM 170 PARV COM,GCNCLS class 1BBD9 4141A830 171 PARV SBUFFW slot 1BBDA 4041A934 172 PARVL XDATA data set by XADDR and XBCM 173 174 * TCNONE 1BBDB DC41F6F6 175 CALLNP XMIT send message to SSU 1BBDC DC01F708 176 CALL GRESP now receive the response 1BBDD 4045BE59 IMM 177 PARVL ADR(RDULOST) bail out if lost system 178 1BBDE 61178801 4 6 BASE 179 LD R4 SP,SWSAVR4 restore R4 180 181 * TCRESTORE 1BBDF 5D1F8002 6 STAK 182 LEAVE POP 183 * --- 184 185 END of SHIPWRU 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 193 (RDUUSUB) F 21 Utility subroutines 187 188 ********************************************************************************** 189 * * 190 * This is the SHIPDATA routine. It is used to ship a data * 191 * word to one of the accumulators. It needs two parameters. * 192 * The first is the ACC# (0-2), and the second is the 32-bit * 193 * data to be stored in the register. * 194 * The data is checked for remote machine errors and if an * 195 * error is found we will go to the error address passed by the * 196 * caller. * 197 * Call: * 198 * CALL SHIPDATA * 199 * PAR error address * 200 * PARV * 201 * PARVL * 202 * Eats R0:R3. * 203 * * 204 ********************************************************************************** 205 206 BLOCK 207 ENTRY SHIPDATA 208 209 BEGFRAME 00178801 6 BASE 210 SHIPERRAD BSS 1 error address 00178802 6 BASE 211 SDSAVR4 BSS 1 save for R4 212 ENDFRAME 213 1BBE0 DD1F8003 6 STAK 214 SHIPDATA ENTR PUSH 1BBE1 C1178801 6 BASE 215 STP SP,SHIPERRAD save the error return address 1BBE2 C141A933 216 STPV XSLOT set the register number 1BBE3 C041A934 217 STPVL XDATA set the data 1BBE4 60040007 0 IMM 218 LD R0 7 get class code 1BBE5 E401A932 0 219 ST R0 XCLASS set the class 1BBE6 E5178802 4 6 BASE 220 ST R4 SP,SDSAVR4 save R4 1BBE7 DC01F6D8 221 CALL IORDYMSG ready message for sending 1BBE8 41440000 IMM 222 PARV 0 don't add any extra time 1BBE9 4141A932 223 PARV XCLASS send class 1BBEA 4141A933 224 PARV XSLOT and slot 1BBEB 4041A934 225 PARVL XDATA and data 226 227 * TCNONE 228 1BBEC DC41F6F6 229 CALLNP XMIT send message to SSU 1BBED DC01F708 230 CALL GRESP now receive the response 1BBEE 4045BE59 IMM 231 PARVL ADR(RDULOST) where to go if lost remote system 232 1BBEF 61178802 4 6 BASE 233 LD R4 SP,SDSAVR4 restore R4 234 235 * TCRESTORE 236 1BBF0 DC41BC01 237 CALLNP RESPCHECK check out type of response 1BBF1 FA45BBF3 1 238 JGTZ R1 SHPDTERR error occurred 1BBF2 5D1F8003 6 STAK 239 LEAVE POP 240 * --- 241 0001BBF3 242 SHPDTERR LABEL 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 194 (RDUUSUB) F 21 Utility subroutines 1BBF3 61D78801 7 6 BASE 243 LD R7 SP,SHIPERRAD return to the error address 1BBF4 5D1F8003 6 STAK 244 LEAVE POP 245 * --- 246 247 END of SHIPDATA 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 195 (RDUUSUB) F 21 Utility subroutines 249 250 ********************************************************************************** 251 * * 252 * This table is used to determine what to do with error codes * 253 * returned by RESPCHEK. * 254 * Use: * 255 * R1 = error code from RESPCHEK * 256 * LDPC RESPTAB(R1) * 257 ** --- * 258 * * 259 * We also have a generic system wide error handler here. * 260 * Use: * 261 * R1 = error code * 262 * JMP RESPERROR * 263 ** --- * 264 * * 265 ********************************************************************************** 266 267 BLOCK 268 ENTRY RESPTAB 269 ENTRY RESPBUS 270 ENTRY RESPERROR 271 0001BBF5 272 RESPERROR LABEL 1BBF5 5CA3BBF6 1 273 LDPC RESPTAB(R1) 274 * --- 275 276 * Jump table indexed by error code given by RESPCHEK 1BBF6 0001BDC8 277 RESPTAB VFD ADR RDUOK 0 - no error 1BBF7 0001BEEF 278 VFD ADR RDUSYSERR 1 - system error occurred, error message printed 1BBF8 0001BEEF 279 VFD ADR RDUSYSERR 2 - bus error occurred 1BBF9 0001BF08 280 VFD ADR RDUNOINIT 3 - system not initialized 1BBFA 0001BEB0 281 VFD ADR RDUENTER 4 - CPU halted 1BBFB 0001BE49 282 VFD ADR RDUBRK 5 - user break request 1BBFC 0001BBFE 283 VFD ADR RESPBUS 6 - SSU bus error occurred 1BBFD 0001BE35 284 VFD ADR RDUERR 7 - some other error occurred 285 286 * This is where we come upon finding a bus error on the remote machine. 287 * We create and send a message to the operator then go to the standard 288 * RDU bus error handler. 289 0001BBFE 290 RESPBUS LABEL 1BBFE DC41C928 291 CALLNP DODESTROY ensure there is no DO file hanging around 1BBFF DC41BC69 292 CALLNP BUSERR create and send bus error message 1BC00 FE0FBEEF 293 JMP RDUSYSERR go see what to do now 294 * --- 295 296 END of error response handler 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 196 (RDUUSUB) F 21 Utility subroutines 298 299 ********************************************************************************** 300 * * 301 * This is the RESPCHECK routine. It examines each response from * 302 * the remote system to check for problems or for data for port 0. * 303 * It returns an error code in R1: * 304 * 0 - no error * 305 * 1 - system error occurred, error message printed, (return RDUSYSERR) * 306 * 2 - bus error occurred (return to RDUSYSERR) * 307 * 3 - system not initialized (return to RDUNOINIT) * 308 * 4 - CPU halted (return to RDUENTER) * 309 * 5 - user break request (return to RDUBRK) * 310 * 6 - bus error occurred, WRU(1) in R1 (CALLNP BUSERR * 311 * JMP RDUSYSERR) * 312 * 7 - some other error occurred, R0 => error message (return to RDUERR) * 313 * * 314 * Eats R0:R3 * 315 * * 316 ********************************************************************************** 317 318 BLOCK 319 ENTRY RESPCHECK 320 321 BEGFRAME 322 ENDFRAME 323 1BC01 DD5F8001 6 STAK 324 RESPCHECK ENTRNP PUSH 1BC02 D181A8E3 325 CLRT ORIGIN see where command came from 1BC03 FE0DBC13 326 JNE RSCKCONC jump if concurrent process 1BC04 6001A8D7 0 327 LD R0 CPSTATE see who gets responses 1BC05 64040002 0 IMM 328 CPR R0 2 do responses go to C.P.? 1BC06 FE03BC13 329 JEQ RSCKCONC jump if that's the case 1BC07 EC12C000 3 REG 330 STZ R3 start at the front 331 * \ / 332 0001BC08 333 RSCK10 LABEL 1BC08 6227F38D 01 3 334 LD2 R0 DATA(R3) get one response 1BC09 DC41BC1B 335 CALLNP CHEKRESP see what the response is like 1BC0A FA47BC0C 1 336 JGEZ R1 RSCKEXIT if can't continue then don't 1BC0B FAE1BC08 3 337 IRJ R3 RSCK10 advance to next response 338 * --- 339 0001BC0C 340 RSCKEXIT LABEL 1BC0C 5C01A8E0 341 CMZ UBREAK does user want in? 1BC0D FE03BC12 342 JEQ RSCKLEAVE leave if not 343 * \ / 344 1BC0E 5C01A8D6 345 CMZ STATE are we interactive? 1BC0F FE0DBC12 346 JNE RSCKLEAVE if not then let someone else handle it 1BC10 EC01A8E0 347 STZ UBREAK 1BC11 60440005 1 IMM 348 LD R1 5 say a break occurred 349 * \ / 350 0001BC12 351 RSCKLEAVE LABEL 1BC12 5D1F8001 6 STAK 352 LEAVE POP 353 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 197 (RDUUSUB) F 21 Utility subroutines 354 355 * The response from the remote machine is meant for a concurrent process. 0001BC13 356 RSCKCONC LABEL 1BC13 60048040 0 IMM 357 LD R0 FRWRITE+XRSUSPERR get request to write, no susp 1BC14 6041F38B 1 358 LD R1 RTNCOUNT get length of response 1BC15 1C440008 1 IMM 359 MUL R1 NCPW*2 make into character count 1BC16 18440004 1 IMM 360 ADD R1 4 add for our header 1BC17 6085F38C 2 IMM 361 LD R2 ADR(DATAHEAD) point to response data 1BC18 0881A91C 362 FREQ PATHS(1+XREQ) and ship to remote system 1BC19 60440000 1 IMM 363 LD R1 0 say a normal condition exists 1BC1A FE0FBC12 364 JMP RSCKLEAVE and get out of here 365 * --- 366 367 END of RESPCHECK 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 198 (RDUUSUB) F 21 Utility subroutines 369 370 ********************************************************************************** 371 * * 372 * CHEKRESP classifies the remote machine response in R0 and * 373 * returns an error code in R1. RESPCHEK has a list of error code * 374 * definitions. If port zero data is response it is sent to user. * 375 * R1 contains -1 if not last item or abnormal condition. * 376 * Call: * 377 * LD2 R0 DATA(R3) * 378 * R3 = index into DATA * 379 * CALLNP CHEKRESP * 380 * JGTZ R1 abnormal condition * 381 * JEQZ R1 no more data * 382 * JLTZ R1 more data * 383 * * 384 * Eats R0:R2 * 385 * * 386 ********************************************************************************** 387 388 BLOCK 389 ENTRY CHEKRESP 390 391 BEGFRAME 392 ENDFRAME 393 1BC1B DD5F8001 6 STAK 394 CHEKRESP ENTRNP PUSH 1BC1C F611BC55 0 395 JBT R0/XRERR CKRS50 jump if error response 1BC1D F615BC22 0 396 JBT R0/XRACK CKRS20 jump if an ACK response 0001BC1E 397 CKRSNEXT LABEL 1BC1E 6047FFFF 1 IMM 398 LD R1 -1 guess nothing interesting about response 1BC1F F213BC21 0 399 JBF R0/XRLST CKRSLEAVE exit if true 1BC20 60440000 1 IMM 400 LD R1 0 say last response occurred 0001BC21 401 CKRSLEAVE LABEL 1BC21 5D1F8001 6 STAK 402 LEAVE POP return 403 * --- 404 405 * We got an ACK (RKLAS2, RKLAS2, or RKLAS7 response). See 406 * if some interactive data came with it. 0001BC22 407 CKRS20 LABEL 1BC22 5C0A1610 0 CBM 408 CMZ R0/XRIOK input enabled? 1BC23 ED81A8E1 409 STLNE IOK keep our flag in sync 1BC24 604A1840 1 0 CBM 410 LD R1 R0/XMSGSLOT get slot code 1BC25 FA43BC46 1 411 JEQZ R1 CKRS30 jump if no port zero data 1BC26 64440005 1 IMM 412 CPR R1 REMBREAK break or dwell? 1BC27 FE07BC36 413 JGE CKRS25 check for break or dwell 414 * \ / 415 416 ********************************************************************************** 417 * * 418 * We've ruled out break, dwell, and higher subtypes. Assume * 419 * XMSGSLOT holds subtype for data transmission (one to four * 420 * characters in the data word, quantified by subtype value * 421 * in R1). * 422 * * 423 ********************************************************************************** 424 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 199 (RDUUSUB) F 21 Utility subroutines 1BC28 5C01A8D9 425 CMZ XFERFLAG see if we are transferring a file 1BC29 FE0DBC33 426 JNE CKRSXFER jump if so 1BC2A 3AA7F38E 2 3 427 LEA2 R2 DATAW(R3) point to the actual data 1BC2B 60040042 0 IMM 428 LD R0 FRWRITEB get code to write 1BC2C DC41CCC7 429 CALLNP SAVEEVENT save the binary event. 1BC2D 5C01A8DC 430 CMZ DOSUPP are we suppressing interactive data 1BC2E FE0DBC30 431 JNE CKRS22 if so then don't list it 1BC2F 08840002 IMM 432 FREQ LUNSOUT+XREQ ship out to user port 0001BC30 433 CKRS22 LABEL 1BC30 DC41CCDA 434 CALLNP LOGRESP go log the event 1BC31 DC41C997 435 CALLNP FILLDOBUF save for Receive (if needed) 1BC32 FE0FBC4D 436 JMP CKRS40 back for another data word 437 * --- 438 439 * R1 has count of chars. 0001BC33 440 CKRSXFER LABEL do file transfer 1BC33 3AA7F38E 2 3 441 LEA2 R2 DATAW(R3) R2 -> characters 1BC34 DC41F202 442 CALLNP RDUTOXFER move chars from RDU to file transfer 1BC35 FE0FBC4D 443 JMP CKRS40 keep on going 444 * --- 445 446 ********************************************************************************** 447 * * 448 * Subtype is for break, or higher. Only other valid subtype * 449 * is dwell. * 450 * * 451 ********************************************************************************** 452 0001BC36 453 CKRS25 LABEL 1BC36 64440006 1 IMM 454 CPR R1 REMDWELL is it a dwell? 1BC37 FE03BC3D 455 JEQ CKRSDWELL if so, send dwell to the terminal 1BC38 FE05BC4D 456 JGT CKRS40 ignore all of this stuff 457 * \ / 458 459 * must be BREAK sent from SSU 1BC39 6227F38D 01 3 460 LD2 R0 DATA(R3) length in characters of the break 1BC3A 600401B5 0 IMM 461 LD R0 FRTBREAK send break to terminal 1BC3B 08840002 IMM 462 FREQ LUNSOUT send to the output terminal 1BC3C FE0FBC4D 463 JMP CKRS40 and continue through the data 464 * --- 465 0001BC3D 466 CKRSDWELL LABEL 1BC3D 6004012C 0 IMM 467 LD R0 FRTGETIRAT get terminals input baud rate 1BC3E 08840002 IMM 468 FREQ LUNSOUT standard terminal unit 1BC3F 60924000 2 1 REG 469 LD R2 R1 put in R2 for safety 1BC40 6227F38D 01 3 470 LD2 R0 DATA(R3) number of characters to send 1BC41 1C442710 1 IMM 471 MUL R1 10000 convert to msecs 1BC42 14528000 1 2 REG 472 DIV R1 R2 finish converting using our baud rate 1BC43 600401B4 0 IMM 473 LD R0 FRTDELAY request terminal delay 1BC44 08840002 IMM 474 FREQ LUNSOUT on this terminal 1BC45 FE0FBC4D 475 JMP CKRS40 and continue through the data 476 * --- 477 478 ********************************************************************************** 479 * * 480 * ACK with further information about the state of the * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 200 (RDUUSUB) F 21 Utility subroutines 481 * remote system. * 482 * * 483 ********************************************************************************** 484 0001BC46 485 CKRS30 LABEL 1BC46 5C11AC0B @ 486 CMZ @STOPPED do we think it's running? 1BC47 FE0DBC4D 487 JNE CKRS40 if not then no error checks 1BC48 6227F38D 01 3 488 LD2 R0 DATA(R3) retrieve data words 1BC49 E441A8DE 1 489 ST R1 SYSSTAT remember system status 1BC4A F65BBC4F 1 490 JBT R1/SBSE CKRSSYSERR jump if bus error asserted 1BC4B F655BC51 1 491 JBT R1/SNIT CKRSNOINIT jump if system not initialized 1BC4C F653BC53 1 492 JBT R1/SERR CKRSENTER enter RDU mode if halted CPU 0001BC4D 493 CKRS40 LABEL 1BC4D 6227F38D 01 3 494 LD2 R0 DATA(R3) retrieve data words 1BC4E FE0FBC1E 495 JMP CKRSNEXT then return to other checks 496 * --- 497 0001BC4F 498 CKRSSYSERR LABEL 1BC4F 60440002 1 IMM 499 LD R1 2 say bus error happened 1BC50 FE0FBC21 500 JMP CKRSLEAVE 501 * --- 502 0001BC51 503 CKRSNOINIT LABEL 1BC51 60440003 1 IMM 504 LD R1 3 say system is not initialized 1BC52 FE0FBC21 505 JMP CKRSLEAVE 506 * --- 507 0001BC53 508 CKRSENTER LABEL 1BC53 60440004 1 IMM 509 LD R1 4 say CPU halted 1BC54 FE0FBC21 510 JMP CKRSLEAVE 511 * --- 512 513 ********************************************************************************** 514 * * 515 * The response class indicates the presence of an error on * 516 * the remote machine. The low three bits of the class field are * 517 * the error code if the error bit is turned on. We recognize * 518 * three types of errors. They are: * 519 * 8 - Command error * 520 * 9 - SSU detected a bus error * 521 * A - Some other VRA slot detected a bus error * 522 * * 523 ********************************************************************************** 524 0001BC55 525 CKRS50 LABEL 1BC55 608A1230 2 0 CBM 526 LD R2 R0/XRERRCODE get the error class 1BC56 64840002 2 IMM 527 CPR R2 MAXERRCODE see if within reason 1BC57 FE05BC65 528 JGT UNKNOWNERR jump if not 1BC58 5CA5BC59 2 529 LDPC CKRSJTAB(R2) act on code 530 * --- 531 0001BC59 532 CKRSJTAB LABEL 1BC59 0001BC5C 533 VFD ADR CMNDERR command error 1BC5A 0001BC60 534 VFD ADR SSUBUSERR SSU detected bus error 1BC5B 0001BC63 535 VFD ADR VRABUSERR VRA module detected bus error 00000002 ABS 536 MAXERRCODE EQU (DISPW CKRSJTAB)-1 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 201 (RDUUSUB) F 21 Utility subroutines 537 0001BC5C 538 CMNDERR LABEL 1BC5C 7844000F 1 IMM 539 AND R1 0F chop off any crud 1BC5D 6023D3BA 0 1 540 LD R0 E1TAB(R1) get pointer to error message 1BC5E 60440007 1 IMM 541 LD R1 7 say miscellaneous error 1BC5F FE0FBC21 542 JMP CKRSLEAVE 543 * --- 544 0001BC60 545 SSUBUSERR LABEL 1BC60 E441A8ED 1 546 ST R1 VALUE save response 1BC61 60440006 1 IMM 547 LD R1 6 bus error, call BUSERR 1BC62 FE0FBC21 548 JMP CKRSLEAVE 549 * --- 550 0001BC63 551 VRABUSERR LABEL 1BC63 6005D046 0 IMM 552 LD R0 ADR(ERM153) "Bus error" 1BC64 FE0FBC66 553 JMP CKRSOUTERR 554 * --- 555 0001BC65 556 UNKNOWNERR LABEL 1BC65 6005CECE 0 IMM 557 LD R0 ADR(ERM000) for now 558 * \ / 0001BC66 559 CKRSOUTERR LABEL 1BC66 DC41B88A 560 CALLNP OUT list the error 1BC67 60440001 1 IMM 561 LD R1 1 say system error 1BC68 FE0FBC21 562 JMP CKRSLEAVE 563 * --- 564 565 END of CHEKRESP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 202 (RDUUSUB) F 21 Utility subroutines 567 568 ********************************************************************************** 569 * * 570 * BUSERR creates a bus error message and sends it to the user. * 571 * Call: * 572 * VALUE = WRU(1) * 573 * CALLNP BUSERR * 574 * Eats R0:R3. * 575 * * 576 ********************************************************************************** 577 578 BLOCK 579 ENTRY BUSERR 580 581 BEGFRAME 582 ENDFRAME 583 1BC69 DD5F8001 6 STAK 584 BUSERR ENTRNP PUSH 1BC6A DC41B86C 585 CALLNP BLANKOUTW clear a path 1BC6B 6005D03E 0 IMM 586 LD R0 ADR(ERM152) "Bus error from remote system - " 1BC6C DC41B87B 587 CALLNP MESSMOVE start a line 1BC6D 6001A8ED 0 588 LD R0 VALUE get the response back 1BC6E 600A0040 0 0 CBM 589 LD R0 R0/BITS 0:3 get just the sub-class 1BC6F 6021D3C2 0 0 590 LD R0 E2TAB(R0) get type of bus error message 1BC70 DC41B87B 591 CALLNP MESSMOVE add to the line 1BC71 DC41B886 592 CALLNP OUTO then list it out 1BC72 DC41B86C 593 CALLNP BLANKOUTW clear listing buffer 1BC73 6005CDEE 0 IMM 594 LD R0 ADR(MESWRU1) "SSU WRU(1):" 1BC74 DC41B87B 595 CALLNP MESSMOVE put message in buffer 1BC75 DC41B5F1 596 CALLNP HEXOUT ship out the whole word 1BC76 DC41B886 597 CALLNP OUTO list out the line 1BC77 DC01C064 598 CALL WRU1LIST decode and list the WRU(1) 1BC78 4141A97F 599 PARV SSUSLOT the slot number 1BC79 4041A8ED 600 PARVL VALUE the WRU(1) response 1BC7A 5D1F8001 6 STAK 601 LEAVE POP 602 * --- 603 604 END of BUSERR subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 203 (RDUUSUB) F 21 Utility subroutines 606 607 ********************************************************************************** 608 * * 609 * This is the SHIPNOP routine. It is called to send a NOP * 610 * to the remote machine. This is done whenever the I/O routines * 611 * timeout while waiting for input from the user. We do check * 612 * the I/O buffer and if there are characters hanging around we * 613 * will send them too. After the NOP is sent, we just go back to * 614 * waiting some more. * 615 * Call: * 616 * CALLNP SHIPNOP * 617 * There is a version that picks up some input from the * 618 * user while trying to receive port zero output as rapidly * 619 * as possible. * 620 * Call: * 621 * CALLNP SHIPNOPRD * 622 * * 623 * Eats R0:R3. * 624 * * 625 ********************************************************************************** 626 627 BLOCK 628 ENTRY SHIPNOP 629 ENTRY SHIPNOPRD 630 631 BEGFRAME 00178801 6 BASE 632 SNCC BSS 1 count of characters to send 00178802 6 BASE 633 SNOUTC BSS 1 count of messages out 00178803 6 BASE 634 SNBPTR BSS 1 pointer to first outstanding msg 00178804 6 BASE 635 SNSAVR4 BSS 1 location to save R4 636 ENDFRAME 637 000BC020 7 CBM 638 SNFLAGS EQU R7/BITS 0:1 flag field 000BC010 7 CBM 639 SNRDFLG EQU SNFLAGS/BIT 30 indicates we can read in between NOPS 000BC210 7 CBM 640 SNMULFLG EQU SNFLAGS/BIT 31 indicates new SSU microcode 641 1BC7B DD5F8005 6 STAK 642 SHIPNOPRD ENTRNP PUSH 1BC7C EDCBC010 7 CBM 643 STW SNRDFLG indicate read lines in between 1BC7D FE0FBC80 644 JMP SN05 and enter other routine 645 * --- 646 1BC7E DD5F8005 6 STAK 647 SHIPNOP ENTRNP PUSH 1BC7F EC0BC010 7 CBM 648 STZ SNRDFLG indicate no terminal reads 0001BC80 649 SN05 LABEL 1BC80 EDCBC210 7 CBM 650 STW SNMULFLG tentatively indicate new SSU microcode 1BC81 60100000 0 @ 651 LD R0 SSUREV get current SSU ucode revision 1BC82 64040010 0 IMM 652 CPR R0 SSUREVMM can it do multiple messages? 1BC83 FE07BC85 653 JGE SN07 jump if so 1BC84 EC0BC020 7 CBM 654 STZ SNFLAGS clear both flags if not 0001BC85 655 SN07 LABEL 656 1BC85 E5178804 4 6 BASE 657 ST R4 SP,SNSAVR4 save R4 1BC86 EC178802 6 BASE 658 STZ SP,SNOUTC clear count of msgs out 1BC87 EC178803 6 BASE 659 STZ SP,SNBPTR (for safety) clear initial ptr 0001BC88 660 SN10 LABEL 1BC88 EC01A8E4 661 STZ CPZDATA clear character data to send 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 204 (RDUUSUB) F 21 Utility subroutines 1BC89 EC178801 6 BASE 662 STZ SP,SNCC zero character count 1BC8A 5C01A8E1 663 CMZ IOK is input being accepted? 1BC8B FE03BCA0 664 JEQ SN30 if not then don't send any 665 * \ / 666 1BC8C 6041A911 1 667 LD R1 CPI get character input pointer 1BC8D 1041A912 1 668 SUB R1 CPO how many characters to send? 1BC8E FA43BC9A 1 669 JEQZ R1 SN20 jump if nothing to send 1BC8F E4578801 1 6 BASE 670 ST R1 SP,SNCC save the character count 1BC90 BC01A912 0 671 INCL R0 CPO get the output pointer 1BC91 50440004 1 IMM 672 MIN R1 MAXOCHAR keep count realistic 1BC92 3831A884 0 0 @ 673 LEA R0 @SHIPBPT(R0) point to characters to send 1BC93 3881A8E4 2 674 LEA R2 CPZDATA and to the data word 1BC94 FE400000 675 CMOVE move the shit over 1BC95 60578801 1 6 BASE 676 LD R1 SP,SNCC get the character count back 1BC96 64440004 1 IMM 677 CPR R1 MAXOCHAR are there more than four? 1BC97 FE05BCAA 678 JGT SN40 jump if lots to send 679 * \ / 1BC98 5C178802 6 BASE 680 CMZ SP,SNOUTC any msgs out? 1BC99 FE0DBCAA 681 JNE SN40 jump to add on this one 682 0001BC9A 683 SN20 LABEL (buffer empty) 1BC9A D141A911 684 STMW CPI clear input pointer 1BC9B D141A912 685 STMW CPO and also output pointer 1BC9C F3C1BCA0 7 686 JBF SNRDFLG SN30 jump if no reads or input force 1BC9D 6001F38B 0 687 LD R0 RESPBINDX see how much we got last time 1BC9E 64040010 0 IMM 688 CPR R0 MAXRESPS was it a full house? 1BC9F FE03BCB4 689 JEQ SNDOMULT if so, go try to force char return 0001BCA0 690 SN30 LABEL (can't send any more) 1BCA0 5C178802 6 BASE 691 CMZ SP,SNOUTC any msgs out? 1BCA1 FE0DBCC2 692 JNE SNMO40 jump to pick up the response 693 1BCA2 60578801 1 6 BASE 694 LD R1 SP,SNCC get character count 1BCA3 DC01BB97 695 CALL SHIPCOMD now send out the nop 1BCA4 4101BBF5 696 PAR RESPERROR where to go on error 1BCA5 41440008 IMM 697 PARV KLAS8 class=8 1BCA6 41524000 1 REG 698 PARV R1 slot=count of characters 1BCA7 4041A8E4 699 PARVL CPZDATA data=characters to send 700 1BCA8 61178804 4 6 BASE 701 LD R4 SP,SNSAVR4 restore R4 1BCA9 5D1F8005 6 STAK 702 LEAVE POP 703 * --- 704 705 ********************************************************************************** 706 * We come here when there are more than 4 characters in * 707 * the buffer to be sent or there are multiple messages. * 708 ********************************************************************************** 709 0001BCAA 710 SN40 LABEL 1BCAA 50440004 1 IMM 711 MIN R1 MAXOCHAR calculate how many chars moved this time 1BCAB E4561001 1 0 REG 712 ST R1 R0+1 adjust for one already counted 1BCAC 9801A912 0 713 ADDM R0 CPO adjust for characters sent 714 1BCAD F7C3BCB4 7 715 JBT SNMULFLG SNDOMULT jump if new SSU ucode 716 1BCAE DC01BB97 717 CALL SHIPCOMD send out the characters 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 205 (RDUUSUB) F 21 Utility subroutines 1BCAF 4101BBF5 718 PAR RESPERROR where to go on error 1BCB0 41440008 IMM 719 PARV KLAS8 class=8 1BCB1 41524000 1 REG 720 PARV R1 slot=number of chars 1BCB2 4041A8E4 721 PARVL CPZDATA data=characters to send 1BCB3 FE0FBC88 722 JMP SN10 then see if still more 723 * --- 724 725 ********************************************************************************** 726 * We are talking to an SSU with newer ucode that * 727 * can accept multiple inputs (up to 3). Therefore, * 728 * we can send multiple messages before checking the * 729 * response. This can significantly improve throughput. * 730 ********************************************************************************** 731 0001BCB4 732 SNDOMULT LABEL 1BCB4 60578801 1 6 BASE 733 LD R1 SP,SNCC get character count 1BCB5 50440004 1 IMM 734 MIN R1 MAXOCHAR keep count realistic 1BCB6 DC01F6D8 735 CALL IORDYMSG prepare message for transmit 1BCB7 41440000 IMM 736 PARV 0 tell I/O extra wait time 1BCB8 41440008 IMM 737 PARV KLAS8 pass class 1BCB9 41524000 1 REG 738 PARV R1 slot=count of characters 1BCBA 4041A8E4 739 PARVL CPZDATA data=characters to send 740 1BCBB 5C178802 6 BASE 741 CMZ SP,SNOUTC are any messages now out? 1BCBC FE0DBCBE 742 JNE SNDOM10 jump if so 1BCBD E5178803 4 6 BASE 743 ST R4 SP,SNBPTR otherwise, store first MH block ptr 0001BCBE 744 SNDOM10 LABEL 1BCBE DC41F6F6 745 CALLNP XMIT send message to SSU 746 1BCBF BC178802 0 6 BASE 747 INCL R0 SP,SNOUTC add count for this message 1BCC0 64040003 0 IMM 748 CPR R0 3 check for maximum 1BCC1 FE09BC88 749 JLT SN10 jump if below max, try some more 750 * \ / 0001BCC2 751 SNMO40 LABEL pick up response 1BCC2 61178803 4 6 BASE 752 LD R4 SNBPTR get pointer to next MH block 1BCC3 DC01F708 753 CALL GRESP now receive the response 1BCC4 4045BE59 IMM 754 PARVL ADR(RDULOST) bail out if lost system 755 1BCC5 DC41BC01 756 CALLNP RESPCHECK check out the response 1BCC6 FA43BCC8 1 757 JEQZ R1 SNMO50 jump if no error 1BCC7 61E3BBF6 7 1 758 LD R7 RESPTAB(R1) error, set return, and clear flags 0001BCC8 759 SNMO50 LABEL 760 1BCC8 60170800 0 4 BASE 761 LD R0 R4,MHLINK get link to next element 1BCC9 E4178803 0 6 BASE 762 ST R0 SP,SNBPTR and save as next pointer 1BCCA D0578802 6 BASE 763 DEC SP,SNOUTC and decrement count 764 1BCCB F3C1BC88 7 765 JBF SNRDFLG SN10 jump if no reading 1BCCC DC41B3B3 766 CALLNP READLINENW check for input without waiting 1BCCD FA09BC88 0 767 JLTZ R0 SN10 jump if no input 1BCCE 6481A8EF 2 768 CPR R2 EXITCHAR is this our switch char? 1BCCF FE0DBCD1 769 JNE SNM90 jump if not 1BCD0 61C5BE7D 7 IMM 770 LD R7 ADR RDUGO enter new return address and clear flags 0001BCD1 771 SNM90 LABEL 1BCD1 BC41A911 1 772 INCL R1 CPI get input pointer 1BCD2 64440078 1 IMM 773 CPR R1 CBLEN more room in input buffer? 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 206 (RDUUSUB) F 21 Utility subroutines 1BCD3 FE09BCD7 774 JLT SNM95 jump if okay 1BCD4 61C5BE3F 7 IMM 775 LD R7 ADR RDU96 enter new return address and clear flags 1BCD5 D041A911 776 DEC CPI count back the buffer pointer 1BCD6 FE0FBCA0 777 JMP SN30 and continue 0001BCD7 778 SNM95 LABEL 1BCD7 E4B3AC03 2 1 @ 779 ST R2 @CBPT(R1) add to the input buffer 1BCD8 FE0FBC88 780 JMP SN10 781 * --- 782 783 END of SHIPNOP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 207 (RDUUSUB) F 21 Utility subroutines 785 786 ********************************************************************************** 787 * * 788 * This is the RFPBREAK routine. It is called by the I/O * 789 * processor whenever it gets hit with a Break from the user. * 790 * We simply set the break flag indicating that a break occurred. * 791 * Call: * 792 * CALLNP RFPBREAK * 793 * Eats no registers. * 794 * * 795 ********************************************************************************** 796 797 BLOCK 798 ENTRY RFPBREAK 799 800 BEGFRAME 801 ENDFRAME 802 1BCD9 DD5F8001 6 STAK 803 RFPBREAK ENTRNP PUSH 1BCDA EDC1A8E0 804 STW UBREAK say user hit break 1BCDB 5D1F8001 6 STAK 805 LEAVE POP 806 * --- 807 808 END of RDFBREAK subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 208 (RDUUSUB) F 21 Utility subroutines 810 811 ********************************************************************************** 812 * * 813 * This is the SLOTCHECK routine. It verifies the slot of the * 814 * newly-selected bus device to be sure that there is a working * 815 * module on the bus at that slot and that the device type matches * 816 * that selected by the user. If all is well, it just returns, but * 817 * if there is any trouble then an exit is made to list the error. * 818 * Call: * 819 * R0 = new slot number * 820 * COM -> command element * 821 * CALLNP SLOTCHECK * 822 * R1 = new slot's WRU(0) * 823 * NEWSLOT = new slot number * 824 * NEWWRU = new slot's WRU(0) * 825 * * 826 * Eats R1. * 827 * * 828 ********************************************************************************** 829 830 BLOCK 831 ENTRY SLOTCHECK 832 833 BEGFRAME 00178801 6 BASE 834 CHKTEMP BSS2 1 temp 835 ENDFRAME 836 1BCDC DD5F8003 6 STAK 837 SLOTCHECK ENTRNP PUSH 1BCDD E401A925 0 838 ST R0 NEWSLOT save the desired slot number 1BCDE E6978801 236 BASE 839 ST2 R2 SP,CHKTEMP save r2,r3 from harm 1BCDF DC01BBAC 840 CALL SHIPCOM now see what is really there 1BCE0 4101BBF5 841 PAR RESPERROR where to go on error 1BCE1 41440000 IMM 842 PARV KLAS0 class=0 1BCE2 4141A925 843 PARV NEWSLOT slot=new 1BCE3 41440004 IMM 844 PARV BCMWRU bcm=4 (wru) 1BCE4 40440000 IMM 845 PARVL 0 address=0 1BCE5 6001F38E 0 846 LD R0 DATA(1) check the response 1BCE6 600A0040 0 0 CBM 847 LD R0 R0/XMSGBCM get message class 1BCE7 64174805 0 5 BASE 848 CPR R0 COM,COMDEV does device match command? 1BCE8 FE0DBCED 849 JNE CHK90 if not then user loses 1BCE9 E441A926 1 850 ST R1 NEWWRU remember the wru result 1BCEA 6001A925 0 851 LD R0 NEWSLOT get slot back 1BCEB 62978801 236 BASE 852 LD2 R2 SP,CHKTEMP restore r2, r3 1BCEC 5D1F8003 6 STAK 853 LEAVE POP 854 * --- 855 0001BCED 856 CHK90 LABEL 1BCED 6005CEEE 0 IMM 857 LD R0 ADR(ERM105) "Wrong device for slot" 1BCEE FE0FBE35 858 JMP RDUERR 859 * --- 860 861 END of SLOTCHECK 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 209 (RDUUSUB) F 21 Utility subroutines 863 864 ********************************************************************************** 865 * * 866 * FIXUPMCUS. This subroutine sends a WRU4 to each MCU on the * 867 * system. This is a software kludge to handle MCU design * 868 * oddity. When an MCU is issued a CLEARALL, WRU0, WRU1, or * 869 * WRU2 it enters a state where it attempts to preserve bus * 870 * error information. In this state, some commands (e.g. * 871 * double-word reads and WRU memory size info) will not operate * 872 * correctly. A WRU3 or WRU4 is required to restore normalcy * 873 * before further operations (e.g. BCMGO) are attempted. * 874 * Call: * 875 * * 876 * CALLNP FIXUPMCUS * 877 * * 878 * Eats R0:R4 * 879 * * 880 ********************************************************************************** 881 882 BLOCK FIXUPMCUS subroutine 883 884 ENTRY FIXUPMCUS clear up MCU registers 885 886 BEGFRAME 887 ENDFRAME 888 1BCEF DD5F8001 6 STAK 889 FIXUPMCUS ENTRNP PUSH 1BCF0 6104000F 4 IMM 890 LD R4 MAXSLOT get slot count 0001BCF1 891 FUMLOOP LABEL 1BCF1 6029A96B 0 4 892 LD R0 SLOTTYPE(R4) get the slot type 1BCF2 64040001 0 IMM 893 CPR R0 DEVMCU maybe an mcu? 1BCF3 FE0DBCFA 894 JNE FUMNEXT if not then go away 895 * \ / 896 1BCF4 DC01BBAC 897 CALL SHIPCOM send wru 4 to restore MCU size register 1BCF5 4101BBF5 898 PAR RESPERROR error address 1BCF6 41440000 IMM 899 PARV KLAS0 class=0 1BCF7 41530000 4 REG 900 PARV R4 slot=ours 1BCF8 41440004 IMM 901 PARV BCMWRU bcm=5 1BCF9 40440004 IMM 902 PARVL 4 addr=4 903 * \ / 904 0001BCFA 905 FUMNEXT LABEL 1BCFA FB27BCF1 4 906 JDR R4 FUMLOOP cycle through all slots 907 * \ / 908 1BCFB 5D1F8001 6 STAK 909 LEAVE POP 910 * --- 911 912 END of FIXUPMCUS subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 210 (RDUUSUB) F 21 Utility subroutines 914 915 ********************************************************************************** 916 * * 917 * This is the PROCMAKE routine. It is called to pick up a code * 918 * file and make a concurrent process out of it. Of course, it must * 919 * also establish path links to the process for communication. * 920 * When called, LBUFPT should point to the file name in the input * 921 * buffer. It will return with the process started, the path luns * 922 * in PATHS, and the process number in PROC. * 923 * * 924 * Eats R0:R3. * 925 * * 926 ********************************************************************************** 927 928 BLOCK 929 ENTRY PROCMAKE 930 931 BEGFRAME 00178801 6 BASE 932 PRMLUN BSS 1 lun for concurrent process 933 ENDFRAME 934 1BCFC DD5F8002 6 STAK 935 PROCMAKE ENTRNP PUSH 1BCFD 6001A8E6 0 936 LD R0 LBUFPT get input buffer pointer 1BCFE E401A8E5 0 937 ST R0 BUFPT backup to look again 1BCFF 6001AC13 0 938 LD R0 EXTCODE we want code files 1BD00 DC41BD4A 939 CALLNP FILEGET go try to equip the thing 1BD01 FA0DBE35 0 940 JNEZ R0 RDUERR go straight to jail if trouble 1BD02 E4578801 1 6 BASE 941 ST R1 SP,PRMLUN save the unit a moment 1BD03 DC41BD0E 942 CALLNP PATHMAKE go set up a path pair 1BD04 E641A91B 12 943 ST2 R1 PATHS save unit numbers of ends 1BD05 DC41BD0E 944 CALLNP PATHMAKE make another path 1BD06 E041A91B 1 945 EXCH R1 PATHS get an end of each 1BD07 60040133 0 IMM 946 LD R0 FRCONCP make concurrent process 1BD08 08978801 6 BASE 947 FREQ SP,PRMLUN or at least ask system to 1BD09 FA09BD0C 0 948 JLTZ R0 PRM90 well, did we do it? 1BD0A E401A91D 0 949 ST R0 PROC remember the process number 1BD0B 5D1F8002 6 STAK 950 LEAVE POP 951 * --- 952 0001BD0C 953 PRM90 LABEL 1BD0C 6005D2C7 0 IMM 954 LD R0 ADR(ERM511) "Could not make it" 1BD0D FE0FBE35 955 JMP RDUERR that's the breaks 956 * --- 957 958 END of PROCMAKE 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 211 (RDUUSUB) F 21 Utility subroutines 960 961 ********************************************************************************** 962 * * 963 * This is the PATHMAKE routine. It is called to establish * 964 * a path for use in concurrent process I/O. The units returned * 965 * are either end of a single path, one with read-only access and * 966 * one with read-write access. They are local units. * 967 * * 968 * * 969 * Call: CALLNP PATHMAKE * 970 * ST R1 * 971 * ST R2 * 972 * * 973 * Eats R0:R2. * 974 * * 975 ********************************************************************************** 976 977 BLOCK 978 ENTRY PATHMAKE 979 980 BEGFRAME 00178801 6 BASE 981 PTMLUN BSS 1 one of the luns 982 ENDFRAME 983 1BD0E DD5F8002 6 STAK 984 PATHMAKE ENTRNP PUSH 1BD0F 60040122 0 IMM 985 LD R0 URFREELUN get unit for writing end 1BD10 09040064 IMM 986 UREQ MAXLOCAL+XREQ start at the very top 1BD11 FA09BD1C 0 987 JLTZ R0 PTM90 complain if none to be had 1BD12 E4578801 1 6 BASE 988 ST R1 SP,PTMLUN remember the unit 989 * \ / 990 1BD13 60040122 0 IMM 991 LD R0 URFREELUN get unit for reading end 1BD14 10440001 1 IMM 992 SUB R1 1 start one down from writer 1BD15 09165000 1 REG 993 UREQ R1+XREQ call OS 1BD16 FA09BD1C 0 994 JLTZ R0 PTM90 we have to have two 995 * \ / 996 1BD17 60040270 0 IMM 997 LD R0 FRMAKEPATH create the double-ended .PATH 1BD18 08978801 6 BASE 998 FREQ SP,PTMLUN (one lun is in R1) 1BD19 FA09BD1E 0 999 JLTZ R0 PTM91 complain if can't do it 1000 * \ / 1001 1BD1A 60978801 2 6 BASE 1002 LD R2 SP,PTMLUN get lun to return 1BD1B 5D1F8002 6 STAK 1003 LEAVE POP 1004 * --- 1005 0001BD1C 1006 PTM90 LABEL 1BD1C 6005D299 0 IMM 1007 LD R0 ADR(ERM500) "No free luns" 1BD1D FE0FBE35 1008 JMP RDUERR 1009 * --- 1010 0001BD1E 1011 PTM91 LABEL 1BD1E 6005D2D0 0 IMM 1012 LD R0 ADR(ERM512) "Could not open Paths" 1BD1F FE0FBE35 1013 JMP RDUERR 1014 * --- 1015 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 212 (RDUUSUB) F 21 Utility subroutines 1016 END of PATHMAKE 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 213 (RDUUSUB) F 21 Utility subroutines 1018 1019 ********************************************************************************** 1020 * * 1021 * This is the PATHCLOSE routine. It is called to close the * 1022 * path units currently open in PATHS. Caller is expected to have * 1023 * placed one lun in PATH and one in PATH(1). * 1024 * * 1025 * Eats R0:R1. * 1026 * * 1027 ********************************************************************************** 1028 1029 BLOCK 1030 ENTRY PATHCLOSE 1031 1032 BEGFRAME 1033 ENDFRAME 1034 1BD20 DD5F8001 6 STAK 1035 PATHCLOSE ENTRNP PUSH 1BD21 60040081 0 IMM 1036 LD R0 URSCINTARM ensure path interrupts are turned off 1BD22 60420080 1 IMM 1037 LD R1 PATHBIT 1BD23 09040000 IMM 1038 UREQ 0 do it 1BD24 EC11AC09 @ 1039 STZ @PDFLAG turn off this flag 1BD25 60040060 0 IMM 1040 LD R0 FRCLOSE request to close up 1BD26 0881A91C 1041 FREQ PATHS(1+XREQ) give back the write pipe 1BD27 60040060 0 IMM 1042 LD R0 FRCLOSE now for the other 1BD28 0881A91B 1043 FREQ PATHS(XREQ) there goes the read unit 1BD29 5D1F8001 6 STAK 1044 LEAVE POP 1045 * --- 1046 1047 END of PATHCLOSE 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 214 (RDUUSUB) F 21 Utility subroutines 1049 1050 ********************************************************************************** 1051 * * 1052 * This little monster is the TIMER routine. It simply sets * 1053 * a time interrupt request based on the current operating state * 1054 * of the RDU. Currently, normal RDU mode sets a 10 second time * 1055 * interrupt, portzero mode sets a 2 second interrupt, and running * 1056 * with breakpoints in sets a 4 second interrupt. * 1057 * * 1058 * Eats R0:R1. * 1059 * * 1060 ********************************************************************************** 1061 1062 BLOCK 1063 ENTRY TIMER 1064 1065 BEGFRAME 1066 ENDFRAME 1067 1068 * Note these definitions are VFDs so they may be easily patched. 1BD2A 00000002 1069 PORTZTO VFD 2 time to wait between NOPs when interactive 1BD2B 00000004 1070 BPITO VFD 4 running with breakpoints 1BD2C 0000000A 1071 NORMALTO VFD 10 normal operation timeout interval 1072 1BD2D DD5F8001 6 STAK 1073 TIMER ENTRNP PUSH 1BD2E 6001A8D6 0 1074 LD R0 STATE get the current RDU state 1BD2F FA09BD3A 0 1075 JLTZ R0 TIEXIT exit if not dialed in 1BD30 6041BD2A 1 1076 LD R1 PORTZTO assume a port zero mode 1BD31 FA03BD38 0 1077 JEQZ R0 TI10 jump if hunch was correct 1BD32 6041BD2C 1 1078 LD R1 NORMALTO assume in normal operating mode 1BD33 64040002 0 IMM 1079 CPR R0 STATERUN is the remote system running 1BD34 FE0DBD38 1080 JNE TI10 if not, breakpoints can't be in 1BD35 5C090210 4 ZBM 1081 CMZ BPIIN are breakpoints in? 1BD36 FE03BD38 1082 JEQ TI10 if not then use the normal value 1083 * \ / 1084 1BD37 6041BD2B 1 1085 LD R1 BPITO use longer time otherwise 0001BD38 1086 TI10 LABEL 1BD38 60040141 0 IMM 1087 LD R0 URSETTIMIN request for time interrupt 1BD39 09040000 IMM 1088 UREQ 0+XREQ start the clock running 0001BD3A 1089 TIEXIT LABEL 1BD3A 5D1F8001 6 STAK 1090 LEAVE POP 1091 * --- 1092 1093 END of TIMER 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 215 (RDUUSUB) F 21 Utility subroutines 1095 1096 ********************************************************************************** 1097 * * 1098 * GETPARAM sees if there was parameters passed on the invocation * 1099 * of the call to RDU. If so it decides whether it is a NOLOG request, * 1100 * and sets the LOGFLAG accordingly. * 1101 * R0:R3 get munched. IBUFF is used. * 1102 * * 1103 ********************************************************************************** 1104 1105 BLOCK 1106 ENTRY GETPARAM 1107 1108 BEGFRAME 1109 ENDFRAME 1110 1BD3B DD5F8001 6 STAK 1111 GETPARAM ENTRNP PUSH 1BD3C EDC1A92E 1112 STW LOGFLAG assume we are printing the log 1BD3D 60040021 0 IMM 1113 LD R0 URVARGETS get CM symbol 1BD3E 6045A800 1 IMM 1114 LD R1 ADR IBUFF buffer to put value 1BD3F E441A8E5 1 1115 ST R1 BUFPT save for FETCHITEM 1BD40 6281AC28 23 1116 LD2 R2 PARAMBANG PARAMETERS! 1BD41 09040060 IMM 1117 UREQ OKLEN length of buffer 1BD42 30440060 1 IMM 1118 RSB R1 OKLEN see if any buffer was used 1BD43 FA43BD49 1 1119 JEQZ R1 PARAMEXIT if no parameter then we assumed right 1120 * \ / 1121 1BD44 DC41B33C 1122 CALLNP FETCHAP get the parameter 1BD45 6001A830 0 1123 LD R0 SBUFFW get the first word 1BD46 6401AC27 0 1124 CPR R0 NOLOG "NOLO" 1BD47 FE0DBD49 1125 JNE PARAMEXIT if we don't match this then log it 1BD48 EC01A92E 1126 STZ LOGFLAG say NOLOG 0001BD49 1127 PARAMEXIT LABEL 1BD49 5D1F8001 6 STAK 1128 LEAVE POP 1129 * --- 1130 1131 END of GETPARAMS subroutine 141 142 INPUT RDUFSUB 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 216 (RDUFSUB) F 22 File handling subroutines 3 4 ********************************************************************************** 5 * * 6 * This is the FILEGET routine. It is called to obtain a * 7 * file name or lun from the input line, and return the lun of * 8 * the equipped unit to the caller. (It may be necessary to equip * 9 * up the unit. If so, the file is opened on a local unit.) * 10 * Call: * 11 * LD R0 * 12 * CALLNP FILEGET * 13 * * 14 * Returns: If no error, R0 = 0 * 15 * R1 = lun we came up with * 16 * R2 = equip flag (1=we did, -1=user's lun) * 17 * If error, R0 = error message * 18 * * 19 * Eats R0:R3. * 20 * * 21 ********************************************************************************** 22 23 BLOCK 24 ENTRY FILEGET 25 26 BEGFRAME 00178801 6 BASE 27 FIGLUN BSS 1 lun we are using 00178802 6 BASE 28 FIGDEF BSS 1 default extension 29 ENDFRAME 30 1BD4A DD5F8003 6 STAK 31 FILEGET ENTRNP PUSH 1BD4B E4178802 0 6 BASE 32 ST R0 SP,FIGDEF save the desired default 1BD4C DC41B346 33 CALLNP FETCHITMF pick up the lun or file name 1BD4D F6ADBD64 2 34 JBT R2/TNUM FIG30 jump if a lun 1BD4E F2AFBD71 2 35 JBF R2/TALPH FIG90 jump if not a possible name 36 * \ / 37 38 * We have found ourselves a file name. Open a unit with it. 1BD4F 60040122 0 IMM 39 LD R0 URFREELUN find a free unit to equip 1BD50 09040064 IMM 40 UREQ MAXLOCAL+XREQ good spot to hunt 1BD51 FA09BD73 0 41 JLTZ R0 FIG91 if this ever jumps... 1BD52 E4578801 1 6 BASE 42 ST R1 SP,FIGLUN save the lun we found 1BD53 60040102 0 IMM 43 LD R0 URPACKFS request for file pack 1BD54 6041A8E6 1 44 LD R1 LBUFPT point to file name string 1BD55 6085A957 2 IMM 45 LD R2 ADR(EQBUF) point to equip buffer 1BD56 09040000 IMM 46 UREQ XREQ ask system for help 1BD57 FA09BD71 0 47 JLTZ R0 FIG90 jump if trouble 48 * \ / 49 1BD58 6001A963 0 50 LD R0 EQEXT get the extension 1BD59 FA2FBD5C 0 51 JNEMW R0 FIG10 jump if not defaulted 1BD5A 60178802 0 6 BASE 52 LD R0 SP,FIGDEF get out default 1BD5B E401A963 0 53 ST R0 EQEXT and use that for equipping 0001BD5C 54 FIG10 LABEL 1BD5C 60040051 0 IMM 55 LD R0 FREQUIPR now to equip it up!! 1BD5D 6045A957 1 IMM 56 LD R1 ADR(EQBUF) point to buffer again 1BD5E 08978801 6 BASE 57 FREQ SP,FIGLUN(XREQ) see what happens 1BD5F FA09BD75 0 58 JLTZ R0 FIG92 jump if not found 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 217 (RDUFSUB) F 22 File handling subroutines 59 * \ / 60 1BD60 60840001 2 IMM 61 LD R2 1 remember we equipped it! 0001BD61 62 FIG20 LABEL 1BD61 60040000 0 IMM 63 LD R0 0 return the all-clear signal 0001BD62 64 FIGEXIT LABEL 1BD62 60578801 1 6 BASE 65 LD R1 SP,FIGLUN pick up the lun selection 1BD63 5D1F8003 6 STAK 66 LEAVE POP 67 * --- 68 69 * The user passed us a number. See if it is a unit with an opened file. 0001BD64 70 FIG30 LABEL 1BD64 6087FFFF 2 IMM 71 LD R2 -1 say we did not equip it 1BD65 6201A8ED 01 72 LD2 R0 VALUE get the user's input 1BD66 E4578801 1 6 BASE 73 ST R1 SP,FIGLUN save the lun he wants 1BD67 FA4BBD6F 1 74 JLEZ R1 FIG89 jump if garbage 1BD68 644400C9 1 IMM 75 CPR R1 LUNCMLOW see if too high 1BD69 FE07BD6F 76 JGE FIG89 jump if not ok 77 * \ / 78 1BD6A 60040010 0 IMM 79 LD R0 FRSTATUS make sure it's equipped 1BD6B 08978801 6 BASE 80 FREQ SP,FIGLUN(XREQ) 1BD6C FA07BD61 0 81 JGEZ R0 FIG20 1BD6D 6005D2B1 0 IMM 82 LD R0 ADR(ERM504) "Lun not equipped" 1BD6E FE0FBD62 83 JMP FIGEXIT 84 * --- 85 0001BD6F 86 FIG89 LABEL 1BD6F 6005D29F 0 IMM 87 LD R0 ADR(ERM501) "Lun must be in range 1-200" 1BD70 FE0FBD62 88 JMP FIGEXIT 89 * --- 90 0001BD71 91 FIG90 LABEL 1BD71 6005D2A6 0 IMM 92 LD R0 ADR(ERM502) "Expecting file name or lun" 1BD72 FE0FBD62 93 JMP FIGEXIT 94 * --- 95 0001BD73 96 FIG91 LABEL 1BD73 6005D299 0 IMM 97 LD R0 ADR(ERM500) "No free luns available" 1BD74 FE0FBD62 98 JMP FIGEXIT no such thing as a free lun.. 99 * --- 100 0001BD75 101 FIG92 LABEL 1BD75 6005D2AD 0 IMM 102 LD R0 ADR(ERM503) "File not found" 1BD76 FE0FBD62 103 JMP FIGEXIT 104 * --- 105 106 END of FILEGET subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 218 (RDUFSUB) F 22 File handling subroutines 108 109 ********************************************************************************** 110 * * 111 * This is the FREELUN routine. It is called to unequip the * 112 * lun in INLUN which we have equipped for some command processor. * 113 * The INLUN word is also cleared so we know all is clear. * 114 * * 115 * Eats R0. * 116 * * 117 ********************************************************************************** 118 119 BLOCK 120 ENTRY FREELUNS 121 122 BEGFRAME 00178801 6 BASE 123 FLTMP BSS 1 possible error code 124 ENDFRAME 125 1BD77 DD5F8002 6 STAK 126 FREELUNS ENTRNP PUSH 1BD78 E4178801 0 6 BASE 127 ST R0 SP,FLTMP save possible error code 1BD79 5C01A917 128 CMZ INLUN is there a lun in use? 1BD7A FE03BD7E 129 JEQ FREELUN10 jump if not 130 * \ / 131 1BD7B 60040060 0 IMM 132 LD R0 FRUNEQUIP get code to free up the lun 1BD7C 0881A917 133 FREQ INLUN(XREQ) give the unit back 1BD7D EC01A917 134 STZ INLUN clear the word 0001BD7E 135 FREELUN10 LABEL 1BD7E 5C01A91E 136 CMZ UNEQFLAG free up output lun? 1BD7F FE03BD83 137 JEQ FREELUNX done if not 138 * \ / 139 1BD80 60040060 0 IMM 140 LD R0 FRUNEQUIP get request to let it go 1BD81 0881A918 141 FREQ OUTLUN(XREQ) release our grip 1BD82 EC01A91E 142 STZ UNEQFLAG reset flag 0001BD83 143 FREELUNX LABEL 1BD83 60178801 0 6 BASE 144 LD R0 SP,FLTMP restore error code 1BD84 5D1F8002 6 STAK 145 LEAVE POP 146 * --- 147 148 END of FREELUN 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 219 (RDUFSUB) F 22 File handling subroutines 150 151 ********************************************************************************** 152 * * 153 * This is the READFILE routine. It reads a record from a file * 154 * and does some rudimentary processing. * 155 * Call: * 156 * CALL READFILE * 157 * PARVL * 158 * * 159 * R0=RTEOF or RTEOD for respective condition * 160 * R0=-1 for other errors * 161 * R1 = length of record (chars) * 162 * R2 = terminaing char (parity bit removed) * 163 * IBUFF containing record with terminator tacked on the end. * 164 * Eats R0:R2. * 165 * * 166 ********************************************************************************** 167 168 BLOCK 169 ENTRY READFILE 170 171 BEGFRAME 00178801 6 BASE 172 RFLUN BSS 1 unit to read from 173 ENDFRAME 174 1BD85 DD1F8002 6 STAK 175 READFILE ENTR PUSH 1BD86 C0578801 6 BASE 176 STPVL SP,RFLUN save unit to read from 1BD87 60040030 0 IMM 177 LD R0 FRREAD set up to input line 1BD88 6044005F 1 IMM 178 LD R1 OKLEN-1 acceptable length 1BD89 6085A800 2 IMM 179 LD R2 ADR IBUFFW point to input buffer 1BD8A E481A8E5 2 180 ST R2 BUFPT initialize pointer 1BD8B 08978801 6 BASE 181 FREQ SP,RFLUN(XREQ) slurp up some input 1BD8C FA09BD9B 0 182 JLTZ R0 RF80 jump if trouble 1BD8D FA49BD9B 1 183 JLTZ R1 RF80 or if line too long 184 * \ / 185 1BD8E 3044005F 1 IMM 186 RSB R1 OKLEN-1 obtain actual length 1BD8F 600A2040 0 0 CBM 187 LD R0 R0/RECTYPE get type of record 1BD90 64040000 0 IMM 188 CPR R0 RTTEXT be sure its simple text 1BD91 FE0DBD97 189 JNE RF70 possible error if not 1BD92 7884007F 2 IMM 190 AND R2 GASMASK clear the air 1BD93 E481A8E7 2 191 ST R2 TERMCHAR remember input line terminator 1BD94 E4B3AC00 2 1 @ 192 ST R2 @IBPT(R1) tack on the terminator 1BD95 60040000 0 IMM 193 LD R0 0 indicate no error in file read 0001BD96 194 RFEXIT LABEL 1BD96 5D1F8002 6 STAK 195 LEAVE POP 196 * --- 197 0001BD97 198 RF70 LABEL 1BD97 64040008 0 IMM 199 CPR R0 RTEOF maybe end-of-file 1BD98 FE03BD96 200 JEQ RFEXIT exit if so 1BD99 64040009 0 IMM 201 CPR R0 RTEOD or end of data 1BD9A FE03BD96 202 JEQ RFEXIT also exits 0001BD9B 203 RF80 LABEL 1BD9B D1520000 0 REG 204 STMW R0 set error return code 1BD9C FE0FBD96 205 JMP RFEXIT give bad error 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 220 (RDUFSUB) F 22 File handling subroutines 206 * --- 207 208 END of READFILE 143 144 INPUT RDUMAIN 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 221 (RDUMAIN) F 23 Main control code 3 4 BLOCK main control 5 ENTRY BAILOUT 6 ENTRY BREAK 7 ENTRY PROCCOM 8 ENTRY RDU 9 ENTRY RDU96 10 ENTRY RDUBRK 11 ENTRY RDUDO 12 ENTRY RDUDODONE 13 ENTRY RDUDOERR 14 ENTRY RDUE00 15 ENTRY RDUENTER 16 ENTRY RDUERR 17 ENTRY RDUGO 18 ENTRY RDULOST 19 ENTRY RDUNOINIT 20 ENTRY RDUOK 21 ENTRY RDUSYSERR 22 ENTRY VERSION 23 24 ********************************************************************************** 25 * * 26 * This is the Start-up area. We enter here from * 27 * Control Mode or whoever called us. This section * 28 * takes care of necessary initialization, and then jumps * 29 * into the main loop to prompt the user. * 30 * Here we go....... * 31 * * 32 ********************************************************************************** 33 0001BD9D 34 RDU LABEL 1BD9D FE0FBDA1 35 JMP OVERVRSN skip the version number 36 * --- 37 1BDA0 00000000 38 VERSION VFD VERSIONHI,VERSIONLO,0 39 0001BDA1 40 OVERVRSN LABEL 1BDA1 6185AA46 6 IMM 41 LD SP ADR(STACK) set up stack frame pointer 1BDA2 DC41BD3B 42 CALLNP GETPARAM initialize log flag for LOG 1BDA3 60040001 0 IMM 43 LD R0 CNTLA get the default exit character 1BDA4 E401A8EF 0 44 ST R0 EXITCHAR and call it the current exit character 1BDA5 6007FFFF 0 IMM 45 LD R0 STATENDIAL get not dialed state indicator 1BDA6 E401A8D6 0 46 ST R0 STATE say we are not dialed in 1BDA7 EC01A8DA 47 STZ DOFLAG and not processing from a do file 1BDA8 EC01A8DC 48 STZ DOSUPP not suppressing interactive data 49 1BDA9 60040040 0 IMM 50 LD R0 FRWRITE tell user we are here 1BDAA 60440024 1 IMM 51 LD R1 NML get length of message 1BDAB 6085CD1F 2 IMM 52 LD R2 ADR(NAMEMESS) "RDU....etc." 1BDAC 08840002 IMM 53 FREQ LUNSOUT+XREQ hello out there! 54 55 TCNORM 1BDAD 6004011B 0 IMM 55 LD R0 FRTSETTCS set terminating characters 1BDAE 6045AC5D 1 IMM 55 LD R1 ADR(TCTABN) normal table 1BDAF E441A8EA 1 55 ST R1 TCGROUP remember the group we used 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 222 (RDUMAIN) F 23 Main control code 1BDB0 088400C9 IMM 55 FREQ LUNAIN+XREQ for command level inputs 1BDB1 6004011A 0 IMM 56 LD R0 FRTSETTCG now to request our group 1BDB2 60440003 1 IMM 57 LD R1 3 kludge for now 1BDB3 08840001 IMM 58 FREQ LUNSIN+XREQ this should put us in business 59 1BDB4 60040128 0 IMM 60 LD R0 FRTGETECHO fetch the echo mode 1BDB5 088400C9 IMM 61 FREQ LUNAIN+XREQ from the system 1BDB6 E441A916 1 62 ST R1 ECHOMODE remember the RDU echo mode 63 1BDB7 60040127 0 IMM 64 LD R0 FRTGETSH now check out the terminal 1BDB8 08840002 IMM 65 FREQ LUNSOUT+XREQ get info from system 1BDB9 FA07BDBB 0 66 JGEZ R0 RDU05 jump if good data 1BDBA 60440000 1 IMM 67 LD R1 0 make infinite length 0001BDBB 68 RDU05 LABEL 1BDBB FA43BDBF 1 69 JEQZ R1 RDU10 if infinite then leave alone 1BDBC 10440002 1 IMM 70 SUB R1 2 else allow for overhead 1BDBD FA45BDBF 1 71 JGTZ R1 RDU10 if enough space use it 1BDBE 60440001 1 IMM 72 LD R1 1 else make just enough 0001BDBF 73 RDU10 LABEL 1BDBF E441A914 1 74 ST R1 LINEMAX set terminal max length 1BDC0 EDC1A915 75 STW LINECNT then start line count 1BDC1 D141A911 76 STMW CPI clear comm buffer pointers 1BDC2 D141A912 77 STMW CPO both of them 1BDC3 6001AC03 0 78 LD R0 CBPT get pointer to normal i/o processor 1BDC4 E401A884 0 79 ST R0 SHIPBPT set up for use 1BDC5 DC41F7BC 80 CALLNP IOINIT set up I/O processor 1BDC6 6145A986 5 IMM 81 LD SUB ADR(TREETOP) point to head of symbols 1BDC7 E541A928 5 82 ST SUB SUBPC remember our tree-house 83 * \ / 84 85 ********************************************************************************** 86 * * 87 * This is the start of the command processing loop. * 88 * We always reset the stack pointer here due to some messy * 89 * subroutine exits (jumping out on error conditions). * 90 * If we are in normal RDU mode we pick up a command * 91 * from the input line and process it. If we are in interactive * 92 * mode we just pick up the input line and ship it off to the * 93 * remote system to deal with. * 94 * * 95 ********************************************************************************** 96 97 * \ / 0001BDC8 98 RDUOK LABEL top of loop for command fetch 1BDC8 6185AA46 6 IMM 99 LD SP ADR(STACK) set up stack pointer 1BDC9 5C01A8DA 100 CMZ DOFLAG processing from a DO file? 1BDCA FE0DBE8C 101 JNE RDUDO if so go get it 1BDCB 5C01A8D6 102 CMZ STATE RDU or Port zero? 1BDCC FE03BE6B 103 JEQ RDUZERO if port zero then get out 1BDCD DC41B8C2 104 CALLNP OUTPROMPT print the prompt and ... 1BDCE DC41B3B6 105 CALLNP READLINE ... get the next command line 106 * \ / 107 0001BDCF 108 RDU20 LABEL 1BDCF DC41B336 109 CALLNP FETCHCOM see what dear user wants to do 1BDD0 F6ABBF13 2 110 JBT R2/TSTEP SNGLSTEP if single-step then jump 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 223 (RDUMAIN) F 23 Main control code 1BDD1 5C01A8DA 111 CMZ DOFLAG processing from a DO file? 1BDD2 FE0DBDD8 112 JNE RDU25 if so don't add extra line 1BDD3 5C01A8D7 113 CMZ CPSTATE working with a concurrent process? 1BDD4 FE0DBDD8 114 JNE RDU25 if so don't add extra line 1BDD5 E65F8002 126 STAK 115 ST2 R1 STAK SP,2 save FI status 1BDD6 DC41B8BC 116 CALLNP CRLF move paper 1BDD7 625F8002 126 STAK 117 LD2 R1 STAK SP,2 retrieve FI status 0001BDD8 118 RDU25 LABEL 1BDD8 F2AFBE33 2 119 JBF R2/TALPH RDU90 jump if cruddy input 1BDD9 6145AF05 5 IMM 120 LD COM ADR(COMTAB) point to general commands 1BDDA 6105B2A1 4 IMM 121 LD R4 ADR(BIGCTTOP) and to the end 122 * \ / 123 124 * COM -> beginning of appropriate command table, 125 * R4 -> end of appropriate command table, 126 * BUFPT -> command string being searched for 0001BDDB 127 PROCCOM LABEL 1BDDB DC41B2A8 128 CALLNP COMLOOK go see if known command 1BDDC FA0DBE35 0 129 JNEZ R0 RDUERR jump if have problems 1BDDD DC41C2E7 130 CALLNP FORMHELP see if just format question 1BDDE FA0DBDC8 0 131 JNEZ R0 RDUOK jump if so, it was already processed 132 133 * Ensure that the command is legal under current operating conditions. 1BDDF 5C095813 5 ZBM 134 CMZ COM,COMOKDO must we be processing a DO file? 1BDE0 FE03BDE5 135 JEQ PROCCOM5 if not then try next check 136 * \ / 137 1BDE1 5C01A8DA 138 CMZ DOFLAG are we processing a DO file? 1BDE2 FE0DBDE5 139 JNE PROCCOM5 if so then all is ok 1BDE3 6005CF2B 0 IMM 140 LD R0 ADR ERM10A "Command only valid from a DO file" 1BDE4 FE0FBE35 141 JMP RDUERR 142 * --- 143 0001BDE5 144 PROCCOM5 LABEL 1BDE5 5C11AC0B @ 145 CMZ @STOPPED is remote system stopped? 1BDE6 FE0DBDEB 146 JNE PROCCOM10 if so then next check 1BDE7 5C095C13 5 ZBM 147 CMZ COM,COMOKNS is command ok when running? 1BDE8 FE0DBDEF 148 JNE PROCCOM20 if so then go do the command 1BDE9 6005CEE1 0 IMM 149 LD R0 ADR ERM103 "must be stopped" 1BDEA FE0FBE35 150 JMP RDUERR 151 * --- 152 0001BDEB 153 PROCCOM10 LABEL 1BDEB 5C01A8D6 154 CMZ STATE are we dialed up? 1BDEC FE07BDEF 155 JGE PROCCOM20 if so then no problem 1BDED 5C095A13 5 ZBM 156 CMZ COM,COMOKND ok to do this if not dialed? 1BDEE FE03BE3D 157 JEQ RDU95 if not then we can't do it 158 * \ / 159 160 * The command is valid under current conditions. Pick up parameters. 0001BDEF 161 PROCCOM20 LABEL 1BDEF EC01A8F3 162 STZ DISPTYPE clear display type 1BDF0 60094633 0 5 ZBM 163 LD R0 COM,COMPARAM get parameter control code 1BDF1 5CA1BDF2 0 164 LDPC PARGETTAB(R0) then process parameters 165 * --- 166 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 224 (RDUMAIN) F 23 Main control code 0001BDF2 167 PARGETTAB LABEL parameter fetch control table 1BDF2 0001BDFA 168 VFD ADR RDUNOPAR 0 - no parameters allowed 1BDF3 0001BE12 169 VFD ADR RDUNOD 1 - no param but display type 1BDF4 0001BE2D 170 VFD ADR RDURQC 2 - required code 1BDF5 0001BE29 171 VFD ADR RDUSPC 3 - special 1BDF6 0001BE05 172 VFD ADR RDURQA 4 - required address 1BDF7 0001BE2A 173 VFD ADR RDUOPA 5 - optional address 1BDF8 0001BE05 174 VFD ADR RDURQAD 6 - required address, display 1BDF9 0001BDFE 175 VFD ADR RDURQADS 7 - symbolic addr, display 176 177 * The command should have no parameters with it. 0001BDFA 178 RDUNOPAR LABEL 1BDFA DC41B33F 179 CALLNP FETCHNP get something 1BDFB F6BFBE29 2 180 JBT R2/TEOL DOCOMMND ok if nothing there, go do the command 1BDFC 6005CF35 0 IMM 181 LD R0 ADR ERM110 "No params on this one" 1BDFD FE0FBE35 182 JMP RDUERR sorry 183 * --- 184 185 * Expecting an address, either actual or symbolic. 0001BDFE 186 RDURQADS LABEL 1BDFE E55F8001 5 6 STAK 187 ST COM STAK SP,1 save command pointer from harm 1BDFF DC41B4A2 188 CALLNP ADRGET get address to display 1BE00 FA0DBE35 0 189 JNEZ R0 RDUERR if problems tell user 1BE01 6001A91F 0 190 LD R0 ADDRESS get address to use 1BE02 E401A830 0 191 ST R0 SBUFFW keep everyone informed 1BE03 615F8001 5 6 STAK 192 LD COM STAK SP,1 restore command pointer 1BE04 FE0FBE07 193 JMP RDUP20 then merge back in 194 * --- 195 196 * Expecting an address (hex form). 0001BE05 197 RDURQAD LABEL address display 0001BE05 198 RDURQA LABEL address 1BE05 DC41B33F 199 CALLNP FETCHNP get a number 1BE06 F6BFBE39 2 200 JBT R2/TEOL RDU93 error if nothing there 201 * \ / 202 203 * We have an address. Check for legality. 0001BE07 204 RDUP20 LABEL 1BE07 FA83BE37 2 205 JEQZ R2 RDU92 jump if bad error 1BE08 6001A830 0 206 LD R0 SBUFFW get the value 1BE09 60C94C43 3 5 ZBM 207 LD R3 COM,COMADDR get address control field 1BE0A 6827AC85 0 3 208 UCPR R0 ADRMASK(R3) see if too big 1BE0B FE05BE3B 209 JGT RDU94 if so then we won't use it 210 * \ / 211 212 * Check for more on the input line. 1BE0C E401A91F 0 213 ST R0 ADDRESS save the address we are to use 1BE0D 6444000D 1 IMM 214 CPR R1 CR is terminating char a carriage return? 1BE0E FE03BE29 215 JEQ DOCOMMND if so then we have good stuff 216 * \ / 217 1BE0F 60094633 0 5 ZBM 218 LD R0 COM,COMPARAM get param type code back 1BE10 64040006 0 IMM 219 CPR R0 RQAD display type possibilities? 1BE11 FE09BE41 220 JLT RDU97 if not this then can't have more input 221 * \ / 222 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 225 (RDUMAIN) F 23 Main control code 223 * Pick up a display type. 0001BE12 224 RDUNOD LABEL 1BE12 6444000D 1 IMM 225 CPR R1 CR is terminator the end? 1BE13 FE03BE29 226 JEQ DOCOMMND if so then process the command 1BE14 64440027 1 IMM 227 CPR R1 QUOTE then is it a write? 1BE15 FE03BE20 228 JEQ RDUP50 if so go check it out 229 * \ / 230 1BE16 DC41B33C 231 CALLNP FETCHAP pick up display type 1BE17 F6BFBE29 2 232 JBT R2/TEOL DOCOMMND if end then what the heck 1BE18 F6A7BE20 2 233 JBT R2/TQUO RDUP50 wants to change the contents 1BE19 F2AFBE45 2 234 JBF R2/TALPH RDU99 we want a display type code 235 * \ / 236 237 * We have a possible display type. See if we recognize it. 1BE1A 60840007 2 IMM 238 LD R2 DTTABL-1 get number of types 0001BE1B 239 RDUP40 LABEL 1BE1B 6425ACA3 0 2 240 CPR R0 DTTAB(R2) is this a valid type? 1BE1C FE03BE26 241 JEQ RDUP60 if so then we're all set 1BE1D FAA7BE1B 2 242 JDR R2 RDUP40 if not then try another 1BE1E 6005D0F7 0 IMM 243 LD R0 ADR ERM171 "unknown display type" 1BE1F FE0FBE35 244 JMP RDUERR give them a goose 245 * --- 246 247 * A single quote was found indicating a request to change the 248 * value of the specified location. Is this legal? 0001BE20 249 RDUP50 LABEL 1BE20 5C094C14 5 ZBM 250 CMZ COM,GMMWRITE does command allow writes?? 1BE21 FE03BE43 251 JEQ RDU98 error if not 252 * \ / 253 1BE22 6001A8E5 0 254 LD R0 BUFPT now skip over the quote 1BE23 D00A1F30 0 CBM 255 INC R0/NXTCHAR we don't want to see it again 1BE24 E401A8E5 0 256 ST R0 BUFPT ready to roll on 1BE25 FE0FBE29 257 JMP DOCOMMND go process command 258 * --- 259 260 * Found a known display type. 0001BE26 261 RDUP60 LABEL 1BE26 E481A8F3 2 262 ST R2 DISPTYPE save desired display type 1BE27 6444000D 1 IMM 263 CPR R1 CR better be CR at the end 1BE28 FE0DBE41 264 JNE RDU97 if not then all for naught 265 * \ / 266 0001BE29 267 RDUSPC LABEL special (defer fetch) 0001BE29 268 DOCOMMND LABEL 1BE29 5C895F13 5 ZBM 269 LDPC COM,COMPROC now go process command 270 * --- 271 272 * Optional address parameter. 0001BE2A 273 RDUOPA LABEL 1BE2A DC41B33F 274 CALLNP FETCHNP get a number 1BE2B F6BFBE29 2 275 JBT R2/TEOL DOCOMMND optional, so CR is ok here 1BE2C FE0FBE07 276 JMP RDUP20 merge in a little 277 * --- 278 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 226 (RDUMAIN) F 23 Main control code 279 * Alpha parameter (possibly file name). 0001BE2D 280 RDURQC LABEL 1BE2D DC41B2B7 281 CALLNP DECODER get alpha code 1BE2E F6BFBE39 2 282 JBT R2/TEOL RDU93 error if nothing there 1BE2F FA83BE37 2 283 JEQZ R2 RDU92 complain if bad error 1BE30 6444000D 1 IMM 284 CPR R1 CR is that all there is? 1BE31 FE03BE29 285 JEQ DOCOMMND if so then we're all set 1BE32 FE0FBE41 286 JMP RDU97 else complain loudly 287 * --- 288 0001BE33 289 RDU90 LABEL 1BE33 F6BFBDC8 2 290 JBT R2/TEOL RDUOK ignore solo cr's 1BE34 6005CEE8 0 IMM 291 LD R0 ADR ERM104 "Expecting RDU command" 292 * \ / 293 294 ********************************************************************************** 295 * * 296 * This is where we jump to on any error condition * 297 * throughout this program. We print the error message * 298 * that R0 points to then go to the main command loop. * 299 * Don't worry about the stack pointer since it will get * 300 * reset at RDUOK. * 301 * Usage: * 302 * LD R0 ADR * 303 * JMP RDUERR * 304 * --- * 305 * Never returns so who cares what Regs get munched. * 306 * * 307 ********************************************************************************** 308 309 * \ / 0001BE35 310 RDUERR LABEL 1BE35 DC41B88A 311 CALLNP OUT ship out the error message 1BE36 FE0FBDC8 312 JMP RDUOK and try again 313 * --- 314 0001BE37 315 RDU92 LABEL 1BE37 6005CF46 0 IMM 316 LD R0 ADR ERM112 "Bad parameter" 1BE38 FE0FBE35 317 JMP RDUERR 318 * --- 319 0001BE39 320 RDU93 LABEL 1BE39 6005CF50 0 IMM 321 LD R0 ADR ERM113 "Parameter expected" 1BE3A FE0FBE35 322 JMP RDUERR 323 * --- 324 0001BE3B 325 RDU94 LABEL 1BE3B 6005CF58 0 IMM 326 LD R0 ADR ERM114 "Parameter too big" 1BE3C FE0FBE35 327 JMP RDUERR 328 * --- 329 0001BE3D 330 RDU95 LABEL 1BE3D 6005CF0F 0 IMM 331 LD R0 ADR ERM108 "Not valid if not dialed" 1BE3E FE0FBE35 332 JMP RDUERR 333 * --- 334 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 227 (RDUMAIN) F 23 Main control code 0001BE3F 335 RDU96 LABEL 1BE3F 6005D04F 0 IMM 336 LD R0 ADR ERM154 "Remote sys not taking data" 1BE40 FE0FBE35 337 JMP RDUERR and go complain 338 * --- 339 0001BE41 340 RDU97 LABEL 1BE41 6005CF3F 0 IMM 341 LD R0 ADR ERM111 "extra parameters" 1BE42 FE0FBE35 342 JMP RDUERR 343 * --- 344 0001BE43 345 RDU98 LABEL 1BE43 6005CF75 0 IMM 346 LD R0 ADR ERM118 "write not allowed" 1BE44 FE0FBE35 347 JMP RDUERR 348 * --- 349 0001BE45 350 RDU99 LABEL 1BE45 6005D0EE 0 IMM 351 LD R0 ADR ERM170 "expecting display type" 1BE46 FE0FBE35 352 JMP RDUERR 353 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 228 (RDUMAIN) F 23 Main control code 355 356 ********************************************************************************** 357 * * 358 * We come here from "MORE --- " processing if the user decides not * 359 * to continue getting more. We probably have a command that needs to * 360 * be processed so we reset the stack and join in the command processor. * 361 * * 362 ********************************************************************************** 363 0001BE47 364 BAILOUT LABEL 1BE47 6185AA46 6 IMM 365 LD SP ADR STACK restore stack pointer 1BE48 FE0FBDCF 366 JMP RDU20 then go process input 367 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 229 (RDUMAIN) F 23 Main control code 369 370 ********************************************************************************** 371 * * 372 * Terminal break has been received. Decide what to do. * 373 * We also come here for the BREAK command. All this does * 374 * is send a break to the remote machine (useful from DO files). * 375 * * 376 ********************************************************************************** 377 0001BE49 378 RDUBRK LABEL (get here with terminal Break) 1BE49 5C01A8DA 379 CMZ DOFLAG DO file processing? 1BE4A FE0DBEAE 380 JNE RDUDODONE if so then let it handle the break 1BE4B 5C01A8D6 381 CMZ STATE RDU mode or port zero? 1BE4C FE0DBDC8 382 JNE RDUOK if RDU then go re-prompt user 383 * \ / 384 0001BE4D 385 BREAK LABEL 1BE4D D141A911 386 STMW CPI clear character buffer ptrs 1BE4E D141A912 387 STMW CPO both of them 1BE4F 5C01A8E1 388 CMZ IOK is the thing accepting input? 1BE50 FE03BDC8 389 JEQ RDUOK if not then ignore 390 * \ / 391 1BE51 DC01BBAC 392 CALL SHIPCOM else send system a break 1BE52 4101BBF5 393 PAR RESPERROR error address 1BE53 41440008 IMM 394 PARV KLAS8 class=8 1BE54 41440005 IMM 395 PARV 5 slot=5 (send break) 1BE55 41440000 IMM 396 PARV 0 bcm=0 1BE56 40440000 IMM 397 PARVL 0 address=0 1BE57 DC41BC7E 398 CALLNP SHIPNOP pick up any response to the break 1BE58 FE0FBDC8 399 JMP RDUOK then go get something else 400 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 230 (RDUMAIN) F 23 Main control code 402 403 ********************************************************************************** 404 * * 405 * The remote system went away. Clean up the mess that is left * 406 * around then tell the user all about it. * 407 * * 408 ********************************************************************************** 409 0001BE59 410 RDULOST LABEL (lost remote system) 1BE59 DC41C40D 411 CALLNP FAILPRINT print number of transmission errors 1BE5A 5C01A92E 412 CMZ LOGFLAG see if we should print this log file 1BE5B FE03BE5D 413 JEQ RDULOSTNP if not then don't 1BE5C DC41CCF0 414 CALLNP LOGPRINT print the log 415 * \ / 416 0001BE5D 417 RDULOSTNP LABEL 1BE5D DC41CD0D 418 CALLNP CLOSEM close the session (and batch) units 1BE5E DC41F7E2 419 CALLNP IODROP drop the communications link 1BE5F 6007FFFF 0 IMM 420 LD R0 STATENDIAL get not dialed state indicator 1BE60 E401A8D6 0 421 ST R0 STATE say we are not dialed in 422 TCNORM 1BE61 6004011B 0 IMM 422 LD R0 FRTSETTCS set terminating characters 1BE62 6045AC5D 1 IMM 422 LD R1 ADR(TCTABN) normal table 1BE63 E441A8EA 1 422 ST R1 TCGROUP remember the group we used 1BE64 088400C9 IMM 422 FREQ LUNAIN+XREQ for command level inputs 1BE65 60040118 0 IMM 423 LD R0 FRTSETECHO be sure to restore our echo 1BE66 6041A916 1 424 LD R1 ECHOMODE back to when we started 1BE67 088400C9 IMM 425 FREQ LUNAIN+XREQ now we are set 1BE68 DC41B8B8 426 CALLNP OUTCRLF make room for error message 1BE69 6005D024 0 IMM 427 LD R0 ADR ERM150 "Lost remote system - redial" 1BE6A FE0FBE35 428 JMP RDUERR sorry about that 429 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 231 (RDUMAIN) F 23 Interactive Mode 432 433 ********************************************************************************** 434 * * 435 * We are in interactive mode. Pick up stuff from the user * 436 * and ship it to the remote system if not our escape character. * 437 * We also send NOPs to let the machine know we still care. * 438 * * 439 ********************************************************************************** 440 0001BE6B 441 RDUZERO LABEL come here when port zero 1BE6B DC41B3B3 442 CALLNP READLINENW check quickly for input 1BE6C FA09BE76 0 443 JLTZ R0 RDUZ20 jump if no input here 444 * \ / 445 446 * R2 contains character just read from the terminal. 0001BE6D 447 RDUZ10 LABEL 1BE6D 6481A8EF 2 448 CPR R2 EXITCHAR is it our switch? 1BE6E FE03BE7D 449 JEQ RDUGO if so then re-enter RDU mode 450 * \ / 451 1BE6F BC41A911 1 452 INCL R1 CPI get input pointer 1BE70 64440078 1 IMM 453 CPR R1 CBLEN more room in input buffer? 1BE71 FE07BE3F 454 JGE RDU96 if not then tell user 1BE72 E4B3AC03 2 1 @ 455 ST R2 @CBPT(R1) add to the input buffer 1BE73 1041A912 1 456 SUB R1 CPO check how many characters we have 1BE74 64440004 1 IMM 457 CPR R1 MAXOCHAR is it less than one word? 1BE75 FE09BE6B 458 JLT RDUZERO try to send all available characters next shipnop 459 * \ / 460 0001BE76 461 RDUZ20 LABEL 1BE76 DC41BC7B 462 CALLNP SHIPNOPRD send operator input if possible, 463 * otherwise poll for output 1BE77 6001F38B 0 464 LD R0 RESPBINDX see how much we got last time 1BE78 64040010 0 IMM 465 CPR R0 MAXRESPS in fact, was it a full house? 1BE79 FE03BE6B 466 JEQ RDUZERO if full house, just quickly check for input 1BE7A DC41B3B0 467 CALLNP READLINERM wait 2 secs for input then return 1BE7B FA09BE76 0 468 JLTZ R0 RDUZ20 error sez no input, send another NOP 1BE7C FE0FBE6D 469 JMP RDUZ10 otherwise, go process input character 470 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 232 (RDUMAIN) F 23 Interactive Mode 472 473 ********************************************************************************** 474 * * 475 * We return here from an interactive session through PORT 0. * 476 * Change our state, log the exit character, disable breaks, reset * 477 * terminal echo, pretty the screen, and we will be set to continue. * 478 * * 479 ********************************************************************************** 480 0001BE7D 481 RDUGO LABEL 1BE7D 60040002 0 IMM 482 LD R0 STATERUN first change our state 1BE7E E401A8D6 0 483 ST R0 STATE make the switch 1BE7F 60440001 1 IMM 484 LD R1 1 two characters in buffer 1BE80 6085A800 2 IMM 485 LD R2 ADR IBUFF where the characters are 1BE81 DC41CCCD 486 CALLNP SPECSAVE log the event 487 1BE82 DC41F7CA 488 CALLNP SIMNOBRKS disable break processing 489 TCNORM 1BE83 6004011B 0 IMM 489 LD R0 FRTSETTCS set terminating characters 1BE84 6045AC5D 1 IMM 489 LD R1 ADR(TCTABN) normal table 1BE85 E441A8EA 1 489 ST R1 TCGROUP remember the group we used 1BE86 088400C9 IMM 489 FREQ LUNAIN+XREQ for command level inputs 1BE87 60040118 0 IMM 490 LD R0 FRTSETECHO get request to set echo 1BE88 6041A916 1 491 LD R1 ECHOMODE get original echo mode 1BE89 088400C9 IMM 492 FREQ LUNAIN+XREQ restore proper echo mode 1BE8A DC41B8B8 493 CALLNP OUTCRLF make a little room 1BE8B FE0FBDC8 494 JMP RDUOK then prompt dear user 495 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 233 (RDUMAIN) F 23 DO File Processor 498 499 ********************************************************************************** 500 * * 501 * We get here when ready for another command and processing * 502 * from a DO file. Make sure a break has not come in, get the * 503 * input line, echo it if desired, see if we are done, then go to * 504 * the command processor. * 505 * Note that we must ship out a prompt before logging the read * 506 * or else the log file will look bizarre. * 507 * * 508 ********************************************************************************** 509 0001BE8C 510 RDUDO LABEL 1BE8C D181A8E0 511 CLRT UBREAK did a break happen while we were working? 1BE8D FE0DBEAE 512 JNE RDUDODONE if so clean up and leave 513 * \ / 514 1BE8E 60040030 0 IMM 515 LD R0 FRREAD read a line from the DO file 1BE8F 6044005F 1 IMM 516 LD R1 OKLEN-1 legal length of input line 1BE90 6085A800 2 IMM 517 LD R2 ADR IBUFFW our input buffer 1BE91 E481A8E5 2 518 ST R2 BUFPT initialize the input buffer pointer 1BE92 E481AA4C 2 519 ST R2 EVENTADDR save for logging 1BE93 0881A8DD 520 FREQ DOUNIT(XREQ) read a line from the DO file 1BE94 FA09BEAC 0 521 JLTZ R0 RDUDO40 error on read 1BE95 600A2040 0 0 CBM 522 LD R0 R0/RECTYPE get the record type 1BE96 64040009 0 IMM 523 CPR R0 RTEOD end of data? 1BE97 FE03BEAE 524 JEQ RDUDODONE if so then quit 525 * \ / 526 1BE98 3044005F 1 IMM 527 RSB R1 OKLEN-1 see how much input there was 1BE99 E481A8E7 2 528 ST R2 TERMCHAR save the terminating char (CR) 1BE9A E4B3AC00 2 1 @ 529 ST R2 @IBPT(R1) and put on end of buffer 1BE9B 5C01A8DB 530 CMZ DOLIST listing commands? 1BE9C FE03BEA1 531 JEQ RDUDO10 don't list prompt 1BE9D E45F8001 1 6 STAK 532 ST R1 STAK SP,1 save the number of char 1BE9E DC41B8BC 533 CALLNP CRLF pretty the paper 1BE9F DC41B8C2 534 CALLNP OUTPROMPT indicate another command 1BEA0 605F8001 1 6 STAK 535 LD R1 STAK SP,1 restore number of chars 536 * \ / 537 0001BEA1 538 RDUDO10 LABEL 1BEA1 DC41CCCD 539 CALLNP SPECSAVE log it 1BEA2 5C01A8DB 540 CMZ DOLIST list the command? 1BEA3 FE03BEA8 541 JEQ RDUDO30 go process the command 542 * \ / 543 1BEA4 60040040 0 IMM 544 LD R0 FRWRITE time to echo the input 1BEA5 6085A800 2 IMM 545 LD R2 ADR IBUFFW => buffer 1BEA6 08840002 IMM 546 FREQ LUNSOUT+XREQ 1BEA7 D001A915 547 INC LINECNT another line in the output 548 * \ / 549 0001BEA8 550 RDUDO30 LABEL 1BEA8 6011AC00 0 @ 551 LD R0 @IBPT get first char in line 1BEA9 6404002A 0 IMM 552 CPR R0 STAR is the line just a comment? 1BEAA FE0DBDCF 553 JNE RDU20 if not then process as a command 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 234 (RDUMAIN) F 23 DO File Processor 1BEAB FE0FBE8C 554 JMP RDUDO get the next line from the DO file 555 * --- 556 0001BEAC 557 RDUDO40 LABEL 1BEAC 6005CF7A 0 IMM 558 LD R0 ADR ERM119 "Error reading DO file" 559 * \ / 560 561 ********************************************************************************** 562 * * 563 * This handy place is jumped to when a fatal error occurred * 564 * processing a DO file. An error message (R0 -> error message) * 565 * is listed and then the do file is cleaned up. Control then * 566 * goes to RDUOK. * 567 * * 568 ********************************************************************************** 569 0001BEAD 570 RDUDOERR LABEL 1BEAD DC41B88A 571 CALLNP OUT tell user about the error 572 * \ / 573 0001BEAE 574 RDUDODONE LABEL 1BEAE DC41C928 575 CALLNP DODESTROY wipe out the do file 1BEAF FE0FBDC8 576 JMP RDUOK act normal 577 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 235 (RDUMAIN) F 23 Abnormal Condition Handler 580 581 ********************************************************************************** 582 * * 583 * We come here when returning to RDU mode, usually due * 584 * to some error in interactive mode. Disable breaks, restore * 585 * normal terminating characters, reset the echo mode and do * 586 * whatever else is necessary to keep our place clean. * 587 * * 588 ********************************************************************************** 589 590 * Entry from CPU halt processing 0001BEB0 591 RDUENTER LABEL 1BEB0 DC41C928 592 CALLNP DODESTROY ensure there is no DO file hanging around 1BEB1 5C01A8D9 593 CMZ XFERFLAG file transfer going on? 1BEB2 FE03BEB4 594 JEQ RDUENOXFER if not 1BEB3 DC41F0F8 595 CALLNP XFERTIDY if so clean up after it 0001BEB4 596 RDUENOXFER LABEL 1BEB4 60040001 0 IMM 597 LD R0 STATESTOP state code indicating stopped 1BEB5 E401A8D6 0 598 ST R0 STATE say we are back in RDU mode 1BEB6 DC41F7CA 599 CALLNP SIMNOBRKS disable break processing 600 TCNORM 1BEB7 6004011B 0 IMM 600 LD R0 FRTSETTCS set terminating characters 1BEB8 6045AC5D 1 IMM 600 LD R1 ADR(TCTABN) normal table 1BEB9 E441A8EA 1 600 ST R1 TCGROUP remember the group we used 1BEBA 088400C9 IMM 600 FREQ LUNAIN+XREQ for command level inputs 1BEBB DC01BBAC 601 CALL SHIPCOM now stop the sucker 1BEBC 4101BBF5 602 PAR RESPERROR error address 1BEBD 41440005 IMM 603 PARV KLAS5 class=5 1BEBE 41440000 IMM 604 PARV 0 slot=0 1BEBF 41440000 IMM 605 PARV BCMSTOP bcm=0 1BEC0 40440000 IMM 606 PARVL 0 address=0 607 * \ / 608 609 * Entry from bus error processing 0001BEC1 610 RDUENTRY LABEL 1BEC1 60040118 0 IMM 611 LD R0 FRTSETECHO get request to set echo 1BEC2 6041A916 1 612 LD R1 ECHOMODE get original echo mode 1BEC3 088400C9 IMM 613 FREQ LUNAIN+XREQ restore proper echo mode 1BEC4 DC41B8B8 614 CALLNP OUTCRLF make a little room 1BEC5 DC41CA77 615 CALLNP BPIRESTORE restore all breakpoints 1BEC6 5C01A8DF 616 CMZ MAPPED got a map yet? 1BEC7 FE0DBED4 617 JNE RDUE05 if so then don't get another 618 * \ / 619 620 * Entry from STOP command 0001BEC8 621 RDUE00 LABEL 1BEC8 DC41BFFA 622 CALLNP GETMAP else go capture that info 1BEC9 5C01A981 623 CMZ THESSU have system SSU yet? 1BECA FE07BED4 624 JGE RDUE05 jump if so 625 * \ / 626 627 * find the main SSU, in case there are more than one 1BECB 61C4000F 7 IMM 628 LD R7 16-1 start high 0001BECC 629 FINDSSU LABEL 1BECC 622FA935 01 7 630 LD2 R0 MAPDATA(R7) get some info 1BECD 600A4040 0 1 CBM 631 LD R0 R1/XMSGBCM get slot type 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 236 (RDUMAIN) F 23 Abnormal Condition Handler 1BECE 64040004 0 IMM 632 CPR R0 DEVSSU is it SSU? 1BECF ED920000 0 REG 633 STLNE R0 save answer 1BED0 7C0A4E10 0 1 CBM 634 IOR R0 R1/THEBIT combine w/meaningful bit 1BED1 FA03BED3 0 635 JEQZ R0 HAVEIT jump if SSU and bit is 0 1BED2 FBE7BECC 7 636 JDR R7 FINDSSU else try more 637 * \ / 638 0001BED3 639 HAVEIT LABEL 1BED3 E5C1A981 7 640 ST R7 THESSU save result 0001BED4 641 RDUE05 LABEL 1BED4 DC41C108 642 CALLNP DOSTATUS obtain status and list out 1BED5 D1C1A8DF 643 SETT MAPPED have we mapped the frontier? 1BED6 FE03BDC8 644 JEQ RDUOK if so then once is enough 1BED7 DC41C006 645 CALLNP MAPPER go list out the map 646 * \ / 647 648 * Now report what is in the SSU message buffers. 1BED8 DC01C8ED 649 CALL DOSSMSG 1BED9 4141A97F 650 PARV SSUSLOT SLOT number 1BEDA 4044140A IMM 651 PARVL MB1ADR address of info in SSU 1BEDB DC41B86C 652 CALLNP BLANKOUTW fill output buffer with blanks 1BEDC 6005CE6E 0 IMM 653 LD R0 ADR MGSMB1 "MB1:" 1BEDD DC41B87B 654 CALLNP MESSMOVE move into the buffer 1BEDE 38B7AC01 2 3 @ 655 LEA R2 @OBPT(OBP) R2 -> where we are in the buffer 1BEDF 6005A830 0 IMM 656 LD R0 ADR SBUFFW R0 -> the string 1BEE0 6044000A 1 IMM 657 LD R1 10 10 characters in SSU buffer 1BEE1 FE400000 658 CMOVE into the output they go 1BEE2 DC01C8ED 659 CALL DOSSMSG 1BEE3 4141A97F 660 PARV SSUSLOT SLOT number 1BEE4 40441413 IMM 661 PARVL MB2ADR address of info in SSU 1BEE5 60C40011 3 IMM 662 LD OBP 17 1BEE6 6005CE70 0 IMM 663 LD R0 ADR MGSMB2 "MB2:" 1BEE7 DC41B87B 664 CALLNP MESSMOVE move into the buffer 1BEE8 38B7AC01 2 3 @ 665 LEA R2 @OBPT(OBP) R2 -> where we are in the buffer 1BEE9 6005A830 0 IMM 666 LD R0 ADR SBUFFW R0 -> the string 1BEEA 6044000A 1 IMM 667 LD R1 10 10 characters in SSU buffer 1BEEB FE400000 668 CMOVE place into the output 1BEEC 18C4000A 3 IMM 669 ADD OBP 10 keep pointer current 1BEED DC41B886 670 CALLNP OUTO send it to the user 1BEEE FE0FBDC8 671 JMP RDUOK now we're set! 672 * --- 673 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 237 (RDUMAIN) F 23 Abnormal Condition Handler 675 676 ********************************************************************************** 677 * * 678 * We have received a bus error from the remote system. * 679 * Send a clearall, tell the user about it, and join in with * 680 * the normal entry. * 681 * * 682 ********************************************************************************** 683 0001BEEF 684 RDUSYSERR LABEL (error from remote sys) 1BEEF DC41C928 685 CALLNP DODESTROY ensure there is no DO file hanging around 1BEF0 D1C1A8D6 686 SETT STATE are we running? 1BEF1 FE03BDC8 687 JEQ RDUOK if not then carry on 1BEF2 DC41F7CA 688 CALLNP SIMNOBRKS disable break processing 689 TCNORM 1BEF3 6004011B 0 IMM 689 LD R0 FRTSETTCS set terminating characters 1BEF4 6045AC5D 1 IMM 689 LD R1 ADR(TCTABN) normal table 1BEF5 E441A8EA 1 689 ST R1 TCGROUP remember the group we used 1BEF6 088400C9 IMM 689 FREQ LUNAIN+XREQ for command level inputs 1BEF7 DC01BBAC 690 CALL SHIPCOM if port zero then switch 1BEF8 4101BBF5 691 PAR RESPERROR error address 1BEF9 41440005 IMM 692 PARV KLAS5 class 1BEFA 41440000 IMM 693 PARV 0 slot=0 1BEFB 41440000 IMM 694 PARV BCMSTOP bcm=stop 1BEFC 40440000 IMM 695 PARVL 0 address=0 1BEFD DC01BB9D 696 CALL SHIPCOMT then clear the bus logic 1BEFE 4101BBF5 697 PAR RESPERROR error address 1BEFF 41440005 IMM 698 PARV KLAS5 class=5 1BF00 41440000 IMM 699 PARV 0 slot=0 1BF01 41440003 IMM 700 PARV BCMCALL clear all 1BF02 41440000 IMM 701 PARV 0 address=0 1BF03 40440005 IMM 702 PARVL CLEARDELAY how long to delay 1BF04 DC41B8B8 703 CALLNP OUTCRLF make room 1BF05 6005D089 0 IMM 704 LD R0 ADR ERM159 "Warning - Clearall sent" 1BF06 DC41B88A 705 CALLNP OUT just so they know 1BF07 FE0FBEC1 706 JMP RDUENTRY then enter RDU mode 707 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 238 (RDUMAIN) F 23 Abnormal Condition Handler 709 710 ********************************************************************************** 711 * * 712 * The remote system is not initialized. * 713 * * 714 ********************************************************************************** 715 0001BF08 716 RDUNOINIT LABEL (remote sys not initialized) 1BF08 DC41C928 717 CALLNP DODESTROY ensure there is no DO file hanging around 1BF09 D1C1A8D6 718 SETT STATE are we running? 1BF0A FE03BDC8 719 JEQ RDUOK if not then ignore this state 1BF0B DC41F7CA 720 CALLNP SIMNOBRKS disable break processing 721 TCNORM 1BF0C 6004011B 0 IMM 721 LD R0 FRTSETTCS set terminating characters 1BF0D 6045AC5D 1 IMM 721 LD R1 ADR(TCTABN) normal table 1BF0E E441A8EA 1 721 ST R1 TCGROUP remember the group we used 1BF0F 088400C9 IMM 721 FREQ LUNAIN+XREQ for command level inputs 1BF10 6005D07C 0 IMM 722 LD R0 ADR ERM158 "Warning - not initialized" 1BF11 DC41B88A 723 CALLNP OUT tell them about the problem 1BF12 FE0FBDC8 724 JMP RDUOK then continue on 725 * --- 726 727 END of RDU main control 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 239 (RDUMAIN) F 23 Single-Step Command Processor 730 731 ********************************************************************************** 732 * * 733 * We come here to single-step the currently selected CPU. The * 734 * proper bus commands are sent out to single-step and then obtain * 735 * the current program counter and instruction register which are * 736 * then displayed for the user. The instruction is decoded so * 737 * that the user can watch a mnemonic instead of hex. * 738 * * 739 ********************************************************************************** 740 741 BLOCK 742 ENTRY SNGLSTEP 743 0001BF13 744 SNGLSTEP LABEL (come here with single-step) 1BF13 6001A8D6 0 745 LD R0 STATE get the remote system's state 1BF14 FA09BF3B 0 746 JLTZ R0 SSNOTDIAL jump if not dialed 1BF15 64040001 0 IMM 747 CPR R0 STATESTOP is the system stopped? 1BF16 FE0DBF3D 748 JNE SSNOTSTOP error if not 749 * \ / 750 1BF17 EDDF8001 6 STAK 751 STW STAK SP,1 assume a single single-step 1BF18 F2ADBF1C 2 752 JBF R2/TNUM SS10 jump if that's what user wants 1BF19 6001A830 0 753 LD R0 SBUFFW get instruction count 1BF1A FA0BBDC8 0 754 JLEZ R0 RDUOK just return if bogus count 1BF1B E4178800 0 6 BASE 755 ST R0 SP,0 use the user-supplied count 0001BF1C 756 SS10 LABEL 1BF1C DC01BBAC 757 CALL SHIPCOM send single-step 1BF1D 4101BBF5 758 PAR RESPERROR error address 1BF1E 41440005 IMM 759 PARV KLAS5 class=5 1BF1F 4141A97D 760 PARV CPUSLOT slot=CPU 1BF20 41440006 IMM 761 PARV BCMSSTEP bcm=single step 1BF21 4041AC2C 762 PARVL CPSTEP address=CPSTEP 1BF22 D0578800 6 BASE 763 DEC SP,0 count down control counter 1BF23 FE05BF1C 764 JGT SS10 go round again if more to do 765 * \ / 766 1BF24 DC01BBAC 767 CALL SHIPCOM get the program counter 1BF25 4101BBF5 768 PAR RESPERROR error address 1BF26 41440000 IMM 769 PARV KLAS0 class=0 1BF27 4141A97D 770 PARV CPUSLOT slot=CPU 1BF28 41440002 IMM 771 PARV BCMREAD bcm=2 1BF29 40440008 IMM 772 PARVL CPPC address=program counter 1BF2A 6001F38E 0 773 LD R0 DATA(1) get the value 1BF2B E401A91F 0 774 ST R0 ADDRESS and more places 1BF2C DC01BB04 775 CALL LOCOUT list out location name/address 1BF2D 40440000 IMM 776 PARVL 0 only list label if exact 777 1BF2E E4DF8001 3 6 STAK 778 ST OBP STAK SP,1 save pointer from harm 1BF2F DC01BBAC 779 CALL SHIPCOM now get the next instruction 1BF30 4101BBF5 780 PAR RESPERROR error address 1BF31 41440001 IMM 781 PARV KLAS1 class=1 1BF32 4141A97D 782 PARV CPUSLOT slot=CPU 1BF33 41440002 IMM 783 PARV BCMREAD bcm=2 1BF34 4041A91F 784 PARVL ADDRESS address=(from PC) 1BF35 6001F38E 0 785 LD R0 DATA(1) get the value 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 240 (RDUMAIN) F 23 Single-Step Command Processor 1BF36 E401A8ED 0 786 ST R0 VALUE where we need it 1BF37 60DF8001 3 6 STAK 787 LD OBP STAK SP,1 restore output buffer pointer 1BF38 DC41B686 788 CALLNP OPOUT list the op-code 1BF39 DC41B886 789 CALLNP OUTO then print the line 1BF3A FE0FBDC8 790 JMP RDUOK and that's all she wrote! 791 * --- 792 0001BF3B 793 SSNOTDIAL LABEL 1BF3B 6005CF0F 0 IMM 794 LD R0 ADR ERM108 "Not valid if not dialed" 1BF3C FE0FBE35 795 JMP RDUERR 796 * --- 797 0001BF3D 798 SSNOTSTOP LABEL 1BF3D 6005CEE1 0 IMM 799 LD R0 ADR ERM103 "Remote system not stopped" 1BF3E FE0FBE35 800 JMP RDUERR 801 * --- 802 803 END of SINGLE STEP command 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 241 (RDUMAIN) F 23 Step Command 806 807 ********************************************************************************** 808 * * 809 * This section handles the STEP command which is somewhat like * 810 * the single-step function. The main difference is that STEP will * 811 * store a halt into the next instruction following the one pointed * 812 * to by the program counter, and then release pause. This lets the * 813 * CPU run until it stops, hopefully at the halt we stored. Since * 814 * we remember the location we stored into, any time we are re-entered * 815 * from running, the location is restored with the original contents. * 816 * * 817 ********************************************************************************** 818 819 BLOCK 820 ENTRY STEP 821 0001BF3F 822 STEP LABEL 1BF3F 6105A8C2 4 IMM 823 LD BRK ADR BPITABLE get address of breakpoint table 1BF40 6001F38E 0 824 LD R0 DATA(1) get program counter value 1BF41 E4091D20 0 4 ZBM 825 ST R0 BRK,BPIADDR remember that's where we are 1BF42 EDC90010 4 ZBM 826 STW BRK,BPIUSED this BPI block is in use 1BF43 EC090210 4 ZBM 827 STZ BRK,BPIIN the BPI is not in the remote machine 1BF44 EDC1A930 828 STW STEPSET say step is in 829 * \ / 830 0001BF45 831 STEP10 LABEL 1BF45 BC091D20 0 4 ZBM 832 INCL R0 BRK,BPIADDR advance to next location 1BF46 7805FFFF 0 IMM 833 AND R0 MAXADR keep value within reason 1BF47 E4091D20 0 4 ZBM 834 ST R0 BRK,BPIADDR wrap around if necessary 1BF48 E401A91F 0 835 ST R0 ADDRESS keep it in address, too 1BF49 DC01BBAC 836 CALL SHIPCOM obtain instruction there 1BF4A 4101BBF5 837 PAR RESPERROR error address 1BF4B 41440001 IMM 838 PARV KLAS1 class=1 1BF4C 4141A97D 839 PARV CPUSLOT slot=cpu 1BF4D 41440002 IMM 840 PARV BCMREAD bcm=2 1BF4E 40491D20 4 ZBM 841 PARVL BRK,BPIADDR address=breakpoint addr 1BF4F 6001F38E 0 842 LD R0 DATA(1) get contents 1BF50 6105A8C2 4 IMM 843 LD BRK ADR BPITABLE get address of breakpoint table 1BF51 600A0060 0 0 CBM 844 LD R0 R0/PAROPBITS get just op-code portion 1BF52 64040010 0 IMM 845 CPR R0 PAROPS is it one of the PAR's? 1BF53 FE03BF45 846 JEQ STEP10 if so then skip past it 847 * \ / 848 1BF54 DC41CA1E 849 CALLNP BPILOOK is breakpoint already set at address? 1BF55 FA0DBF58 0 850 JNEZ R0 STEPGO if not set then go 851 * \ / 852 1BF56 EC01A930 853 STZ STEPSET say no step command 1BF57 EE01A8C2 854 STZ2 BPITABLE zero out step entry 0001BF58 855 STEPGO LABEL 1BF58 6145AF8A 5 IMM 856 LD COM ADR GOCOM now start it going 1BF59 5C895F13 5 ZBM 857 LDPC COM,COMPROC and see what happens... 858 * --- 859 860 END of STEP command 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 242 (RDUMAIN) F 23 IPOLL, Selftest Commands 863 864 ********************************************************************************** 865 * * 866 * This section handles those commands which send a bus command * 867 * to the user-specified slot. The slot number is obtained from * 868 * SBUFFW and the remainder of the command data is obtained from * 869 * the command table entry. Reponse will be in DATA, and may be * 870 * missing, one-word, or 16-word, depending on the command. * 871 * * 872 * This is also the display section. Items listed from DATA * 873 * and are 32-bit values. Terminators are not checked for and * 874 * control is always to RDUOK. * 875 * * 876 ********************************************************************************** 877 878 BLOCK 879 ENTRY DISPLAY 880 ENTRY SEND 881 ENTRY SELFTEST 882 0001BF5A 883 SEND LABEL 1BF5A DC01BBAC 884 CALL SHIPCOM 1BF5B 4101BBF5 885 PAR RESPERROR error address 1BF5C 41494034 5 ZBM 886 PARV COM,GCNCLS class 1BF5D 4141A830 887 PARV SBUFFW slot 1BF5E 41494C34 5 ZBM 888 PARV COM,GCNBCM bcm 1BF5F 40440000 IMM 889 PARVL 0 address=0 1BF60 5C974805 5 BASE 890 LDPC COM,GCNPDSP then continue on 891 * --- 892 0001BF61 893 DISPLAY LABEL 1BF61 DC41B86C 894 CALLNP BLANKOUTW clear output buffer 0001BF62 895 DISPLAYX LABEL 1BF62 6001F38E 0 896 LD R0 DATA(1) get the value 1BF63 E401A8ED 0 897 ST R0 VALUE where we need it 1BF64 DC41B5F1 898 CALLNP HEXOUT decode 8 digits 1BF65 DC41B886 899 CALLNP OUTO list out value 1BF66 FE0FBDC8 900 JMP RDUOK always return for new command 901 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 243 (RDUMAIN) F 23 IPOLL, Selftest Commands 903 904 ********************************************************************************** 905 * * 906 * This section handles the SELFTEST command. Actually, the * 907 * selftest is sent with the general sending facility. However, * 908 * after the selftest is sent, we must pause and then pick up the * 909 * wru 15 for the slot we tested. This must also be displayed. * 910 * * 911 ********************************************************************************** 912 0001BF67 913 SELFTEST LABEL 1BF67 60040140 0 IMM 914 LD R0 URDELAY must wait before reading 1BF68 6041AC26 1 915 LD R1 PPUSTWAIT length 1BF69 60840000 2 IMM 916 LD R2 0 no other events 1BF6A 09040000 IMM 917 UREQ 0+XREQ call OS 1BF6B DC01BBAC 918 CALL SHIPCOM now get the test result 1BF6C 4101BBF5 919 PAR RESPERROR error address 1BF6D 41440000 IMM 920 PARV KLAS0 class=0 1BF6E 4141A830 921 PARV SBUFFW slot=as specified 1BF6F 41440004 IMM 922 PARV BCMWRU bcm=4(wru) 1BF70 4044000F IMM 923 PARVL 15 address=15 1BF71 DC41B86C 924 CALLNP BLANKOUTW clear output buffer 1BF72 6005CDF1 0 IMM 925 LD R0 ADR MESWRU15 "Wru(15):" 1BF73 DC41B87B 926 CALLNP MESSMOVE put into the line 1BF74 FE0FBF62 927 JMP DISPLAYX 928 * --- 929 930 END of SELFTEST and IPOLL commands 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 244 (RDUMAIN) F 23 Control Commands 933 934 ********************************************************************************** 935 * * 936 * This section handles the control commands. They usually * 937 * perform some form of a bus transfer with a given class, slot, * 938 * and BCM. Some may use data as well. * 939 * * 940 ********************************************************************************** 941 942 BLOCK 943 ENTRY BOOTCOPY 944 ENTRY CONTROL 945 ENTRY GOING 946 ENTRY STOPPING 947 ENTRY GO 948 ENTRY GOCONTROL 949 950 * Clear breakpoints before doing a boot copy 0001BF75 951 BOOTCOPY LABEL 1BF75 EC01A930 952 STZ STEPSET say no step instruction set 1BF76 5C01A92F 953 CMZ BPINUM see if any breakpoints in table 1BF77 FE03BF79 954 JEQ CONTROL 1BF78 DC41CB0F 955 CALLNP BPIINIT zero out the breakpoint table 956 * \ / 957 0001BF79 958 CONTROL LABEL 1BF79 5C095214 5 ZBM 959 CMZ COM,GCNDF check data flag 1BF7A FE0DBF7D 960 JNE CNTL10 jump if using user's address 1BF7B 60095564 0 5 ZBM 961 LD R0 COM,GCNTMA get transfer address 1BF7C E401A830 0 962 ST R0 SBUFFW and set up the address to use 0001BF7D 963 CNTL10 LABEL 1BF7D 60894634 2 5 ZBM 964 LD R2 COM,GCNSLOT get slot code 1BF7E DC01BBAC 965 CALL SHIPCOM send out the command 1BF7F 4101BBF5 966 PAR RESPERROR error address 1BF80 41494034 5 ZBM 967 PARV COM,GCNCLS class 1BF81 4165A97B 2 968 PARV SLOTS(R2) slot 1BF82 41494C34 5 ZBM 969 PARV COM,GCNBCM bcm 1BF83 4041A830 970 PARVL SBUFFW address 1BF84 5C974805 5 BASE 971 LDPC COM,COMEX2 now continue processing 972 * --- 973 0001BF85 974 GOING LABEL 1BF85 60040002 0 IMM 975 LD R0 STATERUN say we are going again 1BF86 E401A8D6 0 976 ST R0 STATE remember our new state 1BF87 DC41BC7E 977 CALLNP SHIPNOP send a sync pulse 1BF88 FE0FBDC8 978 JMP RDUOK then off for new input 979 * --- 980 981 * STOP command 982 0001BF89 983 STOPPING LABEL 1BF89 60040001 0 IMM 984 LD R0 STATESTOP say we are stopped again 1BF8A E401A8D6 0 985 ST R0 STATE say we are stopped 1BF8B DC41CA77 986 CALLNP BPIRESTORE ensure breakpoints are out 1BF8C 5C01A8DF 987 CMZ MAPPED do we have our wits? 1BF8D FE0DBDC8 988 JNE RDUOK if so then that's all we need 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 245 (RDUMAIN) F 23 Control Commands 1BF8E FE0FBEC8 989 JMP RDUE00 else send out the scouts 990 * --- 991 0001BF8F 992 GO LABEL 1BF8F 5C01A92F 993 CMZ BPINUM are there breakoints to go in? 1BF90 FE05BF93 994 JGT GOSTEP if so then single step first 1BF91 5C01A930 995 CMZ STEPSET is there a step to put in? 1BF92 FE03BF9A 996 JEQ GOCONTROL if not then just GO 997 * \ / 0001BF93 998 GOSTEP LABEL 1BF93 DC01BBAC 999 CALL SHIPCOM send single step command 1BF94 4101BBF5 1000 PAR RESPERROR error address 1BF95 41440005 IMM 1001 PARV KLAS5 class=5 1BF96 4141A97D 1002 PARV CPUSLOT slot=CPU 1BF97 41440006 IMM 1003 PARV BCMSSTEP BCM=6 1BF98 4041AC2C 1004 PARVL CPSTEP address=CPSTEP 1BF99 DC41CA32 1005 CALLNP BPISET put in the breakpoints 1006 * \ / 1007 0001BF9A 1008 GOCONTROL LABEL 1BF9A DC41BCEF 1009 CALLNP FIXUPMCUS revive MCUs 1BF9B FE0FBF79 1010 JMP CONTROL and GO 1011 * --- 1012 1013 END of CONTROL commands 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 246 (RDUMAIN) F 23 CLEARALL command 1016 1017 ********************************************************************************** 1018 * * 1019 * The CLEARALL command needs special handling since a * 1020 * delay is required. * 1021 * * 1022 ********************************************************************************** 1023 1024 BLOCK 1025 ENTRY CLEARALL 1026 0001BF9C 1027 CLEARALL LABEL 1BF9C DC01BB9D 1028 CALL SHIPCOMT then clear the bus logic 1BF9D 4101BBF5 1029 PAR RESPERROR error address 1BF9E 41440005 IMM 1030 PARV KLAS5 class=5 1BF9F 41440000 IMM 1031 PARV 0 slot=0 1BFA0 41440003 IMM 1032 PARV BCMCALL clear all 1BFA1 41440000 IMM 1033 PARV 0 address=0 1BFA2 40440005 IMM 1034 PARVL CLEARDELAY how long to delay 1BFA3 FE0FBDC8 1035 JMP RDUOK 1036 * --- 1037 1038 END of CLEARALL command 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 247 (RDUMAIN) F 23 Boot Command 1041 1042 ********************************************************************************** 1043 * * 1044 * We arrive here when for some reason we want to * 1045 * initialize the remote system (usually either a BOOT or * 1046 * a SYSINIT command). We must allow some extra time * 1047 * with the SYSINIT since the SSU is kept busy for awhile * 1048 * supervising the other modules during their selftests * 1049 * and has a tendency to ignore us. * 1050 * * 1051 ********************************************************************************** 1052 1053 BLOCK 1054 ENTRY SYSINIT 1055 ENTRY BOOTER 1056 0001BFA4 1057 SYSINIT LABEL 1BFA4 DC01BB9D 1058 CALL SHIPCOMT send the system initalization command 1BFA5 4101BBF5 1059 PAR RESPERROR error address 1BFA6 41440005 IMM 1060 PARV KLAS5 class=5 1BFA7 41440000 IMM 1061 PARV 0 slot=0 1BFA8 41440007 IMM 1062 PARV BCMSINIT bcm=7 1BFA9 41440000 IMM 1063 PARV 0 address=0 1BFAA 40440008 IMM 1064 PARVL INITDELAY how long to wait 1BFAB 5C974804 5 BASE 1065 LDPC COM,COMEX1 off we go 1066 * --- 1067 1068 ********************************************************************************** 1069 * * 1070 * The BOOT command is handled here. The SYSINIT has already * 1071 * been sent (see above). We send the bootcopy command, ensure * 1072 * our BPI table is clean, then march off to do a GO. * 1073 * * 1074 ********************************************************************************** 1075 0001BFAC 1076 BOOTER LABEL 1BFAC DC01BBAC 1077 CALL SHIPCOM send the boot copy command 1BFAD 4101BBF5 1078 PAR RESPERROR error address 1BFAE 41440005 IMM 1079 PARV KLAS5 class 1BFAF 41440000 IMM 1080 PARV 0 slot 1BFB0 41440004 IMM 1081 PARV BCMBOOTCOP BCM 1BFB1 4041A830 1082 PARVL SBUFFW address=SBUFFW (boot switches) 1083 * \ / 1084 * clear all breakpoints before starting 1085 1BFB2 EC01A930 1086 STZ STEPSET say no step instruction set 1BFB3 5C01A92F 1087 CMZ BPINUM see if any breakpoints in table 1BFB4 FE03BFB6 1088 JEQ BOOTGO 1BFB5 DC41CB0F 1089 CALLNP BPIINIT zero out the breakpoint table 0001BFB6 1090 BOOTGO LABEL 1BFB6 6145AF8A 5 IMM 1091 LD COM ADR GOCOM 1BFB7 5C895F13 5 ZBM 1092 LDPC COM,COMPROC go do the GO 1093 * --- 1094 1095 END of BOOT and SYSINIT commands 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 248 (RDUMAIN) F 23 Powerreset Command 1098 1099 ********************************************************************************** 1100 * * 1101 * This section does the POWERRESET command. It is a special * 1102 * case because no response will ever come back (other than * 1103 * perhaps a NAK if it was garbled on the line). On * 1104 * completion of the bus transfer, we must change our internal * 1105 * state to reflect that the remote system is no longer dialed. * 1106 * * 1107 ********************************************************************************** 1108 1109 BLOCK 1110 ENTRY RESET 1111 0001BFB8 1112 RESET LABEL 1BFB8 DC41CAF6 1113 CALLNP EXITBPI ensure breakpoints are out 1BFB9 DC41F7E5 1114 CALLNP IOPWRRESET send a power reset command 1BFBA DC41F7E2 1115 CALLNP IODROP drop the talker unit 1BFBB DC41C40D 1116 CALLNP FAILPRINT print any transmission errors 1BFBC 5C01A92E 1117 CMZ LOGFLAG should we print this 1BFBD FE03BFBF 1118 JEQ RESETNP if not then don't 1BFBE DC41CCF0 1119 CALLNP LOGPRINT print the log 0001BFBF 1120 RESETNP LABEL 1BFBF DC41CD0D 1121 CALLNP CLOSEM close the session log LUN 1BFC0 6007FFFF 0 IMM 1122 LD R0 STATENDIAL code indicating not dialed 1BFC1 E401A8D6 0 1123 ST R0 STATE say we are no longer dialed 1BFC2 FE0FBDC8 1124 JMP RDUOK then get another command 1125 * --- 1126 1127 END of RESET command 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 249 (RDUMAIN) F 23 Restart Command 1130 1131 ********************************************************************************** 1132 * * 1133 * This section takes care of the RESTART command. This command * 1134 * performs several functions and is a combination of a Clearall, * 1135 * a Selftest to each PPU, a Go to each CPU, and a general Go. * 1136 * It is expected that the functionality provided by this command * 1137 * will be required often, so this is easier than entering a whole * 1138 * slew of individual commands. * 1139 * The CLEARALL is done here rather than at CONTROL because a * 1140 * delay is needed. * 1141 * * 1142 ********************************************************************************** 1143 1144 BLOCK 1145 ENTRY RESTART 1146 0001BFC3 1147 RESTART LABEL 1BFC3 DC01BB9D 1148 CALL SHIPCOMT then clear the bus logic 1BFC4 4101BBF5 1149 PAR RESPERROR error address 1BFC5 41440005 IMM 1150 PARV KLAS5 class=5 1BFC6 41440000 IMM 1151 PARV 0 slot=0 1BFC7 41440003 IMM 1152 PARV BCMCALL clear all 1BFC8 41440000 IMM 1153 PARV 0 address=0 1BFC9 40440005 IMM 1154 PARVL CLEARDELAY how long to delay 1BFCA 6104000F 4 IMM 1155 LD R4 MAXSLOT get slot count 0001BFCB 1156 REST10 LABEL 1BFCB 6029A96B 0 4 1157 LD R0 SLOTTYPE(R4) get the slot type 1BFCC 64040002 0 IMM 1158 CPR R0 DEVCPU is it a CPU? 1BFCD FE0DBFD5 1159 JNE REST20 continue on if not 1BFCE DC01BBAC 1160 CALL SHIPCOM else start it up 1BFCF 4101BBF5 1161 PAR RESPERROR error address 1BFD0 41440000 IMM 1162 PARV KLAS0 class=0 1BFD1 41530000 4 REG 1163 PARV R4 slot=(where we are) 1BFD2 41440000 IMM 1164 PARV BCMWRITE bcm=0 1BFD3 40420006 IMM 1165 PARVL 030000 addr=go address 1BFD4 FE0FBFDE 1166 JMP REST30 then merge back in 1167 * --- 1168 0001BFD5 1169 REST20 LABEL 1BFD5 64040003 0 IMM 1170 CPR R0 DEVPPU maybe a ppu? 1BFD6 FE0DBFDE 1171 JNE REST30 if not then go away 1BFD7 DC01BB9D 1172 CALL SHIPCOMT send out selftest to start up 1BFD8 4101BBF5 1173 PAR RESPERROR error address 1BFD9 41440000 IMM 1174 PARV KLAS0 class=0 1BFDA 41530000 4 REG 1175 PARV R4 slot=ours 1BFDB 41440005 IMM 1176 PARV BCMSLFTST bcm=5 1BFDC 41440000 IMM 1177 PARV 0 addr=0 1BFDD 40440005 IMM 1178 PARVL SLFTDELAY how long to wait 1179 * \ / 1180 0001BFDE 1181 REST30 LABEL 1BFDE FB27BFCB 4 1182 JDR R4 REST10 cycle through all slots 1183 * \ / 1184 1185 * done with all slots 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 250 (RDUMAIN) F 23 Restart Command 1BFDF 60040140 0 IMM 1186 LD R0 URDELAY wait for selftest to finish 1BFE0 6041AC26 1 1187 LD R1 PPUSTWAIT length 1BFE1 09040000 IMM 1188 UREQ 0+XREQ just hanging around... 1BFE2 6104000F 4 IMM 1189 LD R4 MAXSLOT start over again 0001BFE3 1190 REST40 LABEL 1BFE3 6029A96B 0 4 1191 LD R0 SLOTTYPE(R4) get slot type again 1BFE4 64040003 0 IMM 1192 CPR R0 DEVPPU is it a ppu? 1BFE5 FE0DBFF4 1193 JNE REST50 if not then we don't want it 1194 * \ / 1195 1BFE6 DC01BBAC 1196 CALL SHIPCOM else obtain its wru(15) 1BFE7 4101BBF5 1197 PAR RESPERROR error address 1BFE8 41440000 IMM 1198 PARV KLAS0 class=0 1BFE9 41530000 4 REG 1199 PARV R4 slot=this one 1BFEA 41440004 IMM 1200 PARV BCMWRU bcm=4 1BFEB 4044000F IMM 1201 PARVL 15 address=15 1BFEC 6001F38E 0 1202 LD R0 DATA(1) get the answer 1BFED FA03BFF4 0 1203 JEQZ R0 REST50 if ok then continue on 1204 * \ / 1205 1BFEE E501A8ED 4 1206 ST R4 VALUE bad test - tell user 1BFEF 6005CDF4 0 IMM 1207 LD R0 ADR MESFAIL "PPU failed self-test.." 1BFF0 DC41B875 1208 CALLNP MESSMOVEZ put into output line 1BFF1 DC41B605 1209 CALLNP HEXOUTD add the slot number 1BFF2 DC41B886 1210 CALLNP OUTO then list the line 1BFF3 FE0FBDC8 1211 JMP RDUOK solicit input 1212 * --- 1213 0001BFF4 1214 REST50 LABEL 1BFF4 FB27BFE3 4 1215 JDR R4 REST40 cycle through all slots 1216 * \ / 1217 1BFF5 6145AF8A 5 IMM 1218 LD COM ADR GOCOM now to start the sucker up 1BFF6 FE0FBF9A 1219 JMP GOCONTROL so, go do it! 1220 * --- 1221 1222 END of RESTART command 145 146 INPUT RDUSTATUS 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 251 (RDUSTATUS) F 24 Map Command and Subroutine 3 4 BLOCK MAP command 5 ENTRY DISPMAP 6 ENTRY MAPPER 7 ENTRY GETMAP 8 9 ********************************************************************************** 10 * * 11 * This section processes the MAP command. It issues a WRU 0 * 12 * to each bus slot and displays the result. If a slot does * 13 * respond, the module type is listed as well as the WRU result. * 14 * No additonal input is accepted with this command. * 15 * * 16 ********************************************************************************** 17 0001BFF7 18 DISPMAP LABEL 1BFF7 DC41BFFA 19 CALLNP GETMAP obtain map data from system 1BFF8 DC41C006 20 CALLNP MAPPER list out the map 1BFF9 FE0FBDC8 21 JMP RDUOK then back to ground control 22 * --- 23 24 ********************************************************************************** 25 * * 26 * GETMAP just gets map data and saves it in MAPDATA. * 27 * Call: * 28 * CALLNP GETMAP * 29 * * 30 * Eats R0:R3. * 31 * * 32 ********************************************************************************** 33 34 BLOCK 35 ENTRY GETMAP 36 37 BEGFRAME 38 ENDFRAME 39 1BFFA DD5F8001 6 STAK 40 GETMAP ENTRNP PUSH 1BFFB DC01BBAC 41 CALL SHIPCOM now get a map 1BFFC 4101BBF5 42 PAR RESPERROR error address 1BFFD 41440002 IMM 43 PARV KLAS2 class=block mode 1BFFE 41440000 IMM 44 PARV 0 slot=0 1BFFF 41440002 IMM 45 PARV BCMMAP bcm=map 1C000 40440000 IMM 46 PARVL 0 address=0 1C001 6005F38D 0 IMM 47 LD R0 ADR DATA point to the data we got 1C002 60440080 1 IMM 48 LD R1 16*2*NCPW get count 1C003 6085A935 2 IMM 49 LD R2 ADR MAPDATA point to our save area 1C004 FE400000 50 CMOVE transfer the goodies 1C005 5D1F8001 6 STAK 51 LEAVE POP 52 * --- 53 54 END of GETMAP 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 252 (RDUSTATUS) F 24 Map Command and Subroutine 56 57 ********************************************************************************** 58 * * 59 * MAPPER prints out a map of the remote system. * 60 * The data area (MAPDATA) is expected to contain the proper * 61 * map data when called. * 62 * Call: * 63 * MAPDATA contains map data * 64 * CALLNP MAPPER * 65 * * 66 * Eats R0:R4 * 67 * * 68 ********************************************************************************** 69 70 BLOCK 71 ENTRY MAPPER 72 73 BEGFRAME 00178801 6 BASE 74 MAPTMP BSS 1 temp for R7 75 ENDFRAME 76 1C006 DD5F8002 6 STAK 77 MAPPER ENTRNP PUSH 1C007 E5D78801 7 6 BASE 78 ST R7 SP,MAPTMP save a register 79 80 ********************************************************************************** 81 * * 82 * First loop removes slot selections (as per SLOTS) for those * 83 * whose device type has changed since the last map was done. * 84 * You're SUPPOSED to power off the systen to move modules * 85 * around (which would disconnect the RDU) but someone might * 86 * not have bothered. It is also possible that a module has * 87 * died (and therefore returned no MAP entry). We don't bother * 88 * with special SSU check since we know we're connected to the * 89 * right one, and it therefore could not have died or been moved * 90 * (besides, the user might have selected a non-system SSU). * 91 * * 92 ********************************************************************************** 93 1C008 61C40004 7 IMM 94 LD R7 SLOTSNUM-1 highest entry (device type code) to check 0001C009 95 MAP05 LABEL 1C009 60AFA97B 2 7 96 LD R2 SLOTS(R7) get current selection for type R7 1C00A FA8BC012 2 97 JLEZ R2 GOON jump if nothing selected here 1C00B 6225A935 01 2 98 LD2 R0 MAPDATA(R2) get current WRU info for this slot 1C00C 65CA4040 7 1 CBM 99 CPR R7 R1/DEVTYPEB check board type 1C00D FE03C012 100 JEQ GOON jump if board type stayed the same 1C00E D16FA97B 7 101 STMW SLOTS(R7) kill selection 1C00F 65C40003 7 IMM 102 CPR R7 DEVPPU PPU moved/died? 1C010 FE0DC012 103 JNE GOON jump if not 1C011 D141A980 104 STMW PPUPORT else, deselect PPU port, too 0001C012 105 GOON LABEL 1C012 FBE3C009 7 106 DRJ R7 MAP05 loop to do more 107 * \ / 108 109 ********************************************************************************** 110 * * 111 * We want to set the SLOTTYPE according to the module and make * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 253 (RDUSTATUS) F 24 Map Command and Subroutine 112 * an entry in the table of modules for this type. Because the SMU * 113 * and MCU have a few different commands despite performing similar * 114 * functions, we must keep track of these two types specially. If * 115 * an SMU is found we set the SLOTTYPE to indicate SMU, but set * 116 * SLOTS to indicate MCU since it is memory. Also, an SSU device * 117 * is put in SLOTS only if it is the system SSU. * 118 * * 119 ********************************************************************************** 120 121 * \ / 1C013 61C40000 7 IMM 122 LD R7 0 start at the beginning 0001C014 123 MAP10 LABEL 1C014 DC41B86F 124 CALLNP BLANKOUT clear output line 1C015 61040003 4 IMM 125 LD R4 NREGPL-1 number of items per line 0001C016 126 MAP20 LABEL 1C016 60E9CD73 3 4 127 LD OBP REGPOST(R4) get line position for this one 1C017 E5C1A8ED 7 128 ST R7 VALUE set to output slot number 1C018 DC41B605 129 CALLNP HEXOUTD then unpack the thing 1C019 6004003A 0 IMM 130 LD R0 COLON get some dress 1C01A E437AC01 0 3 @ 131 ST R0 @OBPT(OBP) looking good 1C01B 18C40001 3 IMM 132 ADD OBP 1 advance pointer 133 * \ / 134 1C01C 622FA935 01 7 135 LD2 R0 MAPDATA(R7) get the WRU for this slot 1C01D 600A4040 0 1 CBM 136 LD R0 R1/DEVTYPEB get device code field 1C01E 60920000 2 0 REG 137 LD R2 R0 copy it 1C01F 64040001 0 IMM 138 CPR R0 DEVMCU is it an MCU? 1C020 FE0DC024 139 JNE NOTASMU if not then no extra check 1C021 5C0A5610 1 CBM 140 CMZ R1/MCUTYPEB see if this is a new fangled MCU 1C022 FE03C024 141 JEQ NOTASMU if not then no biggie 1C023 60840005 2 IMM 142 LD R2 DEVSMU else we have an SMU (not the college) 0001C024 143 NOTASMU LABEL 1C024 E4AFA96B 2 7 144 ST R2 SLOTTYPE(R7) set the type for this slot 1C025 FA43C035 1 145 JEQZ R1 MAP30 jump if nothing to list 146 * \ / 147 1C026 E441A8ED 1 148 ST R1 VALUE save WRU 0 to output later 149 150 * if SSU, find max NVM size and ensure true SSU goes in table 1C027 64840004 2 IMM 151 CPR R2 DEVSSU is it an SSU? 1C028 FE0DC02F 152 JNE NOTASSU jump if not 1C029 604A7080 1 1 CBM 153 LD R1 R1/DEVREV get SSU revision 1C02A 6444000D 1 IMM 154 CPR R1 SSUNVMREV old or new 1C02B ECBFA985 7 @ 155 STLGT @SSUNVMIDXP(R7) save the answer 1C02C 6041A8ED 1 156 LD R1 VALUE retrieve WRU 0 1C02D 5C0A4E10 1 CBM 157 CMZ R1/THEBIT is it the REAL SSU? 1C02E FE0DC032 158 JNE MAP25 jump if not 0001C02F 159 NOTASSU LABEL 160 * \ / 161 162 * set SLOTS table to have lowest slot of each bus module type 1C02F 5C21A97B 0 163 CMZ SLOTS(R0) have we already found one of these? 1C030 FE07C032 164 JGE MAP25 if so then continue on 1C031 E5E1A97B 7 0 165 ST R7 SLOTS(R0) else set the slot for this device type 0001C032 166 MAP25 LABEL 1C032 3A25CDBA 0 2 167 LEA2 R0 DEVNAMES(R2) then point to device name 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 254 (RDUSTATUS) F 24 Map Command and Subroutine 1C033 DC41B87B 168 CALLNP MESSMOVE put into line 1C034 DC41B5F1 169 CALLNP HEXOUT list out the WRU response 170 * \ / 171 0001C035 172 MAP30 LABEL 1C035 19C40001 7 IMM 173 ADD R7 1 advance to next slot 1C036 FB27C016 4 174 JDR R4 MAP20 next line spot and recycle 175 * \ / 176 1C037 DC41B886 177 CALLNP OUTO list out current line 1C038 65C4000F 7 IMM 178 CPR R7 MAXSLOT see if we have done them all 1C039 FE0BC014 179 JLE MAP10 jump if not done 180 * \ / 181 182 ********************************************************************************** 183 * * 184 * Select the lowest port on PPU, if any. * 185 * * 186 ********************************************************************************** 187 1C03A 5C01A980 188 CMZ PPUPORT have a favorite one already? 1C03B FE07C04F 189 JGE MAP50 jump if so 1C03C 5C01A97E 190 CMZ PPUSLOT is PPU on system? 1C03D FE09C04F 191 JLT MAP50 if not don't look for port 1C03E 61C40000 7 IMM 192 LD R7 0 look for a port on ppu 0001C03F 193 MAP40 LABEL 1C03F 600BE000 0 7 CBM 194 LD R0 R7/BITS 16:15 shift port number around 1C040 E401A91F 0 195 ST R0 ADDRESS then set address 1C041 DC01BBAC 196 CALL SHIPCOM issue device id request 1C042 4101BBF5 197 PAR RESPERROR error address 1C043 41440000 IMM 198 PARV KLAS0 class=0 1C044 4141A97E 199 PARV PPUSLOT slot=ppu 1C045 41440002 IMM 200 PARV BCMREAD bcm=2 1C046 4041A91F 201 PARVL ADDRESS address=from port 1C047 5C01F38E 202 CMZ DATA(1) check response 1C048 FE03C04C 203 JEQ MAP45 jump if nothing there 1C049 E5C1A980 7 204 ST R7 PPUPORT otherwise remember the port 1C04A D141A91F 205 STMW ADDRESS in case an attempt to use "." 1C04B FE0FC04F 206 JMP MAP50 then continue on 207 * --- 208 0001C04C 209 MAP45 LABEL 1C04C 19C40001 7 IMM 210 ADD R7 1 advance to next port 1C04D 65C40003 7 IMM 211 CPR R7 MAXPORT 4 ports on ppu 1C04E FE0BC03F 212 JLE MAP40 jump if more to check 213 *\ / 214 0001C04F 215 MAP50 LABEL 1C04F 61D78801 7 6 BASE 216 LD R7 SP,MAPTMP restore R7 1C050 5D1F8002 6 STAK 217 LEAVE POP 218 * --- 219 220 END of MAPPER subroutine 221 222 END of MAP command 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 255 (RDUSTATUS) F 24 WRU and WRUALL commands 225 226 BLOCK WRU commands 227 ENTRY WRUALL 228 ENTRY DISPWRU 229 ENTRY WRU1LIST 230 231 ********************************************************************************** 232 * * 233 * This section handles the WRU command. It obtains all sixteen * 234 * WRU's from the requested slot. They are displayed on four lines * 235 * of the screen, four to a line. Each WRU is checked for errors * 236 * and acted on accordingly. * 237 * * 238 ********************************************************************************** 239 0001C051 240 DISPWRU LABEL 1C051 DC41C0B9 241 CALLNP WRULIST list the desired WRU 1C052 5CA1BBF6 0 242 LDPC RESPTAB(R0) then go get new command or error handler 243 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 256 (RDUSTATUS) F 24 WRU and WRUALL commands 245 246 ********************************************************************************** 247 * * 248 * The WRUALL command lists the WRUs for all the slots of the * 249 * remote machine which have devices in them. We let the output * 250 * routine handle ---MORE--- processing. If there is a bad remote * 251 * machine error while processing this command we will go to the * 252 * proper error handler. * 253 * * 254 ********************************************************************************** 255 0001C053 256 WRUALL LABEL 1C053 EC1F8001 6 STAK 257 STZ STAK SP,1 say no device found on remote system 1C054 61C40000 7 IMM 258 LD R7 0 start with slot zero 0001C055 259 NEXTSLOT LABEL 1C055 5C2FA96B 7 260 CMZ SLOTTYPE(R7) is there a device here? 1C056 FE03C05B 261 JEQ NODEVICE jump if nothing is there 262 * \ / 263 1C057 EDD78800 6 BASE 264 STW SP,0 say we have found a device 1C058 E5C1A830 7 265 ST R7 SBUFFW save slot number for lister 1C059 DC41C0B9 266 CALLNP WRULIST list the WRU 1C05A FA0DC061 0 267 JNEZ R0 WRUALLERR if bad trouble in River City 268 * \ / 269 0001C05B 270 NODEVICE LABEL 1C05B 19C40001 7 IMM 271 ADD R7 1 move to the next slot 1C05C 65C4000F 7 IMM 272 CPR R7 MAXSLOT are we done yet? 1C05D FE0BC055 273 JLE NEXTSLOT if not then don't quit 274 * \ / 275 1C05E 5C178800 6 BASE 276 CMZ SP,0 did we find a device out there? 1C05F FE03C062 277 JEQ NODEVICES if not then complain 1C060 FE0FBDC8 278 JMP RDUOK go get the next command 279 * --- 280 0001C061 281 WRUALLERR LABEL 1C061 5CA1BBF6 0 282 LDPC RESPTAB(R0) handle the error 283 * --- 284 0001C062 285 NODEVICES LABEL 1C062 6005D22C 0 IMM 286 LD R0 ADR ERM392 "No map information to find devices" 1C063 FE0FBE35 287 JMP RDUERR 288 * --- 289 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 257 (RDUSTATUS) F 24 WRU and WRUALL commands 291 292 ********************************************************************************** 293 * * 294 * WRU1LIST will list the slot number, type of device, and * 295 * analysis of the WRU1 information. * 296 * Call: * 297 * CALL WRU1LIST * 298 * PARV slot number * 299 * PARVL WRU(1) * 300 * Eats R0:R4. * 301 * * 302 ********************************************************************************** 303 304 BEGFRAME 305 ENDFRAME 306 1C064 DD1F8001 6 STAK 307 WRU1LIST ENTR PUSH 1C065 C141A830 308 STPV SBUFFW put the slot number here 1C066 C0530000 4 REG 309 STPVL R4 the WRU(1) 310 1C067 DC41C0AA 311 CALLNP SLOTDISP start the output line with the slot type 1C068 18C40002 3 IMM 312 ADD OBP 2 leave some space 1C069 600B0040 0 4 CBM 313 LD R0 R4/BITS 0:3 get the error code 1C06A 6404000F 0 IMM 314 CPR R0 0F is this an undefined error? 1C06B FE03C0A2 315 JEQ WRUUNDEF if so then the WRU info is no good 1C06C 6021D3D2 0 0 316 LD R0 WRU1TAB(R0) R0 -> error message 1C06D DC41B87B 317 CALLNP MESSMOVE put the message into the table 1C06E 18C40001 3 IMM 318 ADD OBP 1 leave some space 319 1C06F F309C072 4 320 JBF R4/BIT 4 CHECKCBN jump if no RTO to report 1C070 6005CDA5 0 IMM 321 LD R0 ADR RTOMESS "RTO," 1C071 DC41B87B 322 CALLNP MESSMOVE 323 * \ / 324 0001C072 325 CHECKCBN LABEL 1C072 F30BC075 4 326 JBF R4/BIT 5 CHECKRFR jump if no CBN to report 1C073 6005CDA7 0 IMM 327 LD R0 ADR CBNMESS "CBN," 1C074 DC41B87B 328 CALLNP MESSMOVE 329 * \ / 330 0001C075 331 CHECKRFR LABEL 1C075 F30DC078 4 332 JBF R4/BIT 6 CHECKRFI jump if no RFR to report 1C076 6005CDA9 0 IMM 333 LD R0 ADR RFRMESS "RFR," 1C077 DC41B87B 334 CALLNP MESSMOVE 335 * \ / 336 0001C078 337 CHECKRFI LABEL 1C078 F30FC07B 4 338 JBF R4/BIT 7 REPORTTO jump if no RFI to report 1C079 6005CDAB 0 IMM 339 LD R0 ADR RFIMESS "RFI," 1C07A DC41B87B 340 CALLNP MESSMOVE 341 * \ / 342 0001C07B 343 REPORTTO LABEL 1C07B 6005CDAD 0 IMM 344 LD R0 ADR TOMESS "To=" 1C07C DC41B87B 345 CALLNP MESSMOVE 1C07D 600B1040 0 4 CBM 346 LD R0 R4/BITS 8:11 get contents of TO register 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 258 (RDUSTATUS) F 24 WRU and WRUALL commands 1C07E E401A8ED 0 347 ST R0 VALUE put where HEXOUT can find 1C07F DC41B605 348 CALLNP HEXOUTD put in the digit 1C080 DC41C0A5 349 CALLNP ADDCOMMA put in a separator 350 1C081 6005CDAE 0 IMM 351 LD R0 ADR FROMMESS "From=" 1C082 DC41B87B 352 CALLNP MESSMOVE 1C083 600B1840 0 4 CBM 353 LD R0 R4/BITS 12:15 get contents of FROM register 1C084 E401A8ED 0 354 ST R0 VALUE put where HEXOUT can find 1C085 DC41B605 355 CALLNP HEXOUTD put in the digit 1C086 DC41C0A5 356 CALLNP ADDCOMMA put in a separator 357 1C087 6005CDB0 0 IMM 358 LD R0 ADR F1MESS "F1=" 1C088 DC41B87B 359 CALLNP MESSMOVE 1C089 600B2420 0 4 CBM 360 LD R0 R4/BITS 18:19 get flags one 1C08A 6021CDB6 0 0 361 LD R0 FLAGTAB(R0) R0 -> flag status message 1C08B DC41B87B 362 CALLNP MESSMOVE move into output 1C08C DC41C0A5 363 CALLNP ADDCOMMA put in a separator 364 1C08D 600B2840 0 4 CBM 365 LD R0 R4/BITS 20:23 get the parity error bits 1C08E FA03C094 0 366 JEQZ R0 NOPE1 jump if no error here 1C08F E401A8ED 0 367 ST R0 VALUE save for HEXOUT 1C090 6005CDB2 0 IMM 368 LD R0 ADR PE1MESS "PE1=" 1C091 DC41B87B 369 CALLNP MESSMOVE 1C092 DC41B605 370 CALLNP HEXOUTD put in the flags 1C093 DC41C0A5 371 CALLNP ADDCOMMA put in a separator 372 * \ / 373 0001C094 374 NOPE1 LABEL 1C094 6005CDB1 0 IMM 375 LD R0 ADR F2MESS "F2=" 1C095 DC41B87B 376 CALLNP MESSMOVE 1C096 600B3420 0 4 CBM 377 LD R0 R4/BITS 26:27 get flags two 1C097 6021CDB6 0 0 378 LD R0 FLAGTAB(R0) R0 -> flag status message 1C098 DC41B87B 379 CALLNP MESSMOVE move into output 380 1C099 600B3840 0 4 CBM 381 LD R0 R4/BITS 28:31 get the parity error bits 1C09A FA03C0A0 0 382 JEQZ R0 WRUFINISH jump if no error here 1C09B E401A8ED 0 383 ST R0 VALUE save for HEXOUT 1C09C DC41C0A5 384 CALLNP ADDCOMMA put in a comma separator 1C09D 6005CDB4 0 IMM 385 LD R0 ADR PE2MESS "PE2=" 1C09E DC41B87B 386 CALLNP MESSMOVE 1C09F DC41B605 387 CALLNP HEXOUTD put in the flags 388 * \ / 389 0001C0A0 390 WRUFINISH LABEL 1C0A0 DC41B886 391 CALLNP OUTO send out the buffer 1C0A1 5D1F8001 6 STAK 392 LEAVE POP 393 * --- 394 0001C0A2 395 WRUUNDEF LABEL 1C0A2 6005D221 0 IMM 396 LD R0 ADR ERM390 "No valid WRU information for this device" 1C0A3 DC41B87B 397 CALLNP MESSMOVE 1C0A4 FE0FC0A0 398 JMP WRUFINISH and finish things up 399 * --- 400 401 ********************************************************************************** 402 * * 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 259 (RDUSTATUS) F 24 WRU and WRUALL commands 403 * A simple little subroutine to add a comma to the output line. * 404 * Call: * 405 * OBP = index into output buffer * 406 * CALLNP ADDCOMMA * 407 * OBP = index into output buffer * 408 * Eats R0. * 409 * * 410 ********************************************************************************** 411 1C0A5 DD5F8001 6 STAK 412 ADDCOMMA ENTRNP PUSH 1C0A6 6004002C 0 IMM 413 LD R0 COMMA 1C0A7 E437AC01 0 3 @ 414 ST R0 @OBPT(OBP) put in a separator 1C0A8 18C40001 3 IMM 415 ADD OBP 1 1C0A9 5D1F8001 6 STAK 416 LEAVE POP 417 * --- 418 419 END of WRU commands 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 260 (RDUSTATUS) F 24 WRU and WRUALL commands 421 422 ********************************************************************************** 423 * * 424 * SLOTDISP creates an output line describing a slot as follows: * 425 * Slot 0=MCU. The rest of the output buffer is blank filled. * 426 * Call: * 427 * SBUFFW contains the slot number * 428 * CALLNP SLOTDISP * 429 * OBP -> current position in output buffer * 430 * Eats R0:R2, sets R3. * 431 * * 432 ********************************************************************************** 433 434 BLOCK 435 ENTRY SLOTDISP 436 437 BEGFRAME 438 ENDFRAME 439 1C0AA DD5F8001 6 STAK 440 SLOTDISP ENTRNP PUSH 1C0AB DC41B86F 441 CALLNP BLANKOUT start with a clean line 1C0AC 6005CDEA 0 IMM 442 LD R0 ADR MESSLOT "Slot " 1C0AD DC41B875 443 CALLNP MESSMOVEZ start our output line 1C0AE 6001A830 0 444 LD R0 SBUFFW get the slot number 1C0AF FA2DC0B7 0 445 JEQMW R0 SDUNK jump if slot number not known 1C0B0 E401A8ED 0 446 ST R0 VALUE put where hexout can find it 1C0B1 DC41B605 447 CALLNP HEXOUTD convert the slot number 1C0B2 6001A830 0 448 LD R0 SBUFFW get the slot number 1C0B3 6021A96B 0 0 449 LD R0 SLOTTYPE(R0) get the type of this slot 1C0B4 3A21CDCA 0 0 450 LEA2 R0 DEVNAME(R0) R0 -> name of device 0001C0B5 451 SDPRINT LABEL 1C0B5 DC41B87B 452 CALLNP MESSMOVE add to our output line 1C0B6 5D1F8001 6 STAK 453 LEAVE POP return 454 * --- 455 456 * slot number unknown, use very generic message 0001C0B7 457 SDUNK LABEL 1C0B7 3801CDDA 0 458 LEA R0 DEVUNKMSG "?=xxx" 1C0B8 FE0FC0B5 459 JMP SDPRINT print and go 460 * --- 461 462 END of SLOTDISP subroutine 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 261 (RDUSTATUS) F 24 WRU and WRUALL commands 464 465 ********************************************************************************** 466 * * 467 * WRULIST will list the WRU information for the slot number * 468 * in SBUFFW. If any bus error is detected while checking the WRUs * 469 * we will print the error message. We will return the RESPCHECK * 470 * error code in R0. * 471 * Call: * 472 * SBUFFW = slot number * 473 * CALLNP SBUFFW * 474 * JNEZ R0 error handler (R0 contains RESPCHECK error code) * 475 * Eats R0:R4. * 476 * * 477 ********************************************************************************** 478 479 BLOCK 480 ENTRY WRULIST 481 482 BEGFRAME 00178801 6 BASE 483 WRUR5 BSS 1 temp for R5 484 ENDFRAME 485 1C0B9 DD5F8002 6 STAK 486 WRULIST ENTRNP PUSH 1C0BA E5578801 5 6 BASE 487 ST R5 SP,WRUR5 save this for the duration 1C0BB DC41BBD1 488 CALLNP SHIPWRU get the WRU's from remote machine 1C0BC DC01C064 489 CALL WRU1LIST list WRU 1 analysis 1C0BD 4141A830 490 PARV SBUFFW slot number 1C0BE 4041F390 491 PARVL DATA(3) the WRU(1) response 1C0BF 61440000 5 IMM 492 LD R5 0 start at the first 0001C0C0 493 WRU10 LABEL 1C0C0 DC41B86F 494 CALLNP BLANKOUT clear output line 1C0C1 61040003 4 IMM 495 LD R4 NREGPL-1 get item count for line 0001C0C2 496 WRU20 LABEL 1C0C2 60E9CD73 3 4 497 LD OBP REGPOST(R4) get position within line 1C0C3 E541A8ED 5 498 ST R5 VALUE set the WRU code for listing 1C0C4 DC41B605 499 CALLNP HEXOUTD list out the WRU code 1C0C5 6004003A 0 IMM 500 LD R0 COLON get some dress 1C0C6 E437AC01 0 3 @ 501 ST R0 @OBPT(OBP) add to the line 1C0C7 18C40002 3 IMM 502 ADD OBP 2 now we are set 503 1C0C8 622BF38D 01 5 504 LD2 R0 DATA(R5) get response for this WRU 1C0C9 E0D34000 3 5 REG 505 EXCH R3 R5 for CHEKRESP 1C0CA DC41BC1B 506 CALLNP CHEKRESP see if error with WRU 1C0CB E152C000 5 3 REG 507 EXCH R5 R3 restore these 1C0CC FA45C0D8 1 508 JGTZ R1 WRUERR if so then get out of here 509 * \ / 510 1C0CD 622BF38D 01 5 511 LD2 R0 DATA(R5) get response for this WRU 1C0CE E441A8ED 1 512 ST R1 VALUE where we need it 1C0CF DC41B5F1 513 CALLNP HEXOUT ship it out 1C0D0 19440001 5 IMM 514 ADD R5 1 on to the next WRU 1C0D1 FB27C0C2 4 515 JDR R4 WRU20 next position in line if room 1C0D2 DC41B886 516 CALLNP OUTO if no room print line 1C0D3 6544000F 5 IMM 517 CPR R5 WRUMAX have we done them all? 1C0D4 FE0BC0C0 518 JLE WRU10 do another round if not done yet 519 * \ / 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 262 (RDUSTATUS) F 24 WRU and WRUALL commands 520 0001C0D5 521 WRUEXIT LABEL 1C0D5 60040000 0 IMM 522 LD R0 0 all went ok 0001C0D6 523 WRUBADBYE LABEL error exit 1C0D6 61578801 5 6 BASE 524 LD R5 SP,WRUR5 restore callers register 1C0D7 5D1F8002 6 STAK 525 LEAVE POP 526 * --- 527 0001C0D8 528 WRUERR LABEL 1C0D8 E45F8001 1 6 STAK 529 ST R1 STAK SP,1 hold this for a moment 1C0D9 10C40004 3 IMM 530 SUB OBP 4 get rid of last chars in buffer 1C0DA DC41B886 531 CALLNP OUTO list anything in final line 1C0DB 601F8001 0 6 STAK 532 LD R0 STAK SP,1 restore this 1C0DC 64040006 0 IMM 533 CPR R0 6 simple bus error? 1C0DD FE0DC0D6 534 JNE WRUBADBYE go to the bad exit 1C0DE DC41BC69 535 CALLNP BUSERR print the proper bus error mesage 1C0DF FE0FC0D5 536 JMP WRUEXIT and leave 537 * --- 538 539 END of WRULIST 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 263 (RDUSTATUS) F 24 Status Command 542 543 BLOCK STATUS command 544 ENTRY CSTATUS 545 ENTRY DOSTATUS 546 ENTRY STATUS 547 ENTRY PSTATUS 548 ENTRY SSTATUS 549 ENTRY MSTATUS 550 551 552 ********************************************************************************** 553 * * 554 * This section handles the C STATUS command. It lists out the * 555 * registers of each of the CPU's on the system. It simply loops * 556 * through all slots checking for a CPU and then calling the * 557 * CPU lister. * 558 * * 559 ********************************************************************************** 560 0001C0E0 561 CSTATUS LABEL 1C0E0 DC41BC7E 562 CALLNP SHIPNOP make sure info is current 1C0E1 DC41C108 563 CALLNP DOSTATUS list out system status 1C0E2 EC1F8001 6 STAK 564 STZ STAK SP,1 start at slot zero 1C0E3 61440000 5 IMM 565 LD R5 0 keep in sync 566 * \ / 567 0001C0E4 568 STAT10 LABEL 1C0E4 602BA96B 0 5 569 LD R0 SLOTTYPE(R5) get device type of this slot 1C0E5 64040002 0 IMM 570 CPR R0 DEVCPU is it a CPU? 1C0E6 FE0DC0E9 571 JNE STAT20 if not then don't stop here 1C0E7 DC01C88C 572 CALL CPUREGS then list out the registers 1C0E8 40534000 5 REG 573 PARVL R5 pass the slot number 0001C0E9 574 STAT20 LABEL 1C0E9 BD578800 5 6 BASE 575 INCL R5 SP,0 advance to next slot 1C0EA 6544000F 5 IMM 576 CPR R5 MAXSLOT have we been through them all? 1C0EB FE0BC0E4 577 JLE STAT10 if not then go do another 578 * \ / 579 1C0EC FE0FBDC8 580 JMP RDUOK else we are all done 581 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 264 (RDUSTATUS) F 24 Status Command 583 584 ********************************************************************************** 585 * * 586 * STATLINE creates and outputs the first status line * 587 * used by DOSTATUS. This line contains the switches, time fence, * 588 * bus error flag, and interrupt status. * 589 * * 590 * "Switches=xx Timer Fence=x BSE=x Interrupt=x" * 591 * * 592 * Call: * 593 * SYSSTAT contains recent system status * 594 * CALLNP STATLINE * 595 * JNEZ R0 * 596 * Eats R0:R5. * 597 * * 598 ********************************************************************************** 599 600 BLOCK 601 ENTRY STATLINE 602 603 BEGFRAME 604 ENDFRAME 605 1C0ED DD5F8001 6 STAK 606 STATLINE ENTRNP PUSH 1C0EE 6141A8DE 5 607 LD R5 SYSSTAT pick up status info 1C0EF DC41B86C 608 CALLNP BLANKOUTW make a clean line 609 1C0F0 6005CE0C 0 IMM 610 LD R0 ADR MESSFP "Switches=" 1C0F1 DC41B87B 611 CALLNP MESSMOVE put message in line 1C0F2 600B4080 0 5 CBM 612 LD R0 R5/SFP get the value 1C0F3 E401A8ED 0 613 ST R0 VALUE set up to list 1C0F4 60840002 2 IMM 614 LD R2 2 we want two digits 1C0F5 DC41B5FB 615 CALLNP HEXOUTN so go list them 616 1C0F6 6005CE0F 0 IMM 617 LD R0 ADR MESSTF " Timer Fence=" 1C0F7 DC41B87B 618 CALLNP MESSMOVE add to line 1C0F8 600B5010 0 5 CBM 619 LD R0 R5/STF get value 1C0F9 E401A8ED 0 620 ST R0 VALUE set up to list 1C0FA DC41B62D 621 CALLNP DECOUT add the result 622 1C0FB 6005CE13 0 IMM 623 LD R0 ADR MESSBSE " BSE=" 1C0FC DC41B87B 624 CALLNP MESSMOVE bus error data 1C0FD 600B5A10 0 5 CBM 625 LD R0 R5/SBSE get the flag 1C0FE E401A8ED 0 626 ST R0 VALUE now list it 1C0FF DC41B62D 627 CALLNP DECOUT well, now 628 1C100 6005CE15 0 IMM 629 LD R0 ADR MESSINT " Interrupt=" 1C101 DC41B87B 630 CALLNP MESSMOVE interrupt status 1C102 600B5E10 0 5 CBM 631 LD R0 R5/SINT get interrupt flag 1C103 E401A8ED 0 632 ST R0 VALUE ready to go 1C104 DC41B62D 633 CALLNP DECOUT this will do it 1C105 DC41B886 634 CALLNP OUTO list out the line 635 1C106 600B5210 0 5 CBM 636 LD R0 R5/SERR get error status 1C107 5D1F8001 6 STAK 637 LEAVE POP 638 * --- 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 265 (RDUSTATUS) F 24 Status Command 639 640 END of STATLINE 1 Assembler C9101 BTI 8000 Remote Diagnostic Utility A9207a 24-Jul-92 15:15 PAGE 266 (RDUSTATUS) F 24 Status Command 642 643 ********************************************************************************** 644 * * 645 * DOSTATUS picks up the system status and lists out the * 646 * switches, timer fence, bus error flag, and interrupt status. * 647 * If there is a halt or stop message, it is decoded and listed * 648 * out as well. We also handle printing breakpoint messages. * 649 * Call: * 650 * SYSSTAT contains system status * 651 * CALLNP DOSTATUS * 652 * Eats R0:R5. * 653 * * 654 ********************************************************************************** 655 656 BLOCK 657 ENTRY DOSTATUS 658 659 BEGFRAME 00178801 6 BASE 660 DOSTR4R5 BSS 2 temp save for R4,R5 661 ENDFRAME 662 00000010 BYTE 663 PBIT EQU BIT 0 flag in R7 to say error status found 664 1C108 DD5F8003 6 STAK 665 DOSTATUS ENTRNP PUSH 1C109 DC41C0ED 666 CALLNP STATLINE do the status line first 1C10A FA0DC10C 0 667 JNEZ R0 DOSTERR jump if error to report 0001C10B 668 DOSTEXIT LABEL else, exit 1C10B 5D1F8003 6 STAK 669 LEAVE POP return 670 * --- 671 0001C10C 672 DOSTERR LABEL 1C10C EC0BC010 7 CBM 673 STZ R7/PBIT say nothing found yet 1C10D DC01BBAC 674 CALL SHIPCOM get error block 1C10E 4101BBF5 675 PAR RESPERROR error address 1C10F 41440002 IMM 676 PARV KLAS2 class=2 1C110 41440000 IMM 677 PARV 0 slot=0 1C111 41440008 IMM 678 PARV BCMERRBLK bcm=error block 1C112 40440000 IMM 679 PARVL 0 address=0 680 * \ / 681