1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 1 ($$$LOGO.) F 2 2 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, 1992 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 3 4 5 6 * PPPP EEEEE EEEEE K K & PPPP OOO K K EEEEE 7 * P P E E K K & & P P O O K K E 8 * P P E E K K & P P O O K K E 9 * PPPP EEEE EEEE KK & & & PPPP O O KK EEEE 10 * P E E K K & & P O O K K E 11 * P E E K K & & P O O K K E 12 * P EEEEE EEEEE K K &&& & P OOO K K EEEEE 13 14 15 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 2 F 0 17 18 ********************************************************************************** 19 * * 20 * Revision Date * 21 * -------- ---- * 22 * A8502 13 Feb 85 * 23 * Change DSCAN help message. MH * 24 * A8507 17 Jul 85 * 25 * Add memory parity error to disk error * 26 * table. Added block number to checksum * 27 * and bad disk address error messages. MH * 28 * A8510 10 Oct 85 * 29 * Single word time display (Z) fixed to * 30 * not skip a word on line feed terminator. * 31 * A8602 19 Feb 86 * 32 * Added new command SSCAN to do SAF checking. LB * 33 * Added check in FIND command for empty file. MH * 34 * Documentation fixes. RC * 35 * A8603 17 Mar 86 * 36 * Added list SAF option to the SSCAN command. LB * 37 * A8606 Jun 86 * 38 * Added code to fill input buffer. Eliminates * 39 * parity error halts on random memory contents. RC * 40 * A8608 11 Aug 86 * 41 * Added code for two new commands, CMPR - which * 42 * compares two blocks and CKSUM - which generates * 43 * a unique checksum for a block, group of blocks. JB * 44 * A8608a 15 Aug 86 * 45 * Added code in the CKSUM command to checksum an * 46 * entire code file. JB * 47 * A8609 02 Sep 86 * 48 * Complete reorganization of the files, both internally * 49 * and externally. JB * 50 * A8609a 02 Sep 86 * 51 * Fix to the SSCAN command to check for bad backwards * 52 * link. JB * 53 * A8612 12 Dec 86 * 54 * Changed the way substituted disk blocks were read, this * 55 * allows both online and offline substituted block reads. * 56 * A8703 18 Mar 87 * 57 * Fixes to CKSUM command. * 58 * Misc fiddling with SSCAN lister. RC * 59 * A8703a 31 Mar 87 * 60 * Addition of relative block checking to SSCAN. RC * 61 * A8706 19 Jun 87 * 62 * Fix to DiskErrOut calling sequence. * 63 * A8708 xx Aug 87 * 64 * Fixed typo in CKSUM help info. * 65 * A8708a 25 Aug 87 * 66 * Fixed bug in SCAN that caused an erroneous printout * 67 * following scanning of block 0 of a code file. RC * 68 * Some rearrangement and modification to HELP messages. RC * 69 * Fixed CCBMAXPAGE usages for one-off. RC * 70 * A8710 07 Oct 87 * 71 * Put CMPR and CLOSEGAP commands in alphabetical order in * 72 * help info. RC * 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 3 F 0 73 * A8801 26 Jan 88 * 74 * Fixed the SSCAN L option to work on files with text * 75 * with forms records that cross page boundaries. Fixed * 76 * SSCAN options to work on multi-block records. JB. * 77 * A8805 27 May 88 * 78 * Changed OPENGAP and CLOSEGAP to use FETCHITEM to get count * 79 * (was using FETCHITMH, which assumed hex ... confusing). * 80 * Added strings for new OPENDISK errors, and a bit tab to * 81 * decide whether error is liveable. DH * 82 * A8806 03 Jun 88 * 83 * Changed SSCAN ,RECORDS format to print multiple records * 84 * per line instead of one record per line. JB. * 85 * A8808 30 Aug 88 * 86 * Added DNSCAN and NSCAN commands. Modified SCAN and DSCAN * 87 * so that a new search range could be specified using prior * 88 * data parameters. * 89 * A8809 26 Sep 88 * 90 * Modified to ignore leading colon on numeric and Pak format * 91 * replacements. Changed bit names from Fetchitem to use * 92 * the standard names defined in OPLVECTORS. Call to DISPLAY * 93 * fixed to not sound horn. RC * 94 * Fixed DISK command to set DISKCBP correctly, and to warn * 95 * user, in the event OPENDISK reverted to the system disk. DH * 96 * A8810 18 Oct 88 * 97 * Modified to allow P6. Changes to D concerning Ascii display * 98 * type. Preparation for larger changes in display/alter * 99 * syntax. RC * 100 * A8810a 20 Oct 88 * 101 * Fixed Time input to ignore leading colon. Other minor * 102 * changes. Added P12 display. Major mods to display and * 103 * display long code to ensure that double word boundary * 104 * crossings are handled properly. RC * 105 * A8902 13 Feb 89 * 106 * Fixed month checker in time input to demand 'P.' or 'PM' * 107 * for the PM indicator. Was taking PST and assuming it * 108 * meant PM. RC * 109 * A8910 30 Oct 89 * 110 * Added ASCAN command (search ADT) CG * 111 * A8911 14 Nov 89 * 112 * Added ability to break from DSCAN and DNSCAN. * 113 * A8911a 20 Nov 89 * 114 * Added indirect block addressing to LOAD. CG * 115 * A8911b 22 Nov 89 * 116 * Added SUBST command to substitute a disk block. CG * 117 * A8912 14 Dec 89 * 118 * Modified SUBCHECK. If the volume is maintenance mounted, do * 119 * not give the user the option of loading the substitute block * 120 * because it would not work anyway. Instead, give a message * 121 * and use real block. CG * 122 * A9003 09 Mar 90 * 123 * Added ACCOUNT command. Allows restriction of SCANs to blocks of * 124 * a particular account. CG * 125 * A9003a 12 Mar 90 * 126 * Added DSCAN,L and DSCAN,N options. These options (the same * 127 * for now) cause the block type to be printed and the dscan * 128 * to continue. RC * 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 4 F 0 129 * A9004 12 Apr 90 * 130 * When the user breaks out of a D(N)SCAN, save the current * 131 * position as the default place to start the next one. CG * 132 * A9005 11 May 90 * 133 * In ASCAN, check for the case of the ADT block being searched * 134 * being within the requested range. CG * 135 * A9007 02 Jul 90 * 136 * Added VOLUME command (like DISK), available only online. CG * 137 * A9008 03 Aug 90 * 138 * Added OPENGAPB and CLOSEGAPB commands. CG * 139 * A9106 11 Jun 91 * 140 * Fixed COMMANDS command to print all commands. * 141 * Modified some HELP text. Added MERGE command. RC * 142 * A9108 01 Aug 91 * 143 * Added code to check DCBSCSI to see if SCSI disk drive. * 144 * A9207 30 Jul 92 * 145 * Amplified DSCAN help message. Mods to SSCAN for * 146 * case of filemark. RC * 147 * A9208 05 Aug 92 * 148 * Mods to ASCAN for message and parameters. RC * 149 * A9306 29 Jun 93 * 150 * Fix to CMPR for mis-compare message format. New feature * 151 * in CMPR to find differences beyond the first. RC * 152 * * 153 ********************************************************************************** 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 5 F 0 155 156 157 BLOCK PEEK&POKE program 158 START BEGINNING 159 START2 BEGINNING2 160 175 176 ORG 03000 base for offline routines 03000 FE0E3432 177 JMP BEGINNING2 ma 3000 is always starting pc 178 * --- 179 03001 41393330 180 VERSION TEXTZ "A9306" change in title, too 182 03003 20506565 183 INVOKMES TEXTZ " Peek&Poke Version \C1\." 0300A 20426164 184 BADFORMM TEXTZ " Bad format." 185 0000300E 186 PROMPTCNT BSS 1 count of times we've prompted 0300F F848300E 187 PROMPTPTR PTR PROMPTCNT/BIT 31 00003010 188 PROMPTTAB LABEL indexed by @promptptr 03010 00003012 189 PTR PROMPT1 03011 00003014 190 PTR PROMPT2 03012 2A504545 191 PROMPT1 TEXTZ "*PEEK>" 03014 2A504F4B 192 PROMPT2 TEXTZ "*POKE>" 193 03016 00000000 194 ONLINE VFD 0 True if called from ONPL 00003017 195 PFDATABLK BSS 1 page file for DATABLK 00003018 196 PFCCBBLK BSS 1 page file for CCBBLK 00003019 197 PFCMPRBLK BSS 1 page file for CMPRBLK 198 199 * Input buffer definitions 200 0000301A 201 BEFOREPTR BSS 1 R4 before call to fetchitem 00000050 ABS 202 BUFL EQU 80 buffer length 0000301B 203 BUF LABEL word address for input buffer 0200301B 204 BUFC BSSC BUFL input buffer 0302F 020C301B 205 BUFP PTR BUFC pointer into the buffer 03030 C20C301A 206 PREBUF PTR BUFC(-1) pointer to char before BUF 207 208 * Disk control block definition 209 00003031 210 DISKCBP BSS 1 pointer to disk control block 00003032 211 DISKCBB BSS DCBLEN my own disk control block 212 213 * Miscellaneous variables 214 0000303A 215 FILEFLAG BSS 1 non-zero if patching file 0000303B 216 INBLOCK BSS 1 the current read in block 0000000F ABS 217 FILENMLN EQU 15 length of filenames in words 0000303C 218 FILENAME BSS FILENMLN name of file being patched 0000304B 219 LDFILENM BSS FILENMLN name of file last loaded 0000305A 220 SECBLKDAS BSS 2 address of the security blocks of the current disk 221 (valid after calling READSECBLK) 222 * (-1 = none, -2 = block from other disk) 223 * The following locations are used during the processing of 224 * commands only. Their addresses are redefined as necessary. 0000305C 225 VARS BSS 16 16 locations worth of variables 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 6 F 0 Variable Definitions 0000306C 226 RESULTS BSS 4 holds checksum results 00003070 227 BLOCKS BSS 4 holds disk block numbers 00003074 228 FIRSTBLOCK BSS 1 first block to DSCAN 00003075 229 MODFLAG BSS 1 modify flag for block (0 sez clean) 00003076 230 NEXTPOS BSS 1 pointer to next input character 231 232 * Online break processing stuff 233 03077 FFFFFFFF 234 ORIGIMR VFD -1 original IMR register 03078 FFFFFFFF 235 ORIGIAD VFD -1 original IAD register 00003079 236 BREAKFLAG BSS 1 indicates whether break detected 0000307A 237 ONLINECA BSS 15 holds registers during interrupt 00003089 238 INTBLOCK LABEL 03089 0000307A 239 VFD ADR (ONLINECA) 0308A 00003412 240 VFD ADR (INTBREAK) 82000000 ABS 241 INTMASK EQU (1*BIT 0)+(1*BIT CAIMBREAK) enable and UINTBREAK 0308B 80000100 242 SSUBREAK VFD 080000100 SSU break character 0000000A ABS 243 REGIMR EQU 0A offset for IMR register 0000000B ABS 244 REGIAD EQU 0B offset for IAD register 245 246 * Program Variables for SSCAN command 247 0308C 0007FFFF 248 RLMASK VFD 07FFFF a mask used to get the record length 0000004C ABS 249 MAXSIZE EQU 76 largest a record can be before it is truncated 0308D 00000000 250 CRLINEFD TEXTZ "" 0000308E 251 BLKMSGON BSS 1 1 -> print out block messages 0000308F 252 BLOCKCNT BSS 1 relative block count 00003090 253 CHARDISP BSS 1 byte displacement within block 00003091 254 CHAROFFST BSS 1 record character offset within a block 00003092 255 ENDBYTE BSS 2 character end of SAF pointer 00003093 256 ENDBLK EQU ENDBYTE(1) block end of SAF pointer 00003094 257 HDRBLOCK BSS 1 block # where current header is 00003095 258 HDRDISP BSS 1 character offset where current header displacement is 00003096 259 PREVBLOCK BSS 1 previous SAF block, used in backwards link checking 00003097 260 LENREMAIN BSS 1 length of string yet to be moved into the output buffer 00003098 261 LINECNT BSS 1 number of lines/page 00003099 262 NUMMES BSS 1 number of messages/line 0000309A 263 RECMSGON BSS 1 1 -> print out record starts 0000309B 264 RECORDSIZE BSS 1 current record length 0000309C 265 STARTREC BSS 1 block number of when to list record starts 0000309D 266 STARTBLK BSS 1 block number of when to list block messages 0000309E 267 STARTLIST BSS 1 block number of where to start listing the file 0000309F 268 LASTADDR BSS 1 next available address for move into output buffer 000030A0 269 WORDOFFST BSS 1 record word offset within a block 270 271 * Program variables for the ASCAN command 272 000030A1 273 ADTBLOCK BSS 1 Remembers last ADT block that was 274 searched by ASCAN, for subsequent 275 resumption 000030A2 276 ADTCHAIN BSS 1 Remembers chain we left off in, 277 during last ASCAN 000030A3 278 ADTPRIOR BSS 1 The block preceding ADTBLOCK 000030A4 279 ASCANLIST BSS 1 Controls display of block numbers 000030A5 280 ADTOFFSET BSS 1 Element in block to search from 281 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 7 F 0 Variable Definitions 282 * The following items must stay in this order!!!! 283 284 BSS 0 force a word boundary 020030A6 285 CONTROLCHR BSSC 1 location for the string's control character 420030A6 286 OUTBUF BSSC 76 length of buffer 420030B9 287 ENDOUTBUF BSSC 3 used in case of buffer overflow 0000004F ABS 288 OUTBUFLEN EQU 79 output buffer length 030BA 420C30A6 289 PTROUTBUF PTR OUTBUF pointer to output buffer 030BB 420C30B9 290 PENDOUTBUF PTR ENDOUTBUF pointer to end of the output buffer 030BC 020C30A6 291 PCNTROLCHR PTR CONTROLCHR pointer to first character 292 293 * Program variables for the CMPR command 294 000030BD 295 CPRBLOCK BSS 1 comparison block for CMPR 000030BE 296 WORDOFF BSS 1 word offset into a page for CMPR 297 298 * Program variables for the SCAN and DSCAN command 299 000030BF 300 SCANACCT BSS 3 name of account to restrict scan to 000030C2 301 FIRSTLOC BSS 1 first location of the scan 000030C3 302 LASTLOC BSS 1 last location of the scan 000030C4 303 LASTBLOCK BSS 1 last block to DSCAN 000030C5 304 DOPTIONS BSS 1 options for DSCAN 000030C6 305 SUBRANGE1 BSS 1 first word in each block to DSCAN 000030C7 306 SUBRANGE2 BSS 1 last word in each block to DSCAN 000030C8 307 RESUMELOC BSS 1 first loc in first block to DSCAN 000030C9 308 NEGATE BSS 1 0 for = search, non-zero otherwise 309 * The next four words MUST appear together in this order 000030CA 310 SPATTERN BSS 1 plain 32-bit word to find, SCAN 000030CB 311 SMASK BSS 1 holds mask SCAN command 000030CC 312 DPATTERN BSS 1 plain 32-bit word to find, DSCAN 000030CD 313 DMASK BSS 1 holds mask for DSCAN command 314 315 * Program variables for the Display, D and DL command 316 317 * The next three symbols must appear in this order 030D0 00000000 318 DOUBTIME VFD 0,0,0 first word of double word time 000030CE 319 CONTENTS EQU DOUBTIME(0) the contents of the open location 000030CF 320 SINGTIME EQU DOUBTIME(1) where to put single word time contents 000030D0 321 TIMEZONE EQU DOUBTIME(2) time zone info 030D1 A00830CE 322 MIDTIME PTR DOUBTIME/BITS 20:51 points to 32 bit time 323 324 * FBI buffers for DATABLK, CCBBLK and CMPRBLK 325 000030D2 326 FBIBUFF BSS FBILNTH FBI holder for DATABLK 000030DD 327 FBIBUFF2 BSS FBILNTH FBI holder for CCBBLK 000030E8 328 FBIBUFF3 BSS FBILNTH FBI holder for CMPRBLK 000030F3 329 SECFBIBUFF BSS FBILNTH FBI holder for security block 330 331 * Miscellaneous constants and pointers 332 00000160 BYTE 333 PAGEINDX EQU BITS 0:21 page index in address 00002CA0 BYTE 334 PAGEDISP EQU BITS 22:31 displacement in a page in address 030FE 00FFFFFF 335 MSBLKMASK VFD 0FFFFFFFF/MSBLKFIELD 030FF 020C5400 336 CHARPTR PTR CHRDATABLK character pointer to data block 03100 20202020 337 BLANKS TEXT " " 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 8 F 0 Variable Definitions 338 339 * Buffer to hold YES/NO responses 340 00000008 ABS 341 RSPBUFL EQU 8 response buffer length 02003101 342 RSPBUF BSSC RSPBUFL actual response buffer 03103 020C3101 343 RSPBUFP PTR RSPBUF pointer to above buffer 344 345 * Various ASCII definitions 346 0000000D ABS 347 CR EQU 0D carriage return 00000020 ABS 348 BLANK EQU 020 ascii blank 0000003A ABS 349 COLON EQU 03A ascii colon 03104 533719C0 350 RADCODE PAK6 CODE PAK6 for 'CODE' 351 352 * Additional bit to the types returned by @VFETCHITM 353 00003610 BYTE 354 DEFBIT EQU BIT 27 set if default used 355 356 * Global message definitions 357 03105 20496E76 358 BRMESS TEXTZ " Invalid parameters" 0310A 205C4831 359 DISDATA2 TEXTZ " \H1\" 0310C 20204E6F 360 OVERFLOWM TEXTZ " No action taken. Start address or gap too large." 03119 20506174 361 SORRYMESS TEXTZ " Pattern not found." 362 363 * Definition of in-core substition list element 364 0000311E 365 SUBLIST BASE R0 substitution list element 00160800 0 BASE 366 SUBLLINK BSS 1 link to next element 00160801 0 BASE 367 SUBLBAD BSS 1 bad block number (includes volume number) 00160802 0 BASE 368 SUBLGOOD BSS 1 substitute block number (includes volume number) 369 DRCT 00000002 ABS 370 SUBLLOG EQU (DISPW SUBLIST) LOG 2 size log 2 371 ORG SUBLIST 372 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 9 F 0 Main Control 375 376 ********************************************************************************** 377 * * 378 * MAIN CONTROL * 379 * * 380 ********************************************************************************** 381 382 MAINCONTRL BLOCK 383 384 ENTRY BEGINNING2 initial entry for Off-line operation 385 ENTRY BEGINNING initial entry point for On-Line 386 ENTRY MC main control loop - get next command 387 ENTRY BADFORM give bad format msg, then next command 388 ENTRY COMMTAB table of names of commands (for HELP) 389 ENTRY COMMTABL length of command table 390 ENTRY SSCANRTN a return for SSCAN 391 ENTRY INTBREAK handles break processing 392 393 ORG ((DISPW MA 0)/WPP+1)*WPP align on next page boundary 394 00003400 395 BEGINNING LABEL Entry for On-Line operation 03400 EDC03016 396 STW ONLINE 03401 60045400 0 IMM 397 LD R0 ADR DATABLK initialize address for data buffer 03402 E4003017 0 398 ST R0 PFDATABLK 03403 60045800 0 IMM 399 LD R0 ADR CCBBLK initialize address for CCB block 03404 E4003018 0 400 ST R0 PFCCBBLK 03405 60045C00 0 IMM 401 LD R0 ADR CMPRBLK initialize address for CMPR block 03406 E4003019 0 402 ST R0 PFCMPRBLK 403 * \ / 03407 600400EB 0 IMM 404 LD R0 URPSETREG+REGIAD set IAR 03408 60443089 1 IMM 405 LD R1 ADR INTBLOCK interrupt vector address 03409 09040000 IMM 406 UREQ 0 call OS 0340A FA083423 0 407 JLTZ R0 BRKFAIL error 0340B E4403078 1 408 ST R1 ORIGIAD save old value 409 * \ / 0340C 600400EA 0 IMM 410 LD R0 URPSETREG+REGIMR set IMR 0340D 60430400 1 IMM 411 LD R1 INTMASK the bits we want 0340E 09040000 IMM 412 UREQ 0 call OS 0340F FA083423 0 413 JLTZ R0 BRKFAIL error 03410 E4403077 1 414 ST R1 ORIGIMR save old value 03411 FE0E343D 415 JMP BEGINNING1 share entry 416 * --- 417 418 * This is our online interrupt routine (only break enabled) 00003412 419 INTBREAK LABEL 03412 D1C03079 420 SETT BREAKFLAG say we have received a break 03413 FE0C3416 421 JNE NEWBREAK jump if this is new 03414 DC1013F9 @ 422 CALL @VPREPOUT tell him to wait a minute 03415 40003418 423 PARL WAITMSG " I heard the first time ..." 424 * \ / 00003416 425 NEWBREAK LABEL 03416 60040082 0 IMM 426 LD R0 URINTRTN return from interrupt 03417 0904307A IMM 427 UREQ ADR ONLINECA go back 428 * --- 429 03418 20492068 430 WAITMSG TEXTZ " I heard the first time, PLEASE be patient." 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 10 F 0 Main Control 431 432 * Unable to set up break processing, why?? 00003423 433 BRKFAIL LABEL 03423 DC1013F9 @ 434 CALL @VPREPOUT tell operator 03424 40003426 435 PARL NOBRKMSG "Unable to enable BREAK processing ..." 03425 FE0E48FF 436 JMP CEXIT leave the program?? 437 * --- 438 03426 20556E61 439 NOBRKMSG TEXTZ " Unable to enable BREAK processing - Call R&D." 440 00003432 441 BEGINNING2 LABEL Entry for Off-line operation 03432 EC003016 442 STZ ONLINE 03433 60C40095 3 IMM 443 LD PFPTR MONPF+(DATABLK DISPW MA 0)/FLDPAGE 03434 80803017 444 PFRD PFDATABLK get PMV for data page (for I/O operations) 03435 60C40096 3 IMM 445 LD PFPTR MONPF+(CCBBLK DISPW MA 0)/FLDPAGE 03436 80803018 446 PFRD PFCCBBLK 03437 60C40097 3 IMM 447 LD PFPTR MONPF+(CMPRBLK DISPW MA 0)/FLDPAGE 03438 80803019 448 PFRD PFCMPRBLK 03439 DC5013E3 @ 449 CALLNP @VDISPLAY say we're here 0343A 5045454B 450 ASCII 2,PEEK&POK "PEEK&POKE" 0343C 05200000 451 VFD "E " AND 03f3f0000 452 * \ / 0000343D 453 BEGINNING1 LABEL 0343D 601013E4 0 @ 454 LD R0 @VDISKCB assume the booted disk 0343E E4003031 0 455 ST R0 DISKCBP save pointer to it 0343F D140303B 456 STMW INBLOCK there is no block in yet 03440 EC003075 457 STZ MODFLAG and it is unmodified 03441 EC00303A 458 STZ FILEFLAG no file is open 03442 EC00300E 459 STZ PROMPTCNT no prompts yet 460 * STMW FIRSTLOC no scan parameters yet 03443 D1403074 461 STMW FIRSTBLOCK no disk scan parameters yet 03444 D14030BD 462 STMW CPRBLOCK no CMPR parameters yet 03445 D14030BF 463 STMW SCANACCT 464 * \ / 03446 60440050 1 IMM 465 LD R1 BUFL get buffer length 03447 6084301B 2 IMM 466 LD R2 ADR BUF and address 03448 FE580000 467 CFILL 000 fill to prevent parity errors. 468 * \ / 03449 DC5013FB @ 469 CALLNP @VGETDATE get the time zone info for DISPLAY 0344A E44030D0 1 470 ST R1 TIMEZONE keep it available 471 * \ / 0344B E500301A 4 472 ST R4 BEFOREPTR save the param pointer 0344C DC1013F9 @ 473 CALL @VPREPOUT tell the terminal who we are 0344D 41003001 474 PAR VERSION 0344E 40003003 475 PARL INVOKMES 476 * \ / 477 478 * Go execute a DISK command using any parms on our invocation line 0344F 6100301A 4 479 LD R4 BEFOREPTR restore parameter pointer 03450 FE0E4E58 480 JMP CDISK 481 * --- 482 483 * Bad format error message then to input prompt. 00003451 484 BADFORM LABEL 03451 DC1013F9 @ 485 CALL @VPREPOUT 03452 4000300A 486 PARL BADFORMM 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 11 F 0 Main Control 487 * \ / 488 489 * Main Control. Prompt for what to do. 490 * \ / 00003453 491 MC LABEL 03453 EC003079 492 STZ BREAKFLAG sez no breaks detected 03454 6090300F 2 @ 493 LD R2 @PROMPTPTR check for odd or even prompt 03455 60A43010 2 2 494 LD R2 PROMPTTAB(R2) pick up appropriate prompt message pointer 03456 DC1013F9 @ 495 CALL @VPREPOUT 03457 40168400 2 @R 496 PARL @R2 03458 D000300E 497 INC PROMPTCNT say another prompt done 03459 EDC03098 498 STW LINECNT reset line counter for more processing 0345A 60440050 1 IMM 499 LD R1 BUFL set up buffer length 0345B 6084301B 2 IMM 500 LD R2 ADR BUF ... and address 0345C DC5013F3 @ 501 CALLNP @VREADLINE get the input line 0345D 30440050 1 IMM 502 RSB R1 BUFL calculate length of line 0345E FA4A3453 1 503 JLEZ R1 MC zero length lines are ignored 0345F EC32302F 1 @ 504 STZ @BUFP(R1) place terminator at the end 03460 6104301B 4 IMM 505 LD R4 ADR BUF pointer to the buffer 03461 DC5013F8 @ 506 CALLNP @VFETCHITMH fetch the command thereon 507 * \ / 00003462 508 SSCANRTN LABEL return location from SSCAN 03462 F27C346C 1 509 JBF R1/TALPH NOTSYM jump if not a symbol 03463 6144001F 5 IMM 510 LD R5 COMMTABL-1 number of commands in the table 511 * \ / 512 00003464 513 COMMLOOP LABEL 03464 66AA347E 23 5 514 CPR2 R2 COMMTAB(R5) is this a known command? 03465 FE0234DB 515 JEQ COMMFND jump if so 03466 FB663464 5 516 JDR R5 COMMLOOP scan entire table 517 * \ / 518 519 * The symbol is not a command name. If it looks like "FBIxxx", then 520 * it might be an implicit DISPLAY command. 521 03467 688034DC 2 522 UCPR R2 RADFBIMIN 03468 FE083476 523 JLT MCERR jump if less than "FBIxxx" 03469 688034DD 2 524 UCPR R2 RADFBIMAX 0346A FE043476 525 JGT MCERR jump if greater than "FBIxxx" 0346B FE0E3474 526 JMP DODISPLAY do implicit display command 527 * --- 528 529 * The first thing on the line was a number. This is probably an 530 * implicit DISPLAY command (unless the input buffer said "D ", in 531 * which case it is an explicit DISPLAY command). 532 0000346C 533 NOTSYM LABEL 0346C F27E3476 1 534 JBF R1/TNUM MCERR jump if not a number either 0346D 6484000D 2 IMM 535 CPR R2 0D is number equal to "D"? 0346E FE0C3474 536 JNE DODISPLAY jump if not 0346F 6000301B 0 537 LD R0 BUF R0 = first 4 chars of line 03470 600A0100 0 0 CBM 538 LD R0 R0/(CH0+CH1) R0 = first two characters 03471 28042000 0 IMM 539 BSUB R0 02000 upperfy first character 03472 64044420 0 IMM 540 CPR R0 "D " see if it's a "D" command 03473 FE0249F0 541 JEQ CDISPLAY if yes, explicit DISPLAY 542 * \ / 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 12 F 0 Main Control 00003474 543 DODISPLAY LABEL implicit DISPLAY command 03474 6104301B 4 IMM 544 LD R4 ADR BUF restore pointer to operand 03475 FE0E49F0 545 JMP CDISPLAY and go to the DISPLAY processer 546 * --- 547 548 * Give "Unknown command." error then to prompt. 00003476 549 MCERR LABEL 03476 DC1013F9 @ 550 CALL @VPREPOUT 03477 40003479 551 PARL UNKC 03478 FE0E3453 552 JMP MC 553 * --- 554 03479 20556E6B 555 UNKC TEXTZ " Unknown command." 556 0000347E 557 COMMTAB LABEL 0347E 452CA330 558 PAK12 ACCOUNT 03480 479D4A80 559 PAK12 ASCAN 03482 52A9E758 560 PAK12 CKSUM 03484 52CD01A9 561 PAK12 CLOSEGAP 562 03486 52CD01A9 563 PAK12 CLOSEGAPB 03488 52F50300 564 PAK12 CMPR 0348A 53401790 565 PAK12 COMMANDS 0348C 55730000 566 PAK12 D 567 0348E 58760540 568 PAK12 DISK 03490 587627FB 569 PAK12 DISPLAY 03492 58CE6000 570 PAK12 DL 03494 59392510 571 PAK12 DNSCAN 572 03496 59ECCA80 573 PAK12 DSCAN 03498 60D0E980 574 PAK12 EXIT 0349A 64A5F780 575 PAK12 FIND 0349C 64A5FC20 576 PAK12 FINDSN 577 0349E 703D0E80 578 PAK12 HELP 034A0 8A22A580 579 PAK12 LOAD 034A2 8EC73498 580 PAK12 MERGE 034A4 96F5CA80 581 PAK12 NSCAN 582 034A6 9C9D5EB3 583 PAK12 OPENGAP 034A8 9C9D5EB3 584 PAK12 OPENGAPB 034AA AD4E0238 585 PAK12 RETURN 034AC B307A400 586 PAK12 SCAN 587 034AE B57A4A80 588 PAK12 SSCAN 034B0 B5C7E1F0 589 PAK12 SUBST 034B2 C736D167 590 PAK12 VOLUME 034B4 CDC38BD8 591 PAK12 WRITE 592 034B6 00000000 593 PAK12 034B8 00000000 594 PAK12 034BA 00000000 595 PAK12 034BC 00000000 596 PAK12 597 * put enough PAK12 here to keep the Commands 598 * command happy. If enough commands are added, another 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 13 F 0 Main Control 599 * line must be printed out. 600 00000020 ABS 601 COMMTABL EQU DISP2 COMMTAB 602 000034BE 603 COMMJMP LABEL 034BE 00004CD3 604 VFD ADR CACCOUNT 034BF 00004F9B 605 VFD ADR CASCAN 034C0 00003B39 606 VFD ADR CCKSUM 034C1 00004E09 607 VFD ADR CCLOSEGAP 608 034C2 00004E07 609 VFD ADR CCLOSEGAPB 034C3 00003BDE 610 VFD ADR CCMPR 034C4 00003C2B 611 VFD ADR CCOMMAND 034C5 000049F0 612 VFD ADR CDISPLAY 613 034C6 00004E58 614 VFD ADR CDISK 034C7 000049F0 615 VFD ADR CDISPLAY 034C8 00004AB2 616 VFD ADR CDISPLONG 034C9 00004CE2 617 VFD ADR CDNSCAN 618 034CA 00004CE4 619 VFD ADR CDSCAN 034CB 000048FF 620 VFD ADR CEXIT 034CC 00004939 621 VFD ADR CFIND 034CD 00004908 622 VFD ADR CFINDSN 623 034CE 00003C5F 624 VFD ADR CHELP 034CF 0000493C 625 VFD ADR CLOAD 034D0 000049C5 626 VFD ADR CMERGE 034D1 00004C76 627 VFD ADR CNSCAN 628 034D2 00004DDB 629 VFD ADR COPENGAP 034D3 00004DDE 630 VFD ADR COPENGAPB 034D4 00004E31 631 VFD ADR CRETURN 034D5 00004C78 632 VFD ADR CSCAN 633 034D6 00004D74 634 VFD ADR CSSCAN 034D7 00005070 635 VFD ADR CSUB 034D8 00004F33 636 VFD ADR CVOLUME 034D9 00004E36 637 VFD ADR CWRITE 638 034DA 00003476 639 VFD ADR MCERR 640 641 * Command is known. Jump to the processing routine. 000034DB 642 COMMFND LABEL 034DB 5CAA34BE 5 643 LDPC COMMJMP(R5) 644 * --- 645 034DC 638F4E00 646 RADFBIMIN PAK6 FBI minimum value for "FBIxxx" 034DD 63903B2D 647 RADFBIMAX PAK6 FBI!!! maximum value for "FBIxxx" 648 +BADFORM 00003451 F 0 387 484= +BADFORMM 0000300A F 0 486a +BEFOREPTR 0000301A F 0 472s 479 +BEGINNING 00003400 F 0 385 395= BEGINNING1 0000343D F 0 415j 453= +BEGINNING2 00003432 F 0 384 441= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 14 F 0 Main Control +BREAKFLAG 00003079 F 0 420s 492s BRKFAIL 00003423 F 0 407j 413j 433= +BUF 0000301B F 0 466a 500a 505a 537 544a +BUFL 00000050 F 0 465 499 502 +BUFP 0000302F F 0 504s +CACCOUNT UUUUUUUU F 0 604a +CASCAN UUUUUUUU F 0 605a +CCBBLK UUUUUUUU F 0 399a 445 +CCKSUM UUUUUUUU F 0 606a +CCLOSEGAP UUUUUUUU F 0 607a +CCLOSEGAPB UUUUUUUU F 0 609a +CCMPR UUUUUUUU F 0 610a +CCOMMAND UUUUUUUU F 0 611a +CDISK UUUUUUUU F 0 480j 614a +CDISPLAY UUUUUUUU F 0 541j 545j 612a 615a +CDISPLONG UUUUUUUU F 0 616a +CDNSCAN UUUUUUUU F 0 617a +CDSCAN UUUUUUUU F 0 619a +CEXIT UUUUUUUU F 0 436j 620a +CFIND UUUUUUUU F 0 621a +CFINDSN UUUUUUUU F 0 622a +CH0 00000080 F 0 538 +CH1 00001080 F 0 538 +CHELP UUUUUUUU F 0 624a +CLOAD UUUUUUUU F 0 625a +CMERGE UUUUUUUU F 0 626a +CMPRBLK UUUUUUUU F 0 401a 447 +CNSCAN UUUUUUUU F 0 627a COMMFND 000034DB F 0 515j 642= COMMJMP 000034BE F 0 603= 643 COMMLOOP 00003464 F 0 513= 516j +COMMTAB 0000347E F 0 388 514 557= 601e +COMMTABL 00000020 F 0 389 510 601= +COPENGAP UUUUUUUU F 0 629a +COPENGAPB UUUUUUUU F 0 630a +CPRBLOCK 000030BD F 0 462s +CRETURN UUUUUUUU F 0 631a +CSCAN UUUUUUUU F 0 632a +CSSCAN UUUUUUUU F 0 634a +CSUB UUUUUUUU F 0 635a +CVOLUME UUUUUUUU F 0 636a +CWRITE UUUUUUUU F 0 637a +DATABLK UUUUUUUU F 0 397a 443 +DISKCBP 00003031 F 0 455s DODISPLAY 00003474 F 0 526j 536j 543= +FILEFLAG 0000303A F 0 458s +FIRSTBLOCK 00003074 F 0 461s +FLDPAGE 00001E70 F 0 443 445 447 +INBLOCK 0000303B F 0 456s +INTBLOCK 00003089 F 0 405a +INTBREAK 00003412 F 0 391 419= +INTMASK 82000000 F 0 411 +INVOKMES 00003003 F 0 475a +LINECNT 00003098 F 0 498s +MC 00003453 F 0 386 491= 503j 552j MCERR 00003476 F 0 523j 525j 534j 549= 639a 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 15 F 0 Main Control +MODFLAG 00003075 F 0 457s +MONPF 00000080 F 0 443 445 447 NEWBREAK 00003416 F 0 421j 425= NOBRKMSG 00003426 F 0 435a 439= NOTSYM 0000346C F 0 509j 533= +ONLINE 00003016 F 0 396s 442s +ONLINECA 0000307A F 0 427a +ORIGIAD 00003078 F 0 408s +ORIGIMR 00003077 F 0 414s +PFCCBBLK 00003018 F 0 400s 446s +PFCMPRBLK 00003019 F 0 402s 448s +PFDATABLK 00003017 F 0 398s 444s +PFPTR 0012C000 F 0 443 445 447 +PROMPTCNT 0000300E F 0 459s 497s +PROMPTPTR 0000300F F 0 493 +PROMPTTAB 00003010 F 0 494 RADFBIMAX 000034DD F 0 524 647= RADFBIMIN 000034DC F 0 522 646= +REGIAD 0000000B F 0 404 +REGIMR 0000000A F 0 410 +SCANACCT 000030BF F 0 463s +SSCANRTN 00003462 F 0 390 508= +TALPH 00003C10 F 0 509j +TIMEZONE 000030D0 F 0 470s +TNUM 00003E10 F 0 534j UNKC 00003479 F 0 551a 555= +URINTRTN 00000082 F 0 426 +URPSETREG 000000E0 F 0 404 410 +VDISKCB 000013E4 F 0 454 +VDISPLAY 000013E3 F 0 449 +VERSION 00003001 F 0 474a +VFETCHITMH 000013F8 F 0 506 +VGETDATE 000013FB F 0 469 +VPREPOUT 000013F9 F 0 422 434 473 485 495 550 +VREADLINE 000013F3 F 0 501 WAITMSG 00003418 F 0 423a 430= +WPP 00000400 F 0 393a 393a 649 END MAINCONTRL MAINCONTRL 650 INPUT PEEK&POKEUTL assorted utility routines 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 16 (PEEK&POKEUTL) F 13 Utility routine: MODCHECK 3 4 ********************************************************************************** 5 * * 6 * MODCHECK. Routine to check and verify modification flag. * 7 * Call this routine when you are about to do something that will * 8 * overwrite the current block in core. If the current block has * 9 * been modified, this routine will ask the operator if he wants * 10 * that block written, and write it if he does. * 11 * Call: * 12 * CALLNP MODCHECK * 13 * * 14 * Gets R0 thru R3. * 15 * * 16 ********************************************************************************** 17 18 BLOCK MODCHECK routine 19 ENTRY MODCHECK 20 21 BEGFRAME 00178801 6 BASE 22 MODCKR4 BSS 2 save for R4 and R5 23 ENDFRAME 24 034DE DD5F8003 6 STAK 25 MODCHECK ENTRNP PUSH 034DF E7178801 456 BASE 26 ST2 R4 MODCKR4 save these registers 034E0 5C003075 27 CMZ MODFLAG is the block modified? 034E1 FE0234FB 28 JEQ RETURN if not, destroy the buffer 034E2 5C00303A 29 CMZ FILEFLAG are we patching a file? 034E3 FE0C34F4 30 JNE FORCEFILE just write the page if so 034E4 6000303B 0 31 LD R0 INBLOCK do we have any block in? 034E5 FA0834FB 0 32 JLTZ R0 RETURN jump if no block number 33 * \ / 000034E6 34 ASK LABEL 034E6 DC1013F9 @ 35 CALL @VPREPOUT ask if we should write 034E7 4100303B 36 PAR INBLOCK 034E8 40003500 37 PARL OKMESS 034E9 60803103 2 38 LD R2 RSPBUFP get buffer address and 034EA 60440008 1 IMM 39 LD R1 RSPBUFL length for input 034EB DC5013F3 @ 40 CALLNP @VREADLINE get his response 034EC 30440008 1 IMM 41 RSB R1 RSPBUFL calculate read length 034ED FA4A34E6 1 42 JLEZ R1 ASK re-prompt if null response 034EE 60103103 0 @ 43 LD R0 @RSPBUFP point to buffer 034EF 28040020 0 IMM 44 BSUB R0 020 convert to upper case 034F0 6404004E 0 IMM 45 CPR R0 "N" see if negative 034F1 FE0234FA 46 JEQ CLEARMODF if so, forget modified and don't write 034F2 64040059 0 IMM 47 CPR R0 "Y" see if affirmative 034F3 FE0C34E6 48 JNE ASK if not, re-ask 49 * \ / 50 51 * The page is supposed to be written out 52 * \ / 000034F4 53 FORCEFILE LABEL 034F4 61003031 4 54 LD R4 DISKCBP get disk control block pointer 034F5 DC1013E1 @ 55 CALL @VWRITE write out the disk block 034F6 4140303B 56 PARV INBLOCK 034F7 41403017 57 PARV PFDATABLK 034F8 410030D2 58 PAR FBIBUFF 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 17 (PEEK&POKEUTL) F 13 Utility routine: MODCHECK 034F9 400034FD 59 PARL FORCEERR 60 * \ / 61 000034FA 62 CLEARMODF LABEL 034FA EC003075 63 STZ MODFLAG the thing is no longer modified 64 * \ / 65 000034FB 66 RETURN LABEL 034FB 63178801 456 BASE 67 LD2 R4 MODCKR4 restore these registers 034FC 5D1F8003 6 STAK 68 LEAVE POP 69 * --- 70 71 * The write gave an error. 000034FD 72 FORCEERR LABEL 034FD 6040303B 1 73 LD R1 INBLOCK load the block number 034FE DC40350E 74 CALLNP DISKERROUT tell him why it failed 034FF FE0E34FA 75 JMP CLEARMODF clear modify flag 76 * --- 77 03500 2A426C6F 78 OKMESS TEXTZ "*Block \H1,6\ modified. Do you wish it written (Y|N)? " 79 ASK 000034E6 F 13 34= 42j 48j CLEARMODF 000034FA F 13 46j 62= 75j +DISKCBP 00003031 F 13 54 +DISKERROUT UUUUUUUU F 13 74 +FBIBUFF 000030D2 F 13 58a +FILEFLAG 0000303A F 13 29 FORCEERR 000034FD F 13 59a 72= FORCEFILE 000034F4 F 13 30j 53= +INBLOCK 0000303B F 13 31 36a 56 73 +MODCHECK 000034DE F 13 19 25= MODCKR4 00178801 F 13 22= 26s 67 +MODFLAG 00003075 F 13 27 63s OKMESS 00003500 F 13 37a 78= +PFDATABLK 00003017 F 13 57 RETURN 000034FB F 13 28j 32j 66= +RSPBUFL 00000008 F 13 39 41 +RSPBUFP 00003103 F 13 38 43 +VPREPOUT 000013F9 F 13 35 +VREADLINE 000013F3 F 13 40 +VWRITE 000013E1 F 13 55 80 END MODCHECK routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 18 (PEEK&POKEUTL) F 13 Utility routine: DISKERROUT 83 84 ********************************************************************************** 85 * * 86 * DISKERROUT. This routine outputs the disk error text * 87 * that corresponds to the disk error code passed in R0. * 88 * Call: * 89 * LD R0 * 90 * LD R1 * 91 * CALLNP DISKERROUT * 92 * * 93 * Gets R0 thru R5. * 94 * * 95 ********************************************************************************** 96 97 BLOCK DISKERROUT routine 98 ENTRY DISKERROUT 99 100 BEGFRAME 00178801 6 BASE 101 DSKBLCK BSS 1 disk block number 102 ENDFRAME 103 0350E DD5F8002 6 STAK 104 DISKERROUT ENTRNP PUSH 0350F E4578801 1 6 BASE 105 ST R1 SP,DSKBLCK save away disk block number 106 * \ / 03510 DC0035BB 107 CALL FINDTEXTZ find right error message 03511 41520000 0 REG 108 PARV R0 03512 40003519 109 PARL MSGTAB 03513 60520000 1 0 REG 110 LD R1 R0 R1 -> the message 111 * \ / 03514 60938000 2 6 REG 112 LD R2 SP copy stack pointer 03515 DC1013F9 @ 113 CALL @VPREPOUT write the message 03516 41168801 2 BASE 114 PAR R2,DSKBLCK pass block number being attempted 03517 40164400 1 @R 115 PARL @R1 and pointer to message 03518 5D1F8002 6 STAK 116 LEAVE POP 117 * --- 118 00003519 119 MSGTAB LABEL 03519 20457272 120 TEXTZ " Error code zero. Block = \H1,6\." 03522 20446973 121 TEXTZ " Disk data read error. Block = \H1,6\." 0352C 20446973 122 TEXTZ " Disk block FBI error. Block = \H1,6\." 03536 20446973 123 TEXTZ " Disk/PPU channel error. Block = \H1,6\." 03541 20446973 124 TEXTZ " Disk seek error. Block = \H1,6\." 0354A 20446973 125 TEXTZ " Disk not ready. Block = \H1,6\." 03553 20446973 126 TEXTZ " Disk write protected. Block = \H1,6\." 0355D 204D656D 127 TEXTZ " Memory parity error (PPU). Block = \H1,6\." 03569 00000000 128 VFD 0 129 +DISKERROUT 0000350E F 13 98 104= DSKBLCK 00178801 F 13 101= 105s 114a +FINDTEXTZ UUUUUUUU F 13 107 MSGTAB 00003519 F 13 109a 119= +VPREPOUT 000013F9 F 13 113 130 END DISKERROUT routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 19 (PEEK&POKEUTL) F 13 Utility routine: CHECKFILE 133 134 ********************************************************************************** 135 * * 136 * CHECKFILE. Routine called at the beginning of commands * 137 * that cause us to leave file patching mode. This causes the * 138 * current block to be written out if necessary and the file flag * 139 * to be cleared. * 140 * Call: * 141 * CALLNP CHECKFILE * 142 * * 143 * Gets R0 thru R3. * 144 * * 145 ********************************************************************************** 146 147 BLOCK CHECKFILE routine 148 ENTRY CHECKFILE 149 150 BEGFRAME 151 ENDFRAME 152 0356A DD5F8001 6 STAK 153 CHECKFILE ENTRNP PUSH 0356B 5C00303A 154 CMZ FILEFLAG are we patching a file? 0356C FE02356F 155 JEQ CHKFILXIT exit if not 0356D DC4034DE 156 CALLNP MODCHECK write out the modified block 0356E EC00303A 157 STZ FILEFLAG no more file patching 158 * \ / 159 0000356F 160 CHKFILXIT LABEL 0356F 5D1F8001 6 STAK 161 LEAVE POP exit to caller 162 * --- 163 +CHECKFILE 0000356A F 13 148 153= CHKFILXIT 0000356F F 13 155j 160= +FILEFLAG 0000303A F 13 154 157s +MODCHECK 000034DE F 13 156 164 END CHECKFILE routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 20 (PEEK&POKEUTL) F 13 Utility routine: SUBCHECK 167 168 ********************************************************************************** 169 * * 170 * SUBCHECK. This routine determines whether a block is * 171 * substituted, and if so, whether the user wants the real block * 172 * instead of the substitute. * 173 * Call: * 174 * LD R4 ptr to disk control block * 175 * CALL SUBCHECK * 176 * PARVL block number * 177 * On return, R0 = 0 for normal processing (use subsitution list), or * 178 * R0 = 1 for special processing (ignore substitution list). * 179 * * 180 * Eats R0:R2. * 181 * * 182 ********************************************************************************** 183 184 BLOCK SUBCHECK routine 185 ENTRY SUBCHECK 186 187 BEGFRAME 188 ENDFRAME 189 03570 DD1F8001 6 STAK 190 SUBCHECK ENTR PUSH 03571 C0520000 0 REG 191 STPVL R0 R0 = block number 192 * \ / 03572 60570804 1 4 BASE 193 LD R1 R4,DCBSUBLIST R1 -> substitution list 03573 3C164801 0 1 BASE 194 LSRCH R0 R1,1 is block substituted? 03574 FE0C358D 195 JNE NORMAL if not, normal processing 196 * \ / 03575 DC1013F9 @ 197 CALL @VPREPOUT tell user about substitution 03576 41164801 1 BASE 198 PAR R1,1 1 - requested block number 03577 41164802 1 BASE 199 PAR R1,2 2 - substitute block number 03578 4000358F 200 PARL SUBSMSG1 201 * \ / 202 03579 5C090216 4 ZBM 203 CMZ R4,DCBMAIMNT is volume maintenance mounted? 0357A FE02357E 204 JEQ ASKAGAIN no, we can give him a choice 0357B DC1013F9 @ 205 CALL @VPREPOUT yes, he will have to load the substitute if he wants it 0357C 400035A8 206 PARL NOSUBMSG 0357D FE0E358D 207 JMP NORMAL 208 * --- 209 0000357E 210 ASKAGAIN LABEL 0357E DC1013F9 @ 211 CALL @VPREPOUT ask user which he wants 0357F 40003599 212 PARL SUBSMSG2 03580 60803103 2 213 LD R2 RSPBUFP pick up buffer address and 03581 60440008 1 IMM 214 LD R1 RSPBUFL length for answer 215 * \ / 03582 DC5013F3 @ 216 CALLNP @VREADLINE get user's response 03583 30440008 1 IMM 217 RSB R1 RSPBUFL R1 = number of characters typed 03584 FA4A357E 1 218 JLEZ R1 ASKAGAIN jump if nothing 03585 60103103 0 @ 219 LD R0 @RSPBUFP get first character of response 03586 28040020 0 IMM 220 BSUB R0 020 make upper case 03587 64040053 0 IMM 221 CPR R0 "S" does he want the substitute? 03588 FE02358D 222 JEQ NORMAL if yes, normal processing 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 21 (PEEK&POKEUTL) F 13 Utility routine: SUBCHECK 03589 64040052 0 IMM 223 CPR R0 "R" does he want the real one? 0358A FE0C357E 224 JNE ASKAGAIN if not, he gave us garbage 225 * \ / 0358B 60040001 0 IMM 226 LD R0 1 special processing flag 0358C FE0E358E 227 JMP RETURN 228 * --- 229 0000358D 230 NORMAL LABEL 0358D 60040000 0 IMM 231 LD R0 0 normal processing flag 232 * \ / 233 0000358E 234 RETURN LABEL 0358E 5D1F8001 6 STAK 235 LEAVE POP return to caller 236 * --- 237 0358F 20426C6F 238 SUBSMSG1 TEXTZ " Block \H1,6\ is substituted to \H2,6\." 03599 2A456E74 239 SUBSMSG2 TEXTZ "*Enter 'R' for real block, or 'S' for substitute block: " 035A8 20566F6C 240 NOSUBMSG TEXTZ " Volume is maintenance mounted, substituted block not available indirectly." 241 ASKAGAIN 0000357E F 13 204j 210= 218j 224j +DCBMAIMNT 00080216 F 13 203 +DCBSUBLIST 00160804 F 13 193 NORMAL 0000358D F 13 195j 207j 222j 230= NOSUBMSG 000035A8 F 13 206a 240= RETURN 0000358E F 13 227j 234= +RSPBUFL 00000008 F 13 214 217 +RSPBUFP 00003103 F 13 213 219 +SUBCHECK 00003570 F 13 185 190= SUBSMSG1 0000358F F 13 200a 238= SUBSMSG2 00003599 F 13 212a 239= +VPREPOUT 000013F9 F 13 197 205 211 +VREADLINE 000013F3 F 13 216 242 END SUBCHECK routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 22 (PEEK&POKEUTL) F 13 Utility routine: FINDTEXTZ 245 246 ********************************************************************************** 247 * * 248 * FINDTEXTZ - Find a String by Index * 249 * * 250 * This routine will search an array of zero-terminated * 251 * (TEXTZ) strings for a particular one. * 252 * Call: * 253 * CALL FINDTEXTZ * 254 * PARV * 255 * PARL * 256 * ST R0 address of string * 257 * Where: * 258 * TABLE TEXTZ " string 0 " * 259 * TEXTZ " string 1 " * 260 * TEXTZ " string 2 " * 261 * ... * 262 * TEXTZ " string n " * 263 * VFD 0 * 264 * * 265 * Value returned in R0, kills R1-R2. * 266 * * 267 ********************************************************************************** 268 269 BLOCK FINDTEXTZ routine 270 ENTRY FINDTEXTZ 271 272 BEGFRAME 00178801 6 BASE 273 INDEX BSS 1 274 ENDFRAME 275 035BB DD1F8002 6 STAK 276 FINDTEXTZ ENTR PUSH 035BC C1578801 6 BASE 277 STPV SP,INDEX save ordinal 035BD C0120000 0 REG 278 STPL R0 R0 -> string zero 279 * \ / 280 000035BE 281 LOOP LABEL 035BE 5C160800 0 BASE 282 CMZ R0,0 beyond end of table? 035BF FE0235C9 283 JEQ GIVEERR jump if yes 035C0 5C178801 6 BASE 284 CMZ SP,INDEX check for done 035C1 FE0835C9 285 JLT GIVEERR jump if index too small 035C2 FE0235CA 286 JEQ RETURN jump if found right string 035C3 604400FF 1 IMM 287 LD R1 0FF reasonable max length for string 035C4 60840000 2 IMM 288 LD R2 0 look for zero byte at end 035C5 FE560000 289 CSRCH R0 = cach addr of zero byte 035C6 38160801 0 0 BASE 290 LEA R0 R0,1 R0 = word addr of next string 035C7 D0578801 6 BASE 291 DEC SP,INDEX count down this find 035C8 FE0E35BE 292 JMP LOOP try next string 293 * --- 294 000035C9 295 GIVEERR LABEL index out of range 035C9 600435CB 0 IMM 296 LD R0 ADR ERRSTRING return pointer to error string 297 * \ / 298 000035CA 299 RETURN LABEL R0 = addr of string 035CA 5D1F8002 6 STAK 300 LEAVE POP return to caller 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 23 (PEEK&POKEUTL) F 13 Utility routine: FINDTEXTZ 301 * --- 302 035CB 20457272 303 ERRSTRING TEXTZ " Error code out of range." 304 ERRSTRING 000035CB F 13 296a 303= +FINDTEXTZ 000035BB F 13 270 276= GIVEERR 000035C9 F 13 283j 285j 295= INDEX 00178801 F 13 273= 277s 284 291s LOOP 000035BE F 13 281= 292j RETURN 000035CA F 13 286j 299= 305 END FINDTEXTZ routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 24 (PEEK&POKEUTL) F 13 Utility routine: OURSRCHMSG 308 309 ********************************************************************************** 310 * * 311 * OURSRCHMSG - Tell About SRCHDIR Failure * 312 * * 313 * This routine will write a message telling why the * 314 * directory search routine failed to find a file. * 315 * Call: * 316 * R0 = error code from SRCHDIR * 317 * FILENAME = equip block with the file name * 318 * CALLNP OUTSRCHMSG * 319 * * 320 * Eats R0:R2. * 321 * * 322 ********************************************************************************** 323 324 BLOCK OUTSRCHMSG routine 325 ENTRY OUTSRCHMSG 326 327 BEGFRAME 328 ENDFRAME 329 035D2 DD5F8001 6 STAK 330 OUTSRCHMSG ENTRNP PUSH 035D3 DC0035BB 331 CALL FINDTEXTZ find the right message 035D4 41520000 0 REG 332 PARV R0 message code 035D5 400035DB 333 PARL DIRMSGTAB 035D6 60520000 1 0 REG 334 LD R1 R0 R1 -> error message 335 * \ / 035D7 DC1013F9 @ 336 CALL @VPREPOUT write it 035D8 4100303C 337 PAR FILENAME name of file 035D9 40164400 1 @R 338 PARL @R1 message pointer 035DA 5D1F8001 6 STAK 339 LEAVE POP return 340 * --- 341 000035DB 342 DIRMSGTAB LABEL directory searcher error codes 035DB 20457272 343 TEXTZ " Error code zero." 035E0 20446973 344 TEXTZ " Disk error: volume label." 035E7 20446973 345 TEXTZ " Disk error: security block." 035EF 20446973 346 TEXTZ " Disk error: IDX." 035F4 20446973 347 TEXTZ " Disk error: directory." 035FA 20416363 348 TEXTZ " Account \A1\ not found." 03601 2046696C 349 TEXTZ " File \F1\ not found." 03607 00000000 350 VFD 0 351 DIRMSGTAB 000035DB F 13 333a 342= +FILENAME 0000303C F 13 337a +FINDTEXTZ 000035BB F 13 331 +OUTSRCHMSG 000035D2 F 13 325 330= +VPREPOUT 000013F9 F 13 336 352 END OURSRCHMSG routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 25 (PEEK&POKEUTL) F 13 Utility routine: PRINTLINE 355 356 ********************************************************************************** 357 * * 358 * PRINTLINE * 359 * * 360 * This routine prints the checksums for a group of one to * 361 * three blocks per line. The block number followed by the * 362 * checksum is displayed. The block numbers are in a global * 363 * array named BLOCKS and their corresponding checksums are in * 364 * the array named RESULTS. An index into the array is passed to * 365 * indicate where the last good entry was stashed, both arrays * 366 * are filled from high address to low. * 367 * Call: * 368 * CALL PRINTLINE * 369 * PARVL CKSUMPERLN - * 370 * * 371 * Registers Used: R0:R2. * 372 * Stack Required: 1. * 373 * * 374 ********************************************************************************** 375 376 BLOCK PRINTLINE routine 377 ENTRY PRINTLINE 378 379 BEGFRAME 380 ENDFRAME 381 03608 DD1F8001 6 STAK 382 PRINTLINE ENTR PUSH 03609 C0520000 0 REG 383 STPVL R0 count of good entries 0360A 50040004 0 IMM 384 MIN R0 MAXPRTTAB - 1 don't let things get out of hand 0360B 5CA03630 0 385 LDPC PRINTTAB(R0) go to appropriate routine 386 * --- 387 0000360C 388 PRNT1ENT LABEL 0360C DC40397A 389 CALLNP MORECHK check for full screen 0360D DC1013F9 @ 390 CALL @VPREPOUT offline output writer 0360E 41003073 391 PAR BLOCKS(3) first block number 0360F 4100306F 392 PAR RESULTS(3) first checksum 03610 40003635 393 PARL PRNTMSG1 line prototype 03611 FE0E362F 394 JMP PRNTEXIT leave this routine 395 * --- 396 00003612 397 PRNT2ENT LABEL 03612 DC40397A 398 CALLNP MORECHK check for full screen 03613 DC1013F9 @ 399 CALL @VPREPOUT offline output writer 03614 41003073 400 PAR BLOCKS(3) first block number 03615 4100306F 401 PAR RESULTS(3) first checksum 03616 41003072 402 PAR BLOCKS(2) second block number 03617 4100306E 403 PAR RESULTS(2) second checksum 03618 40003639 404 PARL PRNTMSG2 line prototype 03619 FE0E362F 405 JMP PRNTEXIT leave this routine 406 * --- 407 0000361A 408 PRNT3ENT LABEL 0361A DC40397A 409 CALLNP MORECHK check for full screen 0361B DC1013F9 @ 410 CALL @VPREPOUT offline output writer 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 26 (PEEK&POKEUTL) F 13 Utility routine: PRINTLINE 0361C 41003073 411 PAR BLOCKS(3) first block number 0361D 4100306F 412 PAR RESULTS(3) first checksum 0361E 41003072 413 PAR BLOCKS(2) second block number 0361F 4100306E 414 PAR RESULTS(2) second checksum 03620 41003071 415 PAR BLOCKS(1) third block number 03621 4100306D 416 PAR RESULTS(1) third checksum 03622 40003640 417 PARL PRNTMSG3 line prototype 03623 FE0E362F 418 JMP PRNTEXIT leave this routine 419 * --- 420 00003624 421 PRNT4ENT LABEL 03624 DC40397A 422 CALLNP MORECHK check for full screen 03625 DC1013F9 @ 423 CALL @VPREPOUT offline output writer 03626 41003073 424 PAR BLOCKS(3) first block number 03627 4100306F 425 PAR RESULTS(3) first checksum 03628 41003072 426 PAR BLOCKS(2) second block number 03629 4100306E 427 PAR RESULTS(2) second checksum 0362A 41003071 428 PAR BLOCKS(1) third block number 0362B 4100306D 429 PAR RESULTS(1) third checksum 0362C 41003070 430 PAR BLOCKS(0) forth block number 0362D 4100306C 431 PAR RESULTS(0) forth checksum 0362E 4000364B 432 PARL PRNTMSG4 line prototype 433 * \ / 0000362F 434 PRNTEXIT LABEL 0362F 5D1F8001 6 STAK 435 LEAVE POP exit this mess 436 * --- 437 00003630 438 PRINTTAB LABEL 03630 00003624 439 VFD ADR (PRNT4ENT) print four entries 03631 0000361A 440 VFD ADR (PRNT3ENT) print three entries 03632 00003612 441 VFD ADR (PRNT2ENT) print two entries 03633 0000360C 442 VFD ADR (PRNT1ENT) print just one entry 03634 0000362F 443 VFD ADR PRNTEXIT print no entries 00000005 ABS 444 MAXPRTTAB EQU DISPW (PRINTTAB) 445 03635 205C4831 446 PRNTMSG1 TEXTZ " \H1,6\:\H2\" 03639 205C4831 447 PRNTMSG2 TEXTZ " \H1,6\:\H2\ \H3,6\:\H4\" 03640 205C4831 448 PRNTMSG3 TEXTZ " \H1,6\:\H2\ \H3,6\:\H4\ \H5,6\:\H6\" 0364B 205C4831 449 PRNTMSG4 TEXTZ " \H1,6\:\H2\ \H3,6\:\H4\ \H5,6\:\H6\ \H7,6\:\H8\" 450 451 +BLOCKS 00003070 F 13 391a 400a 402a 411a 413a 415a 424a 426a 428a 430a MAXPRTTAB 00000005 F 13 384 444= +MORECHK UUUUUUUU F 13 389 398 409 422 +PRINTLINE 00003608 F 13 377 382= PRINTTAB 00003630 F 13 385 438= 444e PRNT1ENT 0000360C F 13 388= 442a PRNT2ENT 00003612 F 13 397= 441a PRNT3ENT 0000361A F 13 408= 440a PRNT4ENT 00003624 F 13 421= 439a PRNTEXIT 0000362F F 13 394j 405j 418j 434= 443a PRNTMSG1 00003635 F 13 393a 446= PRNTMSG2 00003639 F 13 404a 447= PRNTMSG3 00003640 F 13 417a 448= PRNTMSG4 0000364B F 13 432a 449= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 27 (PEEK&POKEUTL) F 13 Utility routine: PRINTLINE +RESULTS 0000306C F 13 392a 401a 403a 412a 414a 416a 425a 427a 429a 431a +VPREPOUT 000013F9 F 13 390 399 410 423 452 END PRINTLINE subroutine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 28 (PEEK&POKEUTL) F 13 Utility routine: FINDFIL 455 456 ********************************************************************************** 457 * * 458 * FINDFIL. * 459 * This routine will search a directory for the file * 460 * requested and print out the information associated with it. * 461 * If the format of the file name found was bad, we give * 462 * a no-skip return. Returns with R3 => FDE or zero if none * 463 * found. * 464 * Call: * 465 * CALLNP FINDFIL * 466 * JMP BADFORM bad format for filename * 467 ** \ / * 468 * * 469 * FINDSN enters this routine at GOTFILE * 470 * Call: * 471 * CALLNP GOTFILE * 472 * JMP BADFORM bad format for filename * 473 ** \ / * 474 * * 475 * Eats R3:R5 * 476 * * 477 ********************************************************************************** 478 479 BLOCK FINDFIL/GOTFILE routines 480 ENTRY FINDFIL 481 ENTRY GOTFILE 482 483 BEGFRAME 484 ENDFRAME 485 03659 DD5F8001 6 STAK 486 FINDFIL ENTRNP PUSH 0365A 6144303C 5 IMM 487 LD R5 ADR FILENAME where to parse it into 0365B 60C40000 3 IMM 488 LD R3 0 default extension 0365C DC5013F6 @ 489 CALLNP @VFETCHFNM parse the file name 0365D FA083686 0 490 JLTZ R0 EXITIT jump if garbage given 491 * \ / 0365E E5003076 4 492 ST R4 NEXTPOS save for SSCAN 0365F 61443041 5 IMM 493 LD R5 ADR FILENAME(5) 03660 61003031 4 494 LD R4 DISKCBP current disk control block pointer 03661 DC5013E2 @ 495 CALLNP @VSRCHDIR search directory for the file 496 * \ / 03662 61124000 4 1 REG 497 LD R4 R1 R4 -> results block 03663 FAF23667 3 498 JNZA R3 OVERENTR jump if we found the file 499 * R0 = error number 03664 DC4035D2 500 CALLNP OUTSRCHMSG else tell why we didn't 03665 FE0E3667 501 JMP OVERENTR do not execute ENTRNP statement 502 * --- 503 03666 DD5F8001 6 STAK 504 GOTFILE ENTRNP PUSH entry point for FINDSN command 505 * \ / 00003667 506 OVERENTR LABEL 03667 5C170800 4 BASE 507 CMZ R4,SRCHSECBLK did we find the security block? 03668 FE083685 508 JLT DONTSAY jump if not 03669 DC1013F9 @ 509 CALL @VPREPOUT 0366A 41170800 4 BASE 510 PAR R4,SRCHSECBLK security block number 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 29 (PEEK&POKEUTL) F 13 Utility routine: FINDFIL 0366B 41170801 4 BASE 511 PAR R4,SRCHIDXBKT IDX bucket number 0366C 40003693 512 PARL SECBLKMSG 513 * \ / 0366D 5C170802 4 BASE 514 CMZ R4,SRCHIDXBLK did we find the IDX block? 0366E FE083685 515 JLT DONTSAY jump if not 0366F DC1013F9 @ 516 CALL @VPREPOUT 03670 41170802 4 BASE 517 PAR R4,SRCHIDXBLK IDX block number 03671 41170803 4 BASE 518 PAR R4,SRCHIDXOFF offset to entry in IDX block 03672 400036A1 519 PARL IDXBLKMSG 520 * \ / 03673 5C170804 4 BASE 521 CMZ R4,SRCHUD1BLK did we find the UDIR1 block? 03674 FE083685 522 JLT DONTSAY jump if not 03675 DC1013F9 @ 523 CALL @VPREPOUT 03676 41170804 4 BASE 524 PAR R4,SRCHUD1BLK UDIR1 block number 03677 41170805 4 BASE 525 PAR R4,SRCHUD1OFF offset to entry in UDIR1 block 03678 400036AD 526 PARL UD1BLKMSG 527 * \ / 03679 5C170806 4 BASE 528 CMZ R4,SRCHUD2BLK did we find the UDIR2 block? 0367A FE08367F 529 JLT DONTSAY1 jump if not 0367B DC1013F9 @ 530 CALL @VPREPOUT 0367C 41170806 4 BASE 531 PAR R4,SRCHUD2BLK UDIR2 block number 0367D 41170807 4 BASE 532 PAR R4,SRCHUD2OFF offset to entry in UDIR2 block 0367E 400036B9 533 PARL UD2BLKMSG 534 * \ / 0000367F 535 DONTSAY1 LABEL 0367F FAF03685 3 536 JZA R3 DONTSAY jump if no FDE entry 03680 5C08D185 3 ZBM 537 CMZ R3,FDDA is there anything here? 03681 FE023687 538 JEQ GIVEMTMESS if not then give other message 03682 DC1013F9 @ 539 CALL @VPREPOUT 03683 4108D185 3 ZBM 540 PAR R3,FDDA block number of file 03684 400036C5 541 PARL FILEBLKMSG 542 * \ / 00003685 543 DONTSAY LABEL 03685 19C40001 7 IMM 544 ADD R7 1 increment the return address 545 * \ / 00003686 546 EXITIT LABEL 03686 5D1F8001 6 STAK 547 LEAVE POP return to caller 548 * --- 549 00003687 550 GIVEMTMESS LABEL 03687 DC1013F9 @ 551 CALL @VPREPOUT say no blocks here 03688 4000368A 552 PARL MTMESS 03689 FE0E3685 553 JMP DONTSAY 554 * --- 555 0368A 204E6F20 556 MTMESS TEXTZ " No blocks associated with file." 03693 20536563 557 SECBLKMSG TEXTZ " Security block at \H1,6\, IDX bucket number \H2,3\." 036A1 20494458 558 IDXBLKMSG TEXTZ " IDX block at \H1,6\, entry at offset \H2,3\." 036AD 20554449 559 UD1BLKMSG TEXTZ " UDIR1 block at \H1,6\, entry at offset \H2,3\." 036B9 20554449 560 UD2BLKMSG TEXTZ " UDIR2 block at \H1,6\, entry at offset \H2,3\." 036C5 2046696C 561 FILEBLKMSG TEXTZ " File starts at block \H1,6\." 562 563 ********************************************************************************** 564 * * 565 * Definitions of result buffer returned by SRCHDIR in R1. * 566 * These definitions must correspond exactly with those in * 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 30 (PEEK&POKEUTL) F 13 Utility routine: FINDFIL 567 * DISKBOOT. * 568 * * 569 ********************************************************************************** 570 000036CD 571 SRCHRESULT BASE R0 00160800 0 BASE 572 SRCHSECBLK BSS 1 security block number 00160801 0 BASE 573 SRCHIDXBKT BSS 1 IDX bucket number 00160802 0 BASE 574 SRCHIDXBLK BSS 1 IDX block number 00160803 0 BASE 575 SRCHIDXOFF BSS 1 offset within IDX block 00160804 0 BASE 576 SRCHUD1BLK BSS 1 UDIR1 block number 00160805 0 BASE 577 SRCHUD1OFF BSS 1 offset within UDIR1 block 00160806 0 BASE 578 SRCHUD2BLK BSS 1 UDIR2 block number 00160807 0 BASE 579 SRCHUD2OFF BSS 1 offset within UDIR2 block 580 DRCT 581 +DISKCBP 00003031 F 13 494 DONTSAY 00003685 F 13 508j 515j 522j 536j 543= 553j DONTSAY1 0000367F F 13 529j 535= EXITIT 00003686 F 13 490j 546= +FDDA 0008D185 F 13 537 540a FILEBLKMSG 000036C5 F 13 541a 561= +FILENAME 0000303C F 13 487a 493a +FINDFIL 00003659 F 13 480 486= GIVEMTMESS 00003687 F 13 538j 550= +GOTFILE 00003666 F 13 481 504= IDXBLKMSG 000036A1 F 13 519a 558= MTMESS 0000368A F 13 552a 556= +NEXTPOS 00003076 F 13 492s +OUTSRCHMSG 000035D2 F 13 500 OVERENTR 00003667 F 13 498j 501j 506= SECBLKMSG 00003693 F 13 512a 557= SRCHIDXBKT 00160801 F 13 511a 573= SRCHIDXBLK 00160802 F 13 514 517a 574= SRCHIDXOFF 00160803 F 13 518a 575= SRCHRESULT 000036CD F 13 571= SRCHSECBLK 00160800 F 13 507 510a 572= SRCHUD1BLK 00160804 F 13 521 524a 576= SRCHUD1OFF 00160805 F 13 525a 577= SRCHUD2BLK 00160806 F 13 528 531a 578= SRCHUD2OFF 00160807 F 13 532a 579= UD1BLKMSG 000036AD F 13 526a 559= UD2BLKMSG 000036B9 F 13 533a 560= +VFETCHFNM 000013F6 F 13 489 +VPREPOUT 000013F9 F 13 509 516 523 530 539 551 +VSRCHDIR 000013E2 F 13 495 582 END FINDFIL/GOTFILE routines 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 31 (PEEK&POKEUTL) F 13 Utility routine: DOFBICHECK 585 586 ********************************************************************************** 587 * * 588 * DOFBICHECK is called after a block is read, and is used * 589 * to ensure that both the checksum and the disk address match * 590 * their expected values. If there is discrepancy, a message is * 591 * sent to the operator to indicate the problem. * 592 * * 593 ********************************************************************************** 594 595 BLOCK DOFBICHECK routine 596 ENTRY DOFBICHECK 597 598 BEGFRAME 00178801 6 BASE 599 CHECKSUM BSS 1 600 ENDFRAME 601 036D5 DD5F8002 6 STAK 602 DOFBICHECK ENTRNP PUSH 603 * Inspect the FBI for validity. 036D6 6003FFC0 0 IMM 604 LD R0 FBICSMASK get the bit array for checking 036D7 F00030D2 0 605 PRMUT R0 FBIBUFF generate the checksum 036D8 FA2C36DF 0 606 JEQMW R0 CKSUMOK jump if OK 036D9 E4178801 0 6 BASE 607 ST R0 SP,CHECKSUM save this for PREPOUT 036DA 60938000 2 6 REG 608 LD R2 SP copy stack pointer 036DB DC1013F9 @ 609 CALL @VPREPOUT and complain about it 036DC 4100303B 610 PAR INBLOCK the block number 036DD 41168801 2 BASE 611 PAR R2,CHECKSUM the checksum 036DE 400036E8 612 PARL CHKSUMMSG and message 613 * \ / 614 000036DF 615 CKSUMOK LABEL 036DF 608430D2 2 IMM 616 LD R2 ADR FBIBUFF R2 -> the FBI 036E0 60089181 0 2 ZBM 617 LD R0 R2,FBIDA R0 = where the FBI sez we came from 036E1 6400303B 0 618 CPR R0 INBLOCK check the disk addr 036E2 FE0236E7 619 JEQ DAOK jump if ok 036E3 DC1013F9 @ 620 CALL @VPREPOUT else complain about it 036E4 4100303B 621 PAR INBLOCK the block number 036E5 41089181 2 ZBM 622 PAR R2,FBIDA write out the DA from the FBI 036E6 400036F9 623 PARL FBIDAMSG in a cute message 624 * \ / 000036E7 625 DAOK LABEL 036E7 5D1F8002 6 STAK 626 LEAVE POP return to caller 627 * --- 628 036E8 20464249 629 CHKSUMMSG TEXTZ " FBI checksum is bad on block #\H1,6\. Computed checksum = \H2\." 036F9 20464249 630 FBIDAMSG TEXTZ " FBIDA is bad on block #\H1,6\. Found \H2,6\." 631 CHECKSUM 00178801 F 13 599= 607s 611a CHKSUMMSG 000036E8 F 13 612a 629= CKSUMOK 000036DF F 13 606j 615= DAOK 000036E7 F 13 619j 625= +DOFBICHECK 000036D5 F 13 596 602= +FBIBUFF 000030D2 F 13 605 616a +FBICSMASK FFE00000 F 13 604 +FBIDA 00089181 F 13 617 622a FBIDAMSG 000036F9 F 13 623a 630= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 32 (PEEK&POKEUTL) F 13 Utility routine: DOFBICHECK +INBLOCK 0000303B F 13 610a 618 621a +VPREPOUT 000013F9 F 13 609 620 632 END DOFBICHECK routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 33 (PEEK&POKEUTL) F 13 Utility routine: GETASCII 635 636 ********************************************************************************** 637 * * 638 * This routine picks up the next 4 characters from the * 639 * input buffer and returns them as a single numeric word. * 640 * Call: * 641 * R4 => buffer * 642 * CALLNP GETASCII * 643 * * 644 * Eats R0:R3 * 645 * * 646 ********************************************************************************** 647 648 BLOCK GETASCII routine 649 ENTRY GETASCII 650 651 BEGFRAME 00178801 6 BASE 652 PACKWORD BSS 1 word to pack characters in 653 ENDFRAME 654 03705 DD5F8002 6 STAK 655 GETASCII ENTRNP PUSH 03706 5C170000 4 CACH 656 CMZ CACH R4,0 check for null line 03707 FE023714 657 JEQ GAEOL jump if empty 03708 60003100 0 658 LD R0 BLANKS 03709 E4178801 0 6 BASE 659 ST R0 SP,PACKWORD initialize word to all blanks 0370A 38D78004 3 6 CACH 660 LEA R3 CACH SP,PACKWORD make character pointer 0370B 6087FFFD 2 IMM 661 LD R2 1-CPW set counter for one word 0000370C 662 GALOOP LABEL 0370C 60170000 0 4 CACH 663 LD R0 CACH R4,0 pick up next character 0370D FA023711 0 664 JEQZ R0 GAEND jump if at terminating null 0370E E41AD003 0 32 CACH 665 ST R0 CACH R3,0(CPW-1+R2) store into word 0370F D0930000 4 REG 666 INCP R4 advance to next input character 03710 FAA4370C 2 667 JIR R2 GALOOP process up to 4 characters 00003711 668 GAEND LABEL 03711 60440001 1 IMM 669 LD R1 1*TNUM indicate returning 'numeric' value 03712 60978801 2 6 BASE 670 LD R2 SP,PACKWORD and pick up the value 03713 5D1F8002 6 STAK 671 LEAVE POP and return 672 * --- 673 00003714 674 GAEOL LABEL 03714 60440008 1 IMM 675 LD R1 1*TEOL return end of line marker 03715 5D1F8002 6 STAK 676 LEAVE POP 677 * --- 678 +BLANKS 00003100 F 13 658 +CPW 00000004 F 13 661 665s GAEND 00003711 F 13 664j 668= GAEOL 00003714 F 13 657j 674= GALOOP 0000370C F 13 662= 667j +GETASCII 00003705 F 13 649 655= PACKWORD 00178801 F 13 652= 659s 660a 670 +TEOL 00003810 F 13 675 +TNUM 00003E10 F 13 669 679 END GETASCII routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 34 (PEEK&POKEUTL) F 13 Utility routine: PACKER 682 683 ********************************************************************************** 684 * * 685 * PACKER calls FETCHITEM and ensures that a PAK6 item is returned. * 686 * If we are satisfied with the characteristics of the item, we will * 687 * return a type code bit of TNUM. Otherwise, it will be what FETCHITEM * 688 * gave back (except TNUM). * 689 * * 690 * Eats R0:R3 * 691 * * 692 ********************************************************************************** 693 694 BLOCK PACKER routine 695 ENTRY PACKER 696 697 BEGFRAME 698 ENDFRAME 699 03716 DD5F8001 6 STAK 700 PACKER ENTRNP PUSH 03717 DC5013F5 @ 701 CALLNP @VFETCHITEM fetch item value 03718 F27C371C 1 702 JBF R1/TALPH PACKERR jump if not a symbol 03719 FACC371C 3 703 JNEZ R3 PACKERR jump if more than 6 characters 0371A 60440001 1 IMM 704 LD R1 1*TNUM make type look acceptable 0000371B 705 PACKEXIT LABEL 0371B 5D1F8001 6 STAK 706 LEAVE POP return to caller 707 * --- 708 0000371C 709 PACKERR LABEL 0371C F27E371B 1 710 JBF R1/TNUM PACKEXIT if it wasn't a number, give it back 0371D EC0A7E10 1 CBM 711 STZ R1/TNUM anything but this bit 0371E EDCA7C10 1 CBM 712 STW R1/TALPH but, avoid all zero... different kind of error 0371F FE0E371B 713 JMP PACKEXIT 714 * --- 715 +PACKER 00003716 F 13 695 700= PACKERR 0000371C F 13 702j 703j 709= PACKEXIT 0000371B F 13 705= 710j 713j +TALPH 00003C10 F 13 702j 712s +TNUM 00003E10 F 13 704 710j 711s +VFETCHITEM 000013F5 F 13 701 716 END PACKER routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 35 (PEEK&POKEUTL) F 13 Utility routine: DPACKER 719 720 ********************************************************************************** 721 * * 722 * DPACKER calls FETCHITEM and ensures that a PAK12 item is returned. * 723 * If we are satisfied with the characteristics of the item, we will * 724 * return a type code bit of TNUM. Otherwise, it will be what FETCHITEM * 725 * gave back (except TNUM). * 726 * * 727 * Eats R0:R3 * 728 * * 729 ********************************************************************************** 730 731 BLOCK DPACKER routine 732 ENTRY DPACKER 733 734 BEGFRAME 735 ENDFRAME 736 03720 DD5F8001 6 STAK 737 DPACKER ENTRNP PUSH 03721 DC5013F5 @ 738 CALLNP @VFETCHITEM fetch item value 03722 F27C3725 1 739 JBF R1/TALPH DPACKERR jump if not a symbol 03723 60440001 1 IMM 740 LD R1 1*TNUM make type look acceptable 00003724 741 DPACKEXIT LABEL 03724 5D1F8001 6 STAK 742 LEAVE POP return to caller 743 * --- 744 00003725 745 DPACKERR LABEL 03725 F27E3724 1 746 JBF R1/TNUM DPACKEXIT if it wasn't a number, give it back 03726 EC0A7E10 1 CBM 747 STZ R1/TNUM anything but this bit 03727 EDCA7C10 1 CBM 748 STW R1/TALPH but, avoid all zero... different kind of error 03728 FE0E3724 749 JMP DPACKEXIT 750 * --- 751 +DPACKER 00003720 F 13 732 737= DPACKERR 00003725 F 13 739j 745= DPACKEXIT 00003724 F 13 741= 746j 749j +TALPH 00003C10 F 13 739j 748s +TNUM 00003E10 F 13 740 746j 747s +VFETCHITEM 000013F5 F 13 738 752 END DPACKER routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 36 (PEEK&POKEUTL) F 13 Utility routine: GETCHAR 755 756 ********************************************************************************** 757 * * 758 * GETCHAR. Routine to get the next char. * 759 * Call: * 760 * LD R4 => the char minus one (pointer bumped first) * 761 * CALLNP GETCHAR * 762 * ST R0 upperfied character * 763 * ST R1 code for the char * 764 * * 765 * Returns R0 and R1, R4 points to the char, and other regs unchanged. * 766 * * 767 ********************************************************************************** 768 769 BLOCK GETCHAR routine 770 ENTRY GETCHAR 771 ENTRY CODES 772 773 * Misc definitions 774 00000061 ABS 775 LOWCASE EQU 061 lower case characters 0000007A ABS 776 LOWTOP EQU 07A last lower case character 00000020 ABS 777 LOWBIAS EQU 020 change lower to upper 0000007F ABS 778 GASMASK EQU 07F parity mask 779 780 BEGFRAME 781 ENDFRAME 782 03729 DD5F8001 6 STAK 783 GETCHAR ENTRNP PUSH 0372A D00B1F30 4 CBM 784 INC R4/FLDCHARS 0372B 60170000 0 4 CACH 785 LD R0 CACH R4,0 get the char 0372C 7804007F 0 IMM 786 AND R0 GASMASK remove the parity bit 0372D 64040061 0 IMM 787 CPR R0 LOWCASE a lower case char? 0372E FE083732 788 JLT GC30 jump if not 0372F 6404007A 0 IMM 789 CPR R0 LOWTOP out of the lower range? 03730 FE043732 790 JGT GC30 if so, don't upperfy 03731 10040020 0 IMM 791 SUB R0 LOWBIAS convert to upper case 792 * \ / 793 00003732 794 GC30 LABEL 03732 60703744 1 0 @ 795 LD R1 @CODES(R0) get the char group code 03733 5D1F8001 6 STAK 796 LEAVE POP return to caller 797 * --- 798 00000000 ABS 799 CEL EQU 0 end-of-line 00000001 ABS 800 CAL EQU 1 alphabetic 00000002 ABS 801 CDL EQU 2 delimiters 00000003 ABS 802 CNM EQU 3 numbers 00000004 ABS 803 CBL EQU 4 blank 00000005 ABS 804 CMS EQU 5 minus sign 00000006 ABS 805 CSS EQU 6 special symbol character 00000007 ABS 806 CSF EQU 7 filename punctuation character 807 03734 00000002 808 CODETAB VFD 4:CEL,CDL,CDL,CDL,CDL,CDL,CDL,CDL 00-07 03735 00000002 809 VFDB 4:CDL,CDL,CEL,CDL,CDL,CEL,CDL,CDL 08-0F 03736 00000002 810 VFDB 4:CDL,CDL,CDL,CDL,CDL,CDL,CDL,CDL 10-17 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 37 (PEEK&POKEUTL) F 13 Utility routine: GETCHAR 03737 00000002 811 VFDB 4:CDL,CDL,CDL,CDL,CDL,CDL,CDL,CDL 18-1F 03738 00000002 812 VFDB 4:CBL,CSS,CDL,CDL,CSF,CDL,CSS,CDL " !"#$%&'" 03739 00000002 813 VFDB 4:CSF,CSF,CDL,CSF,CDL,CMS,CSF,CDL "()*+,-./" 0373A 00000003 814 VFDB 4:CNM,CNM,CNM,CNM,CNM,CNM,CNM,CNM "01234567" 0373B 00000002 815 VFDB 4:CNM,CNM,CSF,CDL,CDL,CDL,CDL,CDL "89: <=>?" 0373C 00000001 816 VFDB 4:CDL,CAL,CAL,CAL,CAL,CAL,CAL,CAL "@ABCDEFG" 0373D 00000001 817 VFDB 4:CAL,CAL,CAL,CAL,CAL,CAL,CAL,CAL "HIJKLMNO" 0373E 00000001 818 VFDB 4:CAL,CAL,CAL,CAL,CAL,CAL,CAL,CAL "PQRSTUVW" 0373F 00000006 819 VFDB 4:CAL,CAL,CAL,CDL,CDL,CDL,CDL,CSS "XYZ[\]^_" 03740 00000001 820 VFDB 4:CDL,CAL,CAL,CAL,CAL,CAL,CAL,CAL "`abcdefg" 03741 00000001 821 VFDB 4:CAL,CAL,CAL,CAL,CAL,CAL,CAL,CAL "hijklmno" 03742 00000001 822 VFDB 4:CAL,CAL,CAL,CAL,CAL,CAL,CAL,CAL "pqrstuvw" 03743 00000002 823 VFDB 4:CAL,CAL,CAL,CDL,CDL,CDL,CDL,CDL "xyz{|}~ " 03744 01083734 824 CODES PTR CODETAB 825 CAL 00000001 F 13 800= 816x 816x 816x 816x 816x 816x 816x 817x 817x 817x 817x 817x 817x 817x 817x 818x 818x 818x 818x 818x 818x 818x 818x 819x 819x 819x 820x 820x 820x 820x 820x 820x 820x 821x 821x 821x 821x 821x 821x 821x 821x 822x 822x 822x 822x 822x 822x 822x 822x 823x 823x 823x CBL 00000004 F 13 803= 812x CDL 00000002 F 13 801= 808x 808x 808x 808x 808x 808x 808x 809x 809x 809x 809x 809x 809x 810x 810x 810x 810x 810x 810x 810x 810x 811x 811x 811x 811x 811x 811x 811x 811x 812x 812x 812x 812x 813x 813x 813x 815x 815x 815x 815x 815x 816x 819x 819x 819x 819x 820x 823x 823x 823x 823x 823x CEL 00000000 F 13 799= 808x 809x 809x CMS 00000005 F 13 804= 813x CNM 00000003 F 13 802= 814x 814x 814x 814x 814x 814x 814x 814x 815x 815x +CODES 00003744 F 13 771 795 824= CODETAB 01003734 F 13 808= 824a CSF 00000007 F 13 806= 812x 813x 813x 813x 813x 815x CSS 00000006 F 13 805= 812x 812x 819x +FLDCHARS 00001F30 F 13 784s GASMASK 0000007F F 13 778= 786 GC30 00003732 F 13 788j 790j 794= +GETCHAR 00003729 F 13 770 783= LOWBIAS 00000020 F 13 777= 791 LOWCASE 00000061 F 13 775= 787 LOWTOP 0000007A F 13 776= 789 826 END GETCHAR routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 38 (PEEK&POKEUTL) F 13 Utility routine: GETFBIINDX 829 830 ********************************************************************************** 831 * * 832 * GETFBIINDX scans the FBI name table for a match * 833 * and returns a negative index into the FBI buffer. * 834 * Call: * 835 * LD R2 FBIx * 836 * CALLNP GETFBIINDX * 837 * JEQZ R2 error handler * 838 * ST R2 index * 839 * * 840 ********************************************************************************** 841 842 BLOCK GETFBIINDX routine 843 ENTRY GETFBIINDX 844 ENTRY FBINAMET 845 846 BEGFRAME 847 ENDFRAME 848 03745 DD5F8001 6 STAK 849 GETFBIINDX ENTRNP PUSH 03746 FACC374E 3 850 JNEZ R3 GETFBIERR FBI symbols fit in PAK6 03747 6004000A 0 IMM 851 LD R0 FBILNTH-1 start at FBI0 852 * \ / 853 00003748 854 FINDFBI LABEL 03748 64A03750 2 0 855 CPR R2 FBINAMET(R0) is this the location? 03749 FE02374C 856 JEQ FOUNDFBI jump if found 0374A FA263748 0 857 JDR R0 FINDFBI try next higher symbol 0374B FE0E374E 858 JMP GETFBIERR don't accept bad symbols 859 * --- 860 0000374C 861 FOUNDFBI LABEL 0374C 70961001 2 0 REG 862 LDN R2 R0+1 get the index for the location 863 * \ / 0000374D 864 GETFBIEXIT LABEL 0374D 5D1F8001 6 STAK 865 LEAVE POP return to caller 866 * --- 867 0000374E 868 GETFBIERR LABEL 0374E 60840000 2 IMM 869 LD R2 0 say an error happened 0374F FE0E374D 870 JMP GETFBIEXIT 871 * --- 872 873 * Table of the FBI location names ordered so they give the right index. 874 00003750 875 FBINAMET LABEL 03750 638F5AA8 876 PAK6 FBI10 03751 638F8C80 877 PAK6 FBI9 03752 638F8640 878 PAK6 FBI8 03753 638F8000 879 PAK6 FBI7 03754 638F79C0 880 PAK6 FBI6 03755 638F7380 881 PAK6 FBI5 03756 638F6D40 882 PAK6 FBI4 03757 638F6700 883 PAK6 FBI3 03758 638F60C0 884 PAK6 FBI2 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 39 (PEEK&POKEUTL) F 13 Utility routine: GETFBIINDX 03759 638F5A80 885 PAK6 FBI1 0375A 638F5440 886 PAK6 FBI0 887 +FBILNTH 0000000B F 13 851 +FBINAMET 00003750 F 13 844 855 875= FINDFBI 00003748 F 13 854= 857j FOUNDFBI 0000374C F 13 856j 861= GETFBIERR 0000374E F 13 850j 858j 868= GETFBIEXIT 0000374D F 13 864= 870j +GETFBIINDX 00003745 F 13 843 849= 888 END GETFBIINDX routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 40 (PEEK&POKEUTL) F 13 Utility routine: GETRANGE 891 892 ********************************************************************************** 893 * * 894 * GETRANGE and GETRANGEF fetch items from the parameter * 895 * line in the format ":" . This format is the * 896 * standard one for denoting ranges. GETRANGE requires that * 897 * both items be integers. GETRANGEF allows either or both to * 898 * be symbols "FBIxx". FBI symbols are returned as an integer, * 899 * the sum WPP+xx. In addition, the double word parameter * 900 * specifies the range in which the values must lie. Both * 901 * items are checked aginst these (after converting FBI * 902 * symbols) and a check is made that the first item is less * 903 * than or equal to the second. Any error is indicated by * 904 * returning -1 in the location addressed by FIRST. Note that * 905 * if the first item is in error the delimiter and second item * 906 * will not be scanned. The second has a default value * 907 * of the highest value in the range. The first has none. A * 908 * bit in R1 is set if the default second is used. * 909 * * 910 ********************************************************************************** 911 912 BLOCK GETRANGE/GETRANGEF routines 913 ENTRY GETRANGE 914 ENTRY GETRANGEF 915 916 BEGFRAME 00178801 6 BASE 917 FIRST BSS 1 low value 00178802 6 BASE 918 SECOND BSS 1 high value 00178803 6 BASE 919 FLOOR BSS 1 lowest allowable value 00178804 6 BASE 920 CEILING BSS 1 highest allowable value 921 ENDFRAME 922 000BC010 7 CBM 923 GRFLAG EQU R7/BIT 0 flag to indicate desired range type 0000003A ABS 924 DELIMITER EQU ":" separates low from high 925 0375B DD1F8005 6 STAK 926 GETRANGEF ENTR PUSH 0375C C1178801 6 BASE 927 STP SP,FIRST remember place to store low 0375D C1178802 6 BASE 928 STP SP,SECOND remember place to store high 0375E C2578803 6 BASE 929 STPV2L SP,FLOOR remember range limits 930 * \ / 0375F EDCBC010 7 CBM 931 STW GRFLAG indicate flexibility 03760 FE0E3766 932 JMP GRSHARE share some code 933 * --- 934 03761 DD1F8005 6 STAK 935 GETRANGE ENTR PUSH 03762 C1178801 6 BASE 936 STP FIRST remember place to store low 03763 C1178802 6 BASE 937 STP SECOND remember place to store high 03764 C2578803 6 BASE 938 STPV2L FLOOR remember range limits 939 * \ / 03765 EC0BC010 7 CBM 940 STZ GRFLAG indicate strictness 00003766 941 GRSHARE LABEL 03766 DC403786 942 CALLNP GETONE get first item 03767 F678377E 1 943 JBT R1/TEOL OUT jump if end-of-line 03768 F27E3780 1 944 JBF R1/TNUM BADSYNTAX wasn't integer or FBIxx 03769 F7C0376B 7 945 JBT GRFLAG GET2 jump if FBI symbol allowed 0376A F67C3780 1 946 JBT R1/TALPH BADSYNTAX otherwise, jump if FBIxx 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 41 (PEEK&POKEUTL) F 13 Utility routine: GETRANGE 947 * \ / 948 0000376B 949 GET2 LABEL 0376B 64978803 2 6 BASE 950 CPR R2 SP,FLOOR check low bounds 0376C FE083783 951 JLT BADRANGE sorry, print message 952 * \ / 953 0376D E4978C01 2 6 FPVR 954 ST R2 @(SP,FIRST) remember the low number 955 956 * first item is in place, check for #2 0376E DC403795 957 CALLNP SKIPBLANKS elide some filler 0376F 60978804 2 6 BASE 958 LD R2 SP,CEILING load default SECOND 03770 EDCA7610 1 CBM 959 STW R1/DEFBIT assume that we use it 03771 6404003A 0 IMM 960 CPR R0 DELIMITER is there explicit range? 03772 FE0C377B 961 JNE KEEP2 jump if we must default 962 * \ / 963 964 * we expect to see a second value 03773 D00B1F30 4 CBM 965 INC R4/FLDCHARS move past the delimiter 03774 DC403786 966 CALLNP GETONE get second item 03775 F27E3780 1 967 JBF R1/TNUM BADSYNTAX wasn't integer or FBIxx 03776 F7C03778 7 968 JBT GRFLAG CHECK jump if FBI symbol allowed 03777 F67C3780 1 969 JBT R1/TALPH BADSYNTAX symbols are not OK! 970 * \ / 971 00003778 972 CHECK LABEL 03778 68978804 2 6 BASE 973 UCPR R2 SP,CEILING check upper value 03779 FE043783 974 JGT BADRANGE sorry, print message 0377A EC0A7610 1 CBM 975 STZ R1/DEFBIT didn't use default after all 976 * \ / 0000377B 977 KEEP2 LABEL 0377B E4978C02 2 6 FPVR 978 ST R2 @(SP,SECOND) remember it 0377C 64978C01 2 6 FPVR 979 CPR R2 @(SP,FIRST) check range relativity 0377D FE083783 980 JLT BADRANGE not a nice leave 981 * \ / 982 0000377E 983 OUT LABEL 0377E 19C40001 7 IMM 984 ADD R7 1 nice leave 0000377F 985 OFF LABEL 0377F 5D1F8005 6 STAK 986 LEAVE POP return to caller 987 * --- 988 989 * GETONE didn't like the syntax, or disallowed FBIxx was specified 00003780 990 BADSYNTAX LABEL 03780 DC1013F9 @ 991 CALL @VPREPOUT tell the user 03781 4000300A 992 PARL BADFORMM "Bad format." 03782 FE0E377F 993 JMP OFF 994 * --- 995 996 * range spec exceeded the limits, or the first was greater than the second 997 00003783 998 BADRANGE LABEL 03783 DC1013F9 @ 999 CALL @VPREPOUT 03784 40003105 1000 PARL BRMESS 03785 FE0E377F 1001 JMP OFF 1002 * --- 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 42 (PEEK&POKEUTL) F 13 Utility routine: GETRANGE 1003 +BADFORMM 0000300A F 13 992a BADRANGE 00003783 F 13 951j 974j 980j 998= BADSYNTAX 00003780 F 13 944j 946j 967j 969j 990= +BRMESS 00003105 F 13 1000a CEILING 00178804 F 13 920= 958 973 CHECK 00003778 F 13 968j 972= +DEFBIT 00003610 F 13 959s 975s DELIMITER 0000003A F 13 924= 960 FIRST 00178801 F 13 917= 927s 936s 954s 979 +FLDCHARS 00001F30 F 13 965s FLOOR 00178803 F 13 919= 929s 938s 950 GET2 0000376B F 13 945j 949= +GETONE UUUUUUUU F 13 942 966 +GETRANGE 00003761 F 13 913 935= +GETRANGEF 0000375B F 13 914 926= GRFLAG 000BC010 F 13 923= 931s 940s 945j 968j GRSHARE 00003766 F 13 932j 941= KEEP2 0000377B F 13 961j 977= OFF 0000377F F 13 985= 993j 1001j OUT 0000377E F 13 943j 983= SECOND 00178802 F 13 918= 928s 937s 978s +SKIPBLANKS UUUUUUUU F 13 957 +TALPH 00003C10 F 13 946j 969j +TEOL 00003810 F 13 943j +TNUM 00003E10 F 13 944j 967j +VPREPOUT 000013F9 F 13 991 999 1004 END GETRANGE/GETRANGEF routines 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 43 (PEEK&POKEUTL) F 13 Utility routine: GETONE 1007 1008 ********************************************************************************** 1009 * * 1010 * GETONE is a routine to return the next input item. * 1011 * It is called after @VREADLINE and performs a @VFETCHITMH. * 1012 * If the item was a symbol of the form "FBI0", "FBI1", ... , * 1013 * "FBI10" then the value of the "integer" in the string is * 1014 * added to WPP to produce the value returned in R0. The bit * 1015 * in R1 is set to indicate that an integer was found, but * 1016 * the bit indicating a symbol is also left set so that it * 1017 * may be determined that the item was an FBI symbol. Any * 1018 * non-symbol or non-FBI symbol is returned just as it was * 1019 * from VFETCHITMH. * 1020 * * 1021 ********************************************************************************** 1022 1023 BLOCK GETONE routine 1024 ENTRY GETONE 1025 1026 BEGFRAME 00178801 6 BASE 1027 LASTCHAR BSS 1 temp holder 1028 ENDFRAME 1029 03786 DD5F8002 6 STAK 1030 GETONE ENTRNP PUSH 03787 DC5013F8 @ 1031 CALLNP @VFETCHITMH get the next thing 03788 F27C3794 1 1032 JBF R1/TALPH RETURN exit if it wasn't a symbol 1033 * \ / 1034 1035 * there is a packed symbol in R2,R3, is it "FBIxx"? 03789 FACC3794 3 1036 JNEZ R3 RETURN all FBI symbols fit in PAK6 0378A E4178801 0 6 BASE 1037 ST R0 SP,LASTCHAR remember the terminating char 0378B 6004000A 0 IMM 1038 LD R0 FBILNTH-1 biggest offset in table 1039 * \ / 0000378C 1040 GETFBI LABEL search table 0378C 64A03750 2 0 1041 CPR R2 FBINAMET(R0) maybe ... 0378D FE023790 1042 JEQ GOTFBI ... got one! 0378E FA26378C 0 1043 JDR R0 GETFBI otherwise, try again 1044 * \ / 0378F FE0E3793 1045 JMP SOLONG wasn't FBI specifier 1046 * --- 1047 00003790 1048 GOTFBI LABEL 03790 6084040A 2 IMM 1049 LD R2 WPP+FBILNTH-1 fake like FBI is after DATABLK ... 03791 10920000 2 0 REG 1050 SUB R2 R0 ... to make offset 03792 EDCA7E10 1 CBM 1051 STW R1/TNUM say it was a number 1052 * \ / 00003793 1053 SOLONG LABEL clean up and go 03793 60178801 0 6 BASE 1054 LD R0 LASTCHAR restore terminating character 00003794 1055 RETURN LABEL adios 03794 5D1F8002 6 STAK 1056 LEAVE POP return to caller 1057 * --- 1058 +FBILNTH 0000000B F 13 1038 1049 +FBINAMET 00003750 F 13 1041 GETFBI 0000378C F 13 1040= 1043j +GETONE 00003786 F 13 1024 1030= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 44 (PEEK&POKEUTL) F 13 Utility routine: GETONE GOTFBI 00003790 F 13 1042j 1048= LASTCHAR 00178801 F 13 1027= 1037s 1054 RETURN 00003794 F 13 1032j 1036j 1055= SOLONG 00003793 F 13 1045j 1053= +TALPH 00003C10 F 13 1032j +TNUM 00003E10 F 13 1051s +VFETCHITMH 000013F8 F 13 1031 +WPP 00000400 F 13 1049 1059 END GETONE routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 45 (PEEK&POKEUTL) F 13 Utility routine: SKIPBLANKS 1062 1063 ********************************************************************************** 1064 * * 1065 * SKIPBLANKS passes over the input buffer from the current * 1066 * position until the current position contains a non-blank * 1067 * character. * 1068 * * 1069 * Eats R0, R1 * 1070 * * 1071 ********************************************************************************** 1072 1073 BLOCK SKIPBLANKS routine 1074 ENTRY SKIPBLANKS 1075 1076 BEGFRAME 1077 ENDFRAME 1078 03795 DD5F8001 6 STAK 1079 SKIPBLANKS ENTRNP PUSH 03796 60040020 0 IMM 1080 LD R0 BLANK get what we're looking for 03797 FE0E3799 1081 JMP START start looking 1082 * --- 1083 00003798 1084 SBLOOP LABEL 03798 D00B1F30 4 CBM 1085 INC R4/FLDCHARS point to next char 1086 * \ / 00003799 1087 START LABEL 03799 64090080 0 4 ZBM 1088 CPR R0 R4,0/BITS 0:7 see if it's there 0379A FE023798 1089 JEQ SBLOOP yes, it's a blank! 1090 * \ / 1091 1092 * non-blank was found, was there anything on the line? 0379B 60090080 0 4 ZBM 1093 LD R0 R4,0/BITS 0:7 get the character 0379C 6404000D 0 IMM 1094 CPR R0 0D carriage return? 0379D FE0C379F 1095 JNE SEEYOU normal if not 0379E EDCA7810 1 CBM 1096 STW R1/TEOL indicate end-of-line 1097 * \ / 0000379F 1098 SEEYOU LABEL 0379F 5D1F8001 6 STAK 1099 LEAVE POP return to caller 1100 * --- 1101 +BLANK 00000020 F 13 1080 +FLDCHARS 00001F30 F 13 1085s SBLOOP 00003798 F 13 1084= 1089j SEEYOU 0000379F F 13 1095j 1098= +SKIPBLANKS 00003795 F 13 1074 1079= START 00003799 F 13 1081j 1087= +TEOL 00003810 F 13 1096s 1102 END SKIPBLANKS routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 46 (PEEK&POKEUTL) F 13 Utility routine: FINDBLOCK 1105 1106 ********************************************************************************** 1107 * * 1108 * FINDBLOCK determines the number of the next non-hole * 1109 * in the currently loaded file and loads that block. It * 1110 * begins its search at the page number in R5. It assumes that * 1111 * a file is loaded (i.e. CCBBLK has valid data). The value * 1112 * returned in R5 is -1 if there were no non-holes or if the * 1113 * load failed. Otherwise, it is the relative block number of * 1114 * the block which was loaded. If holes were found during the * 1115 * search a message is printed to indicate where they were. * 1116 * Call: * 1117 * LD R5 * 1118 * CALL FINDBLOCK * 1119 * PARVL * 1120 * * 1121 * returns: R5 = relative block# of loaded non-hole or -1 * 1122 * * 1123 ********************************************************************************** 1124 1125 BLOCK FINDBLOCK routine 1126 ENTRY FINDBLOCK 1127 1128 BEGFRAME 00178801 6 BASE 1129 OURSTART BSS 1 our first relative block 00178802 6 BASE 1130 DIFF BSS 1 number of holes we found 00178803 6 BASE 1131 LASTADR BSS 1 00178804 6 BASE 1132 PAGEPTR BSS 1 1133 ENDFRAME 1134 037A0 DD1F8005 6 STAK 1135 FINDBLOCK ENTR PUSH 037A1 C0524000 1 REG 1136 STPVL R1 get the biggest we care to find 1137 * \ / 037A2 504403E7 1 IMM 1138 MIN R1 CCBMAXPAGE-1 make small, assume positive 037A3 E5578801 5 6 BASE 1139 ST R5 SP,OURSTART remember where we started 1140 1141 * Loop through the CCB, note that control exits the loop immediately 1142 * if R5 is negative or is greater than the desired maximum 1143 000037A4 1144 LOOP LABEL 037A4 69524000 5 1 REG 1145 UCPR R5 R1 jump if nothing to look at 037A5 FE0437AA 1146 JGT ALLOVER bye! 037A6 602A5800 0 5 1147 LD R0 CCBBLK(R5) is it ... 037A7 780030FE 0 1148 AND R0 MSBLKMASK ... a hole? 037A8 FA0C37AD 0 1149 JNEZ R0 GOODEXIT exit if it isn't 037A9 FB6037A4 5 1150 IRJ R5 LOOP next location 1151 * \ / 1152 1153 * Everything was holes 000037AA 1154 ALLOVER LABEL 037AA 60D34000 3 5 REG 1155 LD R3 R5 copy the last block# checked 037AB 6147FFFF 5 IMM 1156 LD R5 -1 say we didn't find a good page 037AC FE0E37B1 1157 JMP RETURN cleanup and leave 1158 * --- 1159 1160 * Found a block to try, so load it INBLOCK = -1 if block didn't load 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 47 (PEEK&POKEUTL) F 13 Utility routine: FINDBLOCK 000037AD 1161 GOODEXIT LABEL 037AD DC0037D5 1162 CALL LOADBLOCK load the block 037AE 40520000 0 REG 1163 PARVL R0 037AF FE0E37AA 1164 JMP ALLOVER block wouldn't load 037B0 60D34000 3 5 REG 1165 LD R3 R5 copy the last block# checked 1166 * \ / 1167 000037B1 1168 RETURN LABEL 037B1 64D78801 3 6 BASE 1169 CPR R3 SP,OURSTART did we have holes? 037B2 FE0237C8 1170 JEQ JUSTGO jump if not 1171 * \ / 1172 1173 * print message telling of holes 037B3 60840000 2 IMM 1174 LD R2 0 get a blank address 037B4 60578801 1 6 BASE 1175 LD R1 SP,OURSTART get the original relative block# 037B5 E44A8160 1 2 CBM 1176 ST R1 R2/PAGEINDX make it the address of the first hole 037B6 E4978801 2 6 BASE 1177 ST R2 SP,OURSTART and save it to print 1178 * \ / 1179 037B7 E4CA8160 3 2 CBM 1180 ST R3 R2/PAGEINDX remember that the disp part is still 0 037B8 10840001 2 IMM 1181 SUB R2 1 R2 is the last word in the last hole 037B9 E4978803 2 6 BASE 1182 ST R2 SP,LASTADR and save it to print 1183 * \ / 1184 037BA 10D24000 3 1 REG 1185 SUB R3 R1 see how many holes 037BB E4D78802 3 6 BASE 1186 ST R3 SP,DIFF remember so we can print 037BC 608437D3 2 IMM 1187 LD R2 ADR PAGES assume there was more than 1 hole 037BD 64C40001 3 IMM 1188 CPR R3 1 but make sure 037BE FE0C37C0 1189 JNE PTROK we have 037BF 608437D1 2 IMM 1190 LD R2 ADR PAGE agreement 1191 * \ / 1192 000037C0 1193 PTROK LABEL 037C0 E4978804 2 6 BASE 1194 ST R2 SP,PAGEPTR and save it to print 037C1 60938000 2 6 REG 1195 LD R2 SP copy stack pointer 037C2 DC1013F9 @ 1196 CALL @VPREPOUT print the news 037C3 41168801 2 BASE 1197 PAR R2,OURSTART 037C4 41168803 2 BASE 1198 PAR R2,LASTADR 037C5 41168802 2 BASE 1199 PAR R2,DIFF 037C6 41178C04 6 FPVR 1200 PAR @(SP,PAGEPTR) 037C7 400037C9 1201 PARL HOLEMESS 1202 1203 * all is done 000037C8 1204 JUSTGO LABEL 037C8 5D1F8005 6 STAK 1205 LEAVE POP return to caller 1206 * --- 1207 037C9 205C4831 1208 HOLEMESS TEXTZ " \H1,5\-\H2,5\, \D3\ hole \C4\." 037D1 70616765 1209 PAGE TEXTZ "page" 037D3 70616765 1210 PAGES TEXTZ "pages" 1211 ALLOVER 000037AA F 13 1146j 1154= 1164j +CCBBLK UUUUUUUU F 13 1147 +CCBMAXPAGE 000003E8 F 13 1138 DIFF 00178802 F 13 1130= 1186s 1199a +FINDBLOCK 000037A0 F 13 1126 1135= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 48 (PEEK&POKEUTL) F 13 Utility routine: FINDBLOCK GOODEXIT 000037AD F 13 1149j 1161= HOLEMESS 000037C9 F 13 1201a 1208= JUSTGO 000037C8 F 13 1170j 1204= LASTADR 00178803 F 13 1131= 1182s 1198a +LOADBLOCK UUUUUUUU F 13 1162 LOOP 000037A4 F 13 1144= 1150j +MSBLKMASK 000030FE F 13 1148 OURSTART 00178801 F 13 1129= 1139s 1169 1175 1177s 1197a PAGE 000037D1 F 13 1190a 1209= +PAGEINDX 00000160 F 13 1176s 1180s PAGEPTR 00178804 F 13 1132= 1194s 1200a PAGES 000037D3 F 13 1187a 1210= PTROK 000037C0 F 13 1189j 1193= RETURN 000037B1 F 13 1157j 1168= +VPREPOUT 000013F9 F 13 1196 1212 END FINDBLOCK routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 49 (PEEK&POKEUTL) F 13 Utility routine: LOADBLOCK 1215 1216 ********************************************************************************** 1217 * * 1218 * LOADBLOCK loads a block and its FBI into the DATABUF * 1219 * and FBIBUF. The parameter is the disk block number of the * 1220 * desired block. If there were errors loading the block a * 1221 * message is printed, INBLOCK is set to indicate that there * 1222 * is no block read in, and the condition bits are returned * 1223 * indicating not-equal. The notable thing about this routine * 1224 * is that it does not print anything if the read went * 1225 * normally. * 1226 * Call: * 1227 * CALL LOADBLOCK * 1228 * PARVL * 1229 * JMP bad load * 1230 * * 1231 * Eats R0:R3 * 1232 * * 1233 ********************************************************************************** 1234 1235 BLOCK LOADBLOCK routine 1236 ENTRY LOADBLOCK 1237 1238 BEGFRAME 00178801 6 BASE 1239 BLOCKNUM BSS 1 what's your number, baby? 00178802 6 BASE 1240 SAVER45 BSS 2 temp to maintain registers 1241 ENDFRAME 1242 037D5 DD1F8004 6 STAK 1243 LOADBLOCK ENTR PUSH 037D6 C0578801 6 BASE 1244 STPVL SP,BLOCKNUM get disk block number 037D7 E7178802 456 BASE 1245 ST2 R4 SP,SAVER45 put away registers 1246 * \ / 1247 1248 * call the disk block read routine 037D8 DC4034DE 1249 CALLNP MODCHECK write out current block, if necessary 037D9 60178801 0 6 BASE 1250 LD R0 SP,BLOCKNUM get our number 037DA E400303B 0 1251 ST R0 INBLOCK this is now the current block 037DB EC003075 1252 STZ MODFLAG not yet modified 037DC 61003031 4 1253 LD R4 DISKCBP get the disk control block pointer 037DD DC1013E0 @ 1254 CALL @VREAD bring 'er in 037DE 4140303B 1255 PARV INBLOCK give block number 037DF 41403017 1256 PARV PFDATABLK put block in WNDO1 037E0 410030D2 1257 PAR FBIBUFF put FBI, too 037E1 4147FFFF IMM 1258 PARV -1 no type checking, this is general 037E2 400037E7 1259 PARL IMVERYSORRY go here on disk error 1260 * \ / 1261 1262 * got a keeper 037E3 DC4036D5 1263 CALLNP DOFBICHECK do checksum, check disk address 037E4 63178802 456 BASE 1264 LD2 R4 SP,SAVER45 get back registers 037E5 19C40001 7 IMM 1265 ADD R7 1 set up for good return 037E6 5D1F8004 6 STAK 1266 LEAVE POP return to caller 1267 * --- 1268 1269 * block wouldn't read 000037E7 1270 IMVERYSORRY LABEL print message and go back 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 50 (PEEK&POKEUTL) F 13 Utility routine: LOADBLOCK 037E7 6040303B 1 1271 LD R1 INBLOCK load the block number 037E8 DC40350E 1272 CALLNP DISKERROUT tell him why it failed 037E9 D140303B 1273 STMW INBLOCK no block read 037EA 63178802 456 BASE 1274 LD2 R4 SP,SAVER45 get back registers 037EB 5D1F8004 6 STAK 1275 LEAVE POP return to caller 1276 * --- 1277 BLOCKNUM 00178801 F 13 1239= 1244s 1250 +DISKCBP 00003031 F 13 1253 +DISKERROUT 0000350E F 13 1272 +DOFBICHECK 000036D5 F 13 1263 +FBIBUFF 000030D2 F 13 1257a IMVERYSORRY 000037E7 F 13 1259a 1270= +INBLOCK 0000303B F 13 1251s 1255 1271 1273s +LOADBLOCK 000037D5 F 13 1236 1243= +MODCHECK 000034DE F 13 1249 +MODFLAG 00003075 F 13 1252s +PFDATABLK 00003017 F 13 1256 SAVER45 00178802 F 13 1240= 1245s 1264 1274 +VREAD 000013E0 F 13 1254 1278 END LOADBLOCK routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 51 (PEEK&POKEUTL) F 13 Utility routine: SCANBLOCK 1281 1282 ********************************************************************************** 1283 * * 1284 * SCANBLOCK will do a masked word search through a * 1285 * single block in DATABLK and its FBI in FBIBUFF. If a match * 1286 * is found, R0 is returned with the relative location. The * 1287 * first exit is taken if a match was made, the second if * 1288 * not. Locations within DATABLK are 0:WPP-1, locations * 1289 * within FBIBUFF are specified WPP:WPP+FBILNTH-1. If the * 1290 * is in DATABLK and is in FBIBUFF then DATABLK * 1291 * is searched to its end and FBIBUFF is searched from its * 1292 * beginning. On entry, it is assumed that is less * 1293 * than or equal to and that both are in the range * 1294 * 0:WPP+FBILNTH-1. * 1295 * Call: * 1296 * CALL SCANBLOCK * 1297 * PARV * 1298 * PARV * 1299 * PARV2L , * 1300 * JMP match found, R0,R1 has location, data * 1301 * * 1302 * Eats: R0:R3 * 1303 * * 1304 ********************************************************************************** 1305 1306 BLOCK SCANBLOCK routine 1307 ENTRY SCANBLOCK 1308 1309 BEGFRAME 00178801 6 BASE 1310 LOW BSS 1 first location to check 00178802 6 BASE 1311 HIGH BSS 1 last location to check 1312 ENDFRAME 1313 037EC DD1F8003 6 STAK 1314 SCANBLOCK ENTR PUSH 037ED C1578801 6 BASE 1315 STPV SP,LOW get base of scan 037EE C1578802 6 BASE 1316 STPV SP,HIGH get last location to check 037EF C2548000 23 PAIR 1317 STPV2L PAIR R2 get the pattern and mask 1318 * \ / 1319 * If any account restriction has been emplaced, check it now 037F0 620030BF 01 1320 LD2 R0 SCANACCT 037F1 FA2C37F9 0 1321 JEQMW R0 STARTSCAN 037F2 640030D7 0 1322 CPR R0 FBIBUFF(5) 037F3 FE0C380A 1323 JNE NOMATCH 037F4 644030D8 1 1324 CPR R1 FBIBUFF(6) 037F5 FE0C380A 1325 JNE NOMATCH 037F6 600030C1 0 1326 LD R0 SCANACCT(2) 037F7 640030D9 0 1327 CPR R0 FBIBUFF(7) 037F8 FE0C380A 1328 JNE NOMATCH 000037F9 1329 STARTSCAN LABEL 037F9 60178801 0 6 BASE 1330 LD R0 SP,LOW 037FA 10040400 0 IMM 1331 SUB R0 WPP convert to convenient form 037FB 60578802 1 6 BASE 1332 LD R1 SP,HIGH 037FC 10440400 1 IMM 1333 SUB R1 WPP convert this one too 1334 * \ / 1335 1336 * This loop searches the block and the FBI. 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 52 (PEEK&POKEUTL) F 13 Utility routine: SCANBLOCK 000037FD 1337 MATCHLOOP LABEL 037FD FA063800 0 1338 JGEZ R0 DOFBI jump if we're in the FBI 037FE 6CA05800 23 0 1339 MCPR R2 DATABLK(WPP)(R0) check for match in the block 037FF FE0E3801 1340 JMP SEEMATCH jump to do compare 1341 * --- 1342 00003800 1343 DOFBI LABEL look in the FBI ... 03800 6CA030D2 23 0 1344 MCPR R2 FBIBUFF(R0) check for match 00003801 1345 SEEMATCH LABEL what happened? 03801 FE023805 1346 JEQ AREEQUAL jump if words are equal 03802 5C0030C9 1347 CMZ NEGATE check sense desired 03803 FE023807 1348 JEQ MOVEON jump if looking for NOT equal 03804 FE0E380C 1349 JMP SAWMATCH otherwise, this is it 1350 * --- 00003805 1351 AREEQUAL LABEL 03805 5C0030C9 1352 CMZ NEGATE check sense desired 03806 FE02380C 1353 JEQ SAWMATCH jump for equality find 1354 * \ / 1355 00003807 1356 MOVEON LABEL 03807 D0120000 0 REG 1357 INC R0 move to next word 03808 64124000 0 1 REG 1358 CPR R0 R1 have we hit the specified end? 03809 FE0A37FD 1359 JLE MATCHLOOP jump if still more to search 1360 * \ / 1361 0000380A 1362 NOMATCH LABEL 0380A 19C40001 7 IMM 1363 ADD R7 1 do unhappy return, nothing matched 0380B 5D1F8003 6 STAK 1364 LEAVE POP return to caller 1365 * --- 1366 0000380C 1367 SAWMATCH LABEL jumped to here if we found a match 0380C 60605800 1 0 1368 LD R1 DATABLK(WPP)(R0) cross fingers and get latent match 0380D FA08380F 0 1369 JLTZ R0 R1OK jump if indeed in DATABLK 0380E 606030D2 1 0 1370 LD R1 FBIBUFF(R0) get match from FBI 1371 * \ / 1372 0000380F 1373 R1OK LABEL R1 has matching value 0380F 18040400 0 IMM 1374 ADD R0 WPP convert back to original form 03810 5D1F8003 6 STAK 1375 LEAVE POP return to caller 1376 * --- 1377 AREEQUAL 00003805 F 13 1346j 1351= +DATABLK UUUUUUUU F 13 1339 1368 DOFBI 00003800 F 13 1338j 1343= +FBIBUFF 000030D2 F 13 1322 1324 1327 1344 1370 HIGH 00178802 F 13 1311= 1316s 1332 LOW 00178801 F 13 1310= 1315s 1330 MATCHLOOP 000037FD F 13 1337= 1359j MOVEON 00003807 F 13 1348j 1356= +NEGATE 000030C9 F 13 1347 1352 NOMATCH 0000380A F 13 1323j 1325j 1328j 1362= R1OK 0000380F F 13 1369j 1373= SAWMATCH 0000380C F 13 1349j 1353j 1367= +SCANACCT 000030BF F 13 1320 1326 +SCANBLOCK 000037EC F 13 1307 1314= SEEMATCH 00003801 F 13 1340j 1345= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 53 (PEEK&POKEUTL) F 13 Utility routine: SCANBLOCK STARTSCAN 000037F9 F 13 1321j 1329= +WPP 00000400 F 13 1331 1333 1339 1368 1374 1378 END SCANBLOCK routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 54 (PEEK&POKEUTL) F 13 Utility routine: DISPBLKLOC 1381 1382 ********************************************************************************** 1383 * * 1384 * DISPBLKLOC displays the specified address and its * 1385 * contents from DATABLK or FBIBUFF in the format appropriate * 1386 * for that address. (the format for an address from DATABLK * 1387 * is that used when a block, rather than a file, is loaded. * 1388 * For convenience, it uses some of the variables from the * 1389 * CDISPLAY code for similar purposes. Locations in DATABLK * 1390 * are specified as their offsets into that buffer. Locations * 1391 * in FBIBUFF are specified as WPP + . * 1392 * There is no range checking. * 1393 * Call: * 1394 * LD R0
* 1395 * LD R1 * 1396 * CALLNP DISPBLKLOC * 1397 * * 1398 * Eats: R0 - R4 * 1399 * * 1400 ********************************************************************************** 1401 1402 BLOCK DISPBLKLOC routine 1403 ENTRY DISPBLKLOC 1404 1405 BEGFRAME 1406 ENDFRAME 1407 03811 DD5F8001 6 STAK 1408 DISPBLKLOC ENTRNP PUSH 03812 E44030CE 1 1409 ST R1 CONTENTS 03813 64040400 0 IMM 1410 CPR R0 WPP locate the location 03814 FE08381C 1411 JLT DATAPART jump if it isn't in the FBI 1412 * \ / 03815 30040400 0 IMM 1413 RSB R0 WPP make neg offset from end of name table 03816 6020375A 0 0 1414 LD R0 FBINAMET(FBILNTH-1)(R0) pick out correct FBI symbol 03817 E4003060 0 1415 ST R0 NAMEOFFBI for safe keeping 03818 DC1013F9 @ 1416 CALL @VPREPOUT print the name 03819 41003060 1417 PAR NAMEOFFBI 0381A 40004A2A 1418 PARL DISFBIM using standard format 0381B FE0E3820 1419 JMP DOCONTENTS now print the contents 1420 * --- 1421 0000381C 1422 DATAPART LABEL 0381C E400305D 0 1423 ST R0 OPENLOC 0381D DC1013F9 @ 1424 CALL @VPREPOUT print the location 0381E 4100305D 1425 PAR OPENLOC 0381F 40004A20 1426 PARL DISBLKM in the appropriate format 1427 * \ / 1428 00003820 1429 DOCONTENTS LABEL 03820 DC1013F9 @ 1430 CALL @VPREPOUT time for the contents 03821 410030CE 1431 PAR CONTENTS this is what we want! 03822 4000310A 1432 PARL DISDATA2 must include CR-LF 03823 5D1F8001 6 STAK 1433 LEAVE POP return to caller 1434 * --- 1435 +CONTENTS 000030CE F 13 1409s 1431a 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 55 (PEEK&POKEUTL) F 13 Utility routine: DISPBLKLOC DATAPART 0000381C F 13 1411j 1422= +DISBLKM UUUUUUUU F 13 1426a +DISDATA2 0000310A F 13 1432a +DISFBIM UUUUUUUU F 13 1418a +DISPBLKLOC 00003811 F 13 1403 1408= DOCONTENTS 00003820 F 13 1419j 1429= +FBILNTH 0000000B F 13 1414 +FBINAMET 00003750 F 13 1414 +NAMEOFFBI UUUUUUUU F 13 1415s 1417a +OPENLOC UUUUUUUU F 13 1423s 1425a +VPREPOUT 000013F9 F 13 1416 1424 1430 +WPP 00000400 F 13 1410 1413 1436 END DISPBLKLOC routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 56 (PEEK&POKEUTL) F 13 Utility routine: DESCRBLK 1439 1440 ********************************************************************************** 1441 * * 1442 * This routine describes the block that is present in the * 1443 * data buffer. * 1444 * Call: * 1445 * CALLNP DESCRBLK * 1446 * * 1447 * Eats: R0 - R4 * 1448 * * 1449 ********************************************************************************** 1450 1451 BLOCK DESCRBLK routine 1452 ENTRY DESCRBLK 1453 0000305C 1454 MSGPTR EQU VARS(0) pointer to right message to use 1455 BEGFRAME 1456 ENDFRAME 1457 1458 * Tell the user what kind of block he got. 03824 DD5F8001 6 STAK 1459 DESCRBLK ENTRNP PUSH 03825 388030D2 2 1460 LEA R2 FBIBUFF set up pointer to FBI buffer 03826 60C88080 3 2 ZBM 1461 LD R3 R2,FBITYPE R3 = block type 03827 64C4007F 3 IMM 1462 CPR R3 FBITFREE check for FBI type of FREE 03828 FE0C382A 1463 JNE NOTFREE jump if not type FREE 03829 60C40016 3 IMM 1464 LD R3 016 use this type to indicate free 1465 * (max contiguous type + 1) 0000382A 1466 NOTFREE LABEL 0382A 50C40017 3 IMM 1467 MIN R3 017 if it's greater than this then error 1468 * \ / 0382B DC0035BB 1469 CALL FINDTEXTZ find appropriate message 0382C 4166383D 3 1470 PARV MSGNUMS(R3) how long a message is wanted 0382D 40003855 1471 PARL MSGTABLE 0382E E400305C 0 1472 ST R0 MSGPTR save pointer to message 1473 * \ / 0382F DC0035BB 1474 CALL FINDTEXTZ find ascii description of block 03830 4152C000 3 REG 1475 PARV R3 03831 4000387C 1476 PARL FBITABLE 03832 60520000 1 0 REG 1477 LD R1 R0 save string pointer 03833 608430D2 2 IMM 1478 LD R2 ADR FBIBUFF R2 -> the FBI 1479 * \ / 03834 DC1013F9 @ 1480 CALL @VPREPOUT tell user about block 03835 4100303B 1481 PAR INBLOCK 1 - block number 03836 41164400 1 @R 1482 PAR @R1 2 - FBI type (string) 03837 41168805 2 BASE 1483 PAR R2,FBIACCT 3 - account name 03838 41168807 2 BASE 1484 PAR R2,FBIPROJ 4 - project name 03839 41168808 2 BASE 1485 PAR R2,FBISERNO 5 - first half of serial 0383A 41168809 2 BASE 1486 PAR R2,FBISERNO(1) 6 - second half of serial 0383B 4010305C @ 1487 PARL @MSGPTR message prototype pointer 1488 0383C 5D1F8001 6 STAK 1489 LEAVE POP return 1490 * --- 1491 1492 * In following table, 0 = system, 1 = account, 2 = file 03840 00000000 1493 MSGNUMS VFD 0,0,0,0 ? , PL , BTRX , BOOT 03844 00000000 1494 VFD 0,0,0,0 VL , SUBS , SEC , ADT 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 57 (PEEK&POKEUTL) F 13 Utility routine: DESCRBLK 03848 00000000 1495 VFD 0,1,1,0 IDX , UDIR1, UDIR2, SYS 0384C 00000002 1496 VFD 2,2,2,2 SAF , LRAF , SRAF , RAFD 03850 00000002 1497 VFD 0,1,2,2 AFT , ASLB , FSLB , CCB 03854 00000003 1498 VFD 2,1,0,3 CODED, AUTLB, FREE , ? 1499 00003855 1500 MSGTABLE LABEL 03855 20426C6F 1501 TEXTZ " Block \H1,6\ is \C2\." 0385B 20426C6F 1502 TEXTZ " Block \H1,6\ is \C2\ for account \S3\.\R4\" 03866 20426C6F 1503 TEXTZ " Block \H1,6\ is \C2\ for account \S3\.\R4\, fsn \H5,3\\H6\." 03876 20426C6F 1504 TEXTZ " Block \H1,6\ \C2\." 0387B 00000000 1505 VFD 0 1506 0000387C 1507 FBITABLE LABEL descriptions of FBI types 0387C 46424920 1508 TEXTZ "FBI type zero" 00 03880 74686520 1509 TEXTZ "the pack label" 01 03884 74686520 1510 TEXTZ "the bad tracks block" 02 0388A 74686520 1511 TEXTZ "the bootstrap block" 03 0388F 74686520 1512 TEXTZ "the volume label" 04 03894 74686520 1513 TEXTZ "the substitution block" 05 0389A 61207365 1514 TEXTZ "a security block" 06 0389F 616E2041 1515 TEXTZ "an ADT block" 07 038A3 616E2049 1516 TEXTZ "an IDX block" 08 038A7 74686520 1517 TEXTZ "the user directory" 09 038AC 61205544 1518 TEXTZ "a UDIR2 block" 0A 038B0 61207377 1519 TEXTZ "a swapping block" 0B 038B5 61205341 1520 TEXTZ "a SAF block" 0C 038B8 61205241 1521 TEXTZ "a RAF major access block" 0D 038BF 61205241 1522 TEXTZ "a RAF minor access block" 0E 038C6 61205241 1523 TEXTZ "a RAF data block" 0F 038CB 616E2041 1524 TEXTZ "an AFT block" 10 038CF 61207368 1525 TEXTZ "a share list block" 11 038D4 61207368 1526 TEXTZ "a share list block" 12 038D9 6120636F 1527 TEXTZ "a code control block" 13 038DF 6120636F 1528 TEXTZ "a code data block" 14 038E4 616E2061 1529 TEXTZ "an auth list block" 15 038E9 61206672 1530 TEXTZ "a free block" 16 038ED 756E6465 1531 TEXTZ "undefined FBI type" 038F2 00000000 1532 VFD 0 1533 +DESCRBLK 00003824 F 13 1452 1459= +FBIACCT 00168805 F 13 1483a +FBIBUFF 000030D2 F 13 1460a 1478a +FBIPROJ 00168807 F 13 1484a +FBISERNO 00168808 F 13 1485a 1486a FBITABLE 0000387C F 13 1476a 1507= +FBITFREE 0000007F F 13 1462 +FBITYPE 00088080 F 13 1461 +FINDTEXTZ 000035BB F 13 1469 1474 +INBLOCK 0000303B F 13 1481a MSGNUMS 0000383D F 13 1470 1493= MSGPTR 0000305C F 13 1454= 1472s 1487a MSGTABLE 00003855 F 13 1471a 1500= NOTFREE 0000382A F 13 1463j 1466= +VARS 0000305C F 13 1454e +VPREPOUT 000013F9 F 13 1480 1534 END DESCRBLK routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 58 (PEEK&POKEUTL) F 13 Utility routine: CRLINFEED 1537 1538 ********************************************************************************** 1539 * * 1540 * CRLINFEED. * 1541 * Output a carriage return and a line feed to * 1542 * the standard output device. * 1543 * Call: * 1544 * CALLNP CRLINFEED * 1545 * * 1546 * Eats R0,R3 * 1547 * * 1548 ********************************************************************************** 1549 1550 BLOCK CRLINFEED routine 1551 ENTRY CRLINFEED 1552 1553 BEGFRAME 1554 ENDFRAME 1555 038F3 DD5F8001 6 STAK 1556 CRLINFEED ENTRNP PUSH 038F4 DC1013F9 @ 1557 CALL @VPREPOUT 038F5 4000308D 1558 PARL CRLINEFD 038F6 DC40397A 1559 CALLNP MORECHK check for a full page 038F7 5D1F8001 6 STAK 1560 LEAVE POP 1561 * --- 1562 +CRLINEFD 0000308D F 13 1558a +CRLINFEED 000038F3 F 13 1551 1556= +MORECHK UUUUUUUU F 13 1559 +VPREPOUT 000013F9 F 13 1557 1563 END CRLINFEED routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 59 (PEEK&POKEUTL) F 13 Utility routine: GETABYTE 1566 1567 ********************************************************************************** 1568 * * 1569 * GETABYTE. * 1570 * This routine will get the next record byte * 1571 * Call: * 1572 * CALLNP GETABYTE * 1573 * * 1574 * R0 - on exit contains the byte requested * 1575 * Eats R1, R3:R4 * 1576 * * 1577 ********************************************************************************** 1578 1579 BLOCK GETABYTE routine 1580 ENTRY GETABYTE 1581 1582 BEGFRAME 00178801 6 BASE 1583 SAVER2 BSS 1 holds the record length 1584 ENDFRAME 1585 038F8 DD5F8002 6 STAK 1586 GETABYTE ENTRNP PUSH 038F9 BC403090 1 1587 INCL R1 CHARDISP 000038FA 1588 CHECKAGAIN LABEL 038FA 64441000 1 IMM 1589 CPR R1 CPP 038FB FE0638FE 1590 JGE CROSSBNDS crossed a page boundary 1591 * \ / 038FC 603230FF 0 1 @ 1592 LD R0 @CHARPTR(R1) get the byte 038FD 5D1F8002 6 STAK 1593 LEAVE POP 1594 * --- 1595 000038FE 1596 CROSSBNDS LABEL 038FE 10441000 1 IMM 1597 SUB R1 CPP find displacement in next page 038FF E4403090 1 1598 ST R1 CHARDISP save for now 03900 E4978801 2 6 BASE 1599 ST R2 SP,SAVER2 save R2 03901 384030D2 1 1600 LEA R1 FBIBUFF address of the FBI buffer 03902 60085180 0 1 ZBM 1601 LD R0 R1,FBIFLINK get the address of the next block to read in 03903 DC4039DB 1602 CALLNP READIN go get it 03904 60403090 1 1603 LD R1 CHARDISP retrieve the block displacement 03905 60978801 2 6 BASE 1604 LD R2 SP,SAVER2 restore R2 03906 FE0E38FA 1605 JMP CHECKAGAIN make sure record is in this block 1606 * --- 1607 +CHARDISP 00003090 F 13 1587s 1598s 1603 +CHARPTR 000030FF F 13 1592 CHECKAGAIN 000038FA F 13 1588= 1605j +CPP 00001000 F 13 1589 1597 CROSSBNDS 000038FE F 13 1590j 1596= +FBIBUFF 000030D2 F 13 1600a +FBIFLINK 00089180 F 13 1601 +GETABYTE 000038F8 F 13 1580 1586= +READIN UUUUUUUU F 13 1602 SAVER2 00178801 F 13 1583= 1599s 1604 1608 END GETABYTE routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 60 (PEEK&POKEUTL) F 13 Utility routine: HEADERCK 1611 1612 ********************************************************************************** 1613 * * 1614 * HEADERCK. * 1615 * This routine outputs the appropriate headers to the * 1616 * standard output device. * 1617 * Call: * 1618 * CALLNP HEADERCK * 1619 * * 1620 * Eats R0 * 1621 * * 1622 ********************************************************************************** 1623 1624 BLOCK HEADERCK routine 1625 ENTRY HEADERCK 1626 1627 BEGFRAME 1628 ENDFRAME 1629 03907 DD5F8001 6 STAK 1630 HEADERCK ENTRNP PUSH 03908 6000309D 0 1631 LD R0 STARTBLK 03909 FA02390E 0 1632 JEQZ R0 EXIT no blocks to be printed out 1633 * \ / 0390A 6400309C 0 1634 CPR R0 STARTREC 0390B FE02390E 1635 JEQ EXIT no header if records are being printed also 1636 * \ / 0390C DC1013F9 @ 1637 CALL @VPREPOUT 0390D 4000390F 1638 PARL BLKHEADER 1639 * \ / 0000390E 1640 EXIT LABEL 0390E 5D1F8001 6 STAK 1641 LEAVE POP 1642 * --- 1643 0390F 20426C6F 1644 BLKHEADER TEXTZ " Blocks " 1645 BLKHEADER 0000390F F 13 1638a 1644= EXIT 0000390E F 13 1632j 1635j 1640= +HEADERCK 00003907 F 13 1625 1630= +STARTBLK 0000309D F 13 1631 +STARTREC 0000309C F 13 1634 +VPREPOUT 000013F9 F 13 1637 1646 END HEADERCK routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 61 (PEEK&POKEUTL) F 13 Utility routine: INITIALIZE 1649 1650 ********************************************************************************** 1651 * * 1652 * INITIALIZE. * 1653 * This routine sets up counters and flags used * 1654 * by SSCAN. * 1655 * Call: * 1656 * CALLNP INITIALIZE * 1657 * * 1658 * Eats R0:R1, R3 * 1659 * * 1660 ********************************************************************************** 1661 1662 BLOCK INITIALIZE routine 1663 ENTRY INITIALIZE 1664 1665 BEGFRAME 1666 ENDFRAME 1667 03912 DD5F8001 6 STAK 1668 INITIALIZE ENTRNP PUSH 03913 EC00308E 1669 STZ BLKMSGON say no block messages for now 03914 D140308F 1670 STMW BLOCKCNT initialize the relative block number 03915 D1403090 1671 STMW CHARDISP initialize the offset within the current block 03916 EC003094 1672 STZ HDRBLOCK clear out 03917 EC003095 1673 STZ HDRDISP 03918 EC003096 1674 STZ PREVBLOCK first backward link should be zero 03919 EC00303B 1675 STZ INBLOCK zero out block number 0391A EC003099 1676 STZ NUMMES number of messages/line 0391B EC00309A 1677 STZ RECMSGON say no block messages for now 0391C EC00309B 1678 STZ RECORDSIZE zero out the record link's length 0391D EC00309D 1679 STZ STARTBLK when to start listing new blocks loaded 0391E EC00309E 1680 STZ STARTLIST when to start listing the file text 0391F EC00309C 1681 STZ STARTREC when to start listing record starts 03920 60040005 0 IMM 1682 LD R0 5 03921 E4003098 0 1683 ST R0 LINECNT account for the file information 03922 DC403659 1684 CALLNP FINDFIL go find the file 03923 FE0E3451 1685 JMP BADFORM 1686 * \ / R3 = 0 iff not found, else FDE 03924 FAC23929 3 1687 JEQZ R3 EXIT did not find the file, do not set INBLOCK 1688 * \ / 03925 6216C810 013 BASE 1689 LD2 R0 R3,FDEPP get SAF end byte and block pointers 03926 E6003092 01 1690 ST2 R0 ENDBYTE just save for now 03927 6008D185 0 3 ZBM 1691 LD R0 R3,FDDA get the block number to be read in 03928 E400303B 0 1692 ST R0 INBLOCK set the default values to the first block 1693 * \ / 00003929 1694 EXIT LABEL 03929 5D1F8001 6 STAK 1695 LEAVE POP 1696 * --- 1697 +BADFORM 00003451 F 13 1685j +BLKMSGON 0000308E F 13 1669s +BLOCKCNT 0000308F F 13 1670s +CHARDISP 00003090 F 13 1671s +ENDBYTE 00003092 F 13 1690s EXIT 00003929 F 13 1687j 1694= +FDDA 0008D185 F 13 1691 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 62 (PEEK&POKEUTL) F 13 Utility routine: INITIALIZE +FDEPP 0016C810 F 13 1689 +FINDFIL 00003659 F 13 1684 +HDRBLOCK 00003094 F 13 1672s +HDRDISP 00003095 F 13 1673s +INBLOCK 0000303B F 13 1675s 1692s +INITIALIZE 00003912 F 13 1663 1668= +LINECNT 00003098 F 13 1683s +NUMMES 00003099 F 13 1676s +PREVBLOCK 00003096 F 13 1674s +RECMSGON 0000309A F 13 1677s +RECORDSIZE 0000309B F 13 1678s +STARTBLK 0000309D F 13 1679s +STARTLIST 0000309E F 13 1680s +STARTREC 0000309C F 13 1681s 1698 END INITIALIZE routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 63 (PEEK&POKEUTL) F 13 Utility routine: LISTREC 1701 1702 ********************************************************************************** 1703 * * 1704 * This routine outputs one record of a SAF file, in * 1705 * ASCII, to the standard output device. If the record happens * 1706 * to be longer than 77 characters the record is truncated and * 1707 * three dots are appended to indicate that truncation has * 1708 * occurred. * 1709 * Call: * 1710 * CALLNP LISTREC * 1711 * * 1712 * Stack Required: 1 * 1713 * Registers Used: R0:R4 * 1714 * * 1715 ********************************************************************************** 1716 1717 BLOCK LISTREC routine 1718 ENTRY LISTREC 1719 ENTRY RECORDLEN 1720 1721 BEGFRAME 1722 ENDFRAME 1723 0392A 6CC8309B 1724 RECORDLEN PTR RECORDSIZE/FILRLEN pointer to record length 0392B 2E2E2E00 1725 CONTINUE TEXTZ "..." indicates record truncated 00000003 ABS 1726 CONTINUELN EQU 03 length of above string 1727 0392C DD5F8001 6 STAK 1728 LISTREC ENTRNP PUSH 0392D 600030BC 0 1729 LD R0 PCNTROLCHR initialize the listing buffer 0392E 60440050 1 IMM 1730 LD R1 OUTBUFLEN+1 length of buffer 0392F DA000820 0 1 1731 FILLI R0 R1 BLANK fill the buffer 1732 * \ / 03930 6050392A 1 @ 1733 LD R1 @RECORDLEN pick up the record length 03931 60003090 0 1734 LD R0 CHARDISP current displacement within the page 03932 18124000 0 1 REG 1735 ADD R0 R1 calculate displacement to record end 03933 64041000 0 IMM 1736 CPR R0 CPP check if beyond current page 03934 FE063948 1737 JGE CROSSPAGE new record causes us to cross a page boundary 1738 * \ / 03935 DC403969 1739 CALLNP MOVEIT move new record into the output buffer 03936 6010392A 0 @ 1740 LD R0 @RECORDLEN get the original record length 03937 98003090 0 1741 ADDM R0 CHARDISP update the current page displacement 1742 * \ / 1743 * R0 <= MUST have current record length at this point!!! 00003938 1744 WRITEIT LABEL R0 <= must have current record length 03938 6404004D 0 IMM 1745 CPR R0 OUTBUFLEN-2 check if record did overflow buffer? 03939 FE08393E 1746 JLT NOOVRFLOW jump if not 0393A 3800392B 0 1747 LEA R0 CONTINUE truncation indicator 0393B 60440003 1 IMM 1748 LD R1 CONTINUELN length of string 0393C 608030BB 2 1749 LD R2 PENDOUTBUF destination address 0393D DA880800 2 01 1750 MOVE R2 R0 R1 move string to the output buffer 1751 * \ / 1752 0000393E 1753 NOOVRFLOW LABEL 0393E 600030BB 0 1754 LD R0 PENDOUTBUF generate address of the buffer end 0393F 38160003 0 0 CACH 1755 LEA R0 CACH R0,3 I mean the absolute end 03940 70440050 1 IMM 1756 LDN R1 OUTBUFLEN+1 total buffer length (negate) 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 64 (PEEK&POKEUTL) F 13 Utility routine: LISTREC 03941 DA1E0820 0 1 1757 SRCHNI R0 R1 BLANK look for the first non-blank 03942 70524000 1 1 REG 1758 LDN R1 R1 convert to positive length 1759 * \ / 03943 608030BC 2 1760 LD R2 PCNTROLCHR destination of the record 03944 DC5013F4 @ 1761 CALLNP @VWRITELINE write the buffer 03945 FA083947 0 1762 JLTZ R0 BADWRITE bad write, do nothing for now 03946 DC40397A 1763 CALLNP MORECHK check for full screen 1764 * \ / 1765 00003947 1766 BADWRITE LABEL ONLY FOR NOW, PLEASE FIX ME LATER!!! 03947 5D1F8001 6 STAK 1767 LEAVE POP 1768 * --- 1769 00003948 1770 CROSSPAGE LABEL 03948 10040FFF 0 IMM 1771 SUB R0 CPP-1 find out how far past the page we went 03949 E4003097 0 1772 ST R0 LENREMAIN this is how much of the record will be left 0394A 10520000 1 0 REG 1773 SUB R1 R0 this is how much to move this time 0394B DC403969 1774 CALLNP MOVEIT move the partial record 0394C E480309F 2 1775 ST R2 LASTADDR save the last buffer address 1776 * \ / 0394D 380030D2 0 1777 LEA R0 FBIBUFF pointer to current FBI buffer 0394E 60081180 0 0 ZBM 1778 LD R0 R0,FBIFLINK get the pointer to the next block in the file 0394F DC4039DB 1779 CALLNP READIN read the block in 03950 D1403090 1780 STMW CHARDISP initialize the character displacement 1781 * \ / 03951 604030BB 1 1782 LD R1 PENDOUTBUF address of the end buffer position 03952 604A6310 1 1 CBM 1783 LD R1 R1/BITS 17:1 convert to character offset 03953 6080309F 2 1784 LD R2 LASTADDR next usable buffer position 03954 104AA310 1 2 CBM 1785 SUB R1 R2/BITS 17:1 this is the buffer remaining 03955 50403097 1 1786 MIN R1 LENREMAIN prevent underflow and overflow 03956 B0403097 1 1787 RSBM R1 LENREMAIN what remains to get to the record end 03957 98403090 1 1788 ADDM R1 CHARDISP new character displacement 03958 600030FF 0 1789 LD R0 CHARPTR source begins at the page head 03959 DA880800 2 01 1790 MOVE R2 R0 R1 fill in remainder of the record 1791 * \ / 1792 0000395A 1793 FNDTRLREC LABEL 0395A 6010392A 0 @ 1794 LD R0 @RECORDLEN get record length for jump to WRITEIT 0395B 60403097 1 1795 LD R1 LENREMAIN retrieve remaining length of record 0395C FA4A3938 1 1796 JLEZ R1 WRITEIT nothing remains, jump to write record 0395D B8403090 1 1797 ADDB R1 CHARDISP update current character displacement 0395E 64441000 1 IMM 1798 CPR R1 CPP record end within this page? 0395F FE083938 1799 JLT WRITEIT it is, jump to write record 1800 * \ / 03960 10403097 1 1801 SUB R1 LENREMAIN recalculate the current character displacement 03961 30440FFF 1 IMM 1802 RSB R1 CPP-1 amount of characters left in this page 03962 B0403097 1 1803 RSBM R1 LENREMAIN reduce the number of characters remaining 1804 * \ / 03963 380030D2 0 1805 LEA R0 FBIBUFF pointer to current FBI buffer 03964 60081180 0 0 ZBM 1806 LD R0 R0,FBIFLINK get the pointer to the next block in the file 03965 DC4039DB 1807 CALLNP READIN read the block in 03966 D1403090 1808 STMW CHARDISP initialize the character displacement 03967 FE0E395A 1809 JMP FNDTRLREC continue to find the record end 1810 * --- 1811 BADWRITE 00003947 F 13 1762j 1766= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 65 (PEEK&POKEUTL) F 13 Utility routine: LISTREC +BLANK 00000020 F 13 1731 1757 +CHARDISP 00003090 F 13 1734 1741s 1780s 1788s 1797s 1808s +CHARPTR 000030FF F 13 1789 CONTINUE 0000392B F 13 1725= 1747a CONTINUELN 00000003 F 13 1726= 1748 +CPP 00001000 F 13 1736 1771 1798 1802 CROSSPAGE 00003948 F 13 1737j 1770= +FBIBUFF 000030D2 F 13 1777a 1805a +FBIFLINK 00089180 F 13 1778 1806 +FILRLEN 00001B30 F 13 1724a FNDTRLREC 0000395A F 13 1793= 1809j +LASTADDR 0000309F F 13 1775s 1784 +LENREMAIN 00003097 F 13 1772s 1786 1787s 1795 1801 1803s +LISTREC 0000392C F 13 1718 1728= +MORECHK UUUUUUUU F 13 1763 +MOVEIT UUUUUUUU F 13 1739 1774 NOOVRFLOW 0000393E F 13 1746j 1753= +OUTBUFLEN 0000004F F 13 1730 1745 1756 +PCNTROLCHR 000030BC F 13 1729 1760 +PENDOUTBUF 000030BB F 13 1749 1754 1782 +READIN UUUUUUUU F 13 1779 1807 +RECORDLEN 0000392A F 13 1719 1724= 1733 1740 1794 +RECORDSIZE 0000309B F 13 1724a +VWRITELINE 000013F4 F 13 1761 WRITEIT 00003938 F 13 1744= 1796j 1799j 1812 END LISTREC routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 66 (PEEK&POKEUTL) F 13 Utility routine: MOVEIT 1815 1816 ********************************************************************************** 1817 * * 1818 * This routine moves a SAF record from a block into a * 1819 * output buffer for listing. It also sets the forms character * 1820 * depending on the record type. * 1821 * Call: * 1822 * LD R1 * 1823 * CALLNP MOVEIT * 1824 * * 1825 * Stack Required: 1 * 1826 * Registers Used: R0:R2 * 1827 * * 1828 ********************************************************************************** 1829 1830 BLOCK MOVEIT routine 1831 ENTRY MOVEIT 1832 1833 BEGFRAME 1834 ENDFRAME 1835 03968 4108309B 1836 RECORDTYP PTR RECORDSIZE/FILTYPE pointer to record file type 1837 03969 DD5F8001 6 STAK 1838 MOVEIT ENTRNP PUSH 0396A 608030BA 2 1839 LD R2 PTROUTBUF assume this is the destination address 0396B 60103968 0 @ 1840 LD R0 @RECORDTYP get the current record type 0396C 64040001 0 IMM 1841 CPR R0 RTYPETEXTF is it a text with forms control record? 0396D FE0C3970 1842 JNE CHKBINARY if not see if binary record type 0396E 608030BC 2 1843 LD R2 PCNTROLCHR write over control character position 0396F FE0E3974 1844 JMP CALCSOURCE jump to calculate source address 1845 * --- 1846 00003970 1847 CHKBINARY LABEL 03970 64040002 0 IMM 1848 CPR R0 RTYPEBIN is this a binary record? 03971 FE0C3974 1849 JNE CALCSOURCE if not, just treat like text record 03972 6004002A 0 IMM 1850 LD R0 "*" forms control for no line advance 03973 E41030BC 0 @ 1851 ST R0 @PCNTROLCHR set into control character position 1852 * \ / 1853 00003974 1854 CALCSOURCE LABEL 03974 60003090 0 1855 LD R0 CHARDISP current character displacement 03975 18040001 0 IMM 1856 ADD R0 1 advance past the end of record header 03976 383030FF 0 0 @ 1857 LEA R0 @CHARPTR(R0) this is the source address 03977 5044004D 1 IMM 1858 MIN R1 OUTBUFLEN-2 let's not let it get too large 03978 DA880800 2 01 1859 MOVE R2 R0 R1 move the string in 03979 5D1F8001 6 STAK 1860 LEAVE POP exit this routine 1861 * --- 1862 CALCSOURCE 00003974 F 13 1844j 1849j 1854= +CHARDISP 00003090 F 13 1855 +CHARPTR 000030FF F 13 1857a CHKBINARY 00003970 F 13 1842j 1847= +FILTYPE 00001040 F 13 1836a +MOVEIT 00003969 F 13 1831 1838= +OUTBUFLEN 0000004F F 13 1858 +PCNTROLCHR 000030BC F 13 1843 1851s 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 67 (PEEK&POKEUTL) F 13 Utility routine: MOVEIT +PTROUTBUF 000030BA F 13 1839 +RECORDSIZE 0000309B F 13 1836a RECORDTYP 00003968 F 13 1836= 1840 +RTYPEBIN 00000002 F 13 1848 +RTYPETEXTF 00000001 F 13 1841 1863 END MOVEIT routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 68 (PEEK&POKEUTL) F 13 Utility routine: MORECHK 1866 1867 ********************************************************************************** 1868 * * 1869 * MORECHK. * 1870 * This routine checks for a full screen of data. * 1871 * If the screen is full a "---More---" message is printed out * 1872 * and processing will not continue until a carriage return * 1873 * or a control "W" is entered. If a control "W" is found, * 1874 * then control is transfered to peek&poke's mainline. If * 1875 * anything else is found, it will be treated as a command * 1876 * to peek&poke and control is transferred to the appropriate * 1877 * area within peek&poke. * 1878 * Call: * 1879 * CALLNP MORECHK * 1880 * * 1881 * Eats R0, R4 * 1882 * * 1883 ********************************************************************************** 1884 1885 BLOCK MORECHK routine 1886 ENTRY MORECHK 1887 1888 BEGFRAME 00178801 6 BASE 1889 REGSAVE BSS 2 register temps 1890 ENDFRAME 1891 00000014 ABS 1892 MAXLINE EQU 20 max lines per printed page 00000017 ABS 1893 NOMORE EQU 017 ascii control "W" 1894 0397A DD5F8003 6 STAK 1895 MORECHK ENTRNP PUSH 0397B E6578801 126 BASE 1896 ST2 R1 SP,REGSAVE save the registers 0397C BC003098 0 1897 INCL R0 LINECNT 0397D 64040014 0 IMM 1898 CPR R0 MAXLINE 0397E FE083999 1899 JLT EXIT not a full page yet 1900 * \ / 0397F DC1013F9 @ 1901 CALL @VPREPOUT 03980 4000399A 1902 PARL MOREMES 03981 6090300F 2 @ 1903 LD R2 @PROMPTPTR check for odd or even prompt 03982 60A43010 2 2 1904 LD R2 PROMPTTAB(R2) pick appropriate prompt message 03983 DC1013F9 @ 1905 CALL @VPREPOUT 03984 40168400 2 @R 1906 PARL @R2 03985 D000300E 1907 INC PROMPTCNT 1908 * \ / 03986 60440050 1 IMM 1909 LD R1 BUFL 03987 6084301B 2 IMM 1910 LD R2 ADR BUF 03988 DC5013F3 @ 1911 CALLNP @VREADLINE read user's input 03989 30440050 1 IMM 1912 RSB R1 BUFL 0398A 64840017 2 IMM 1913 CPR R2 NOMORE was input a control "W"? 0398B FE023994 1914 JEQ MAINCNTRL return to peek&poke's mainline 1915 * \ / 0398C FA4A3995 1 1916 JLEZ R1 NORMAL ignore zero length lines 0398D EC32302F 1 @ 1917 STZ @BUFP(R1) place terminator at the end 0398E 6104301B 4 IMM 1918 LD R4 ADR BUF pointer to the buffer 0398F DC5013F8 @ 1919 CALLNP @VFETCHITMH fetch the user's input 03990 FA823995 2 1920 JEQZ R2 NORMAL contine normal processing 1921 * \ / 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 69 (PEEK&POKEUTL) F 13 Utility routine: MORECHK 03991 EDC03098 1922 STW LINECNT reset the line counter 03992 39C03462 7 1923 LEA R7 SSCANRTN process the new command 03993 FE0E3999 1924 JMP EXIT 1925 * --- 1926 00003994 1927 MAINCNTRL LABEL 03994 39C03453 7 1928 LEA R7 MC prepare to return to peek&poke's mainline 1929 * \ / 00003995 1930 NORMAL LABEL 03995 DC1013F9 @ 1931 CALL @VPREPOUT 03996 4000308D 1932 PARL CRLINEFD output a blank line 03997 EDC03098 1933 STW LINECNT reset the line counter 03998 62578801 126 BASE 1934 LD2 R1 SP,REGSAVE restore the registers 00003999 1935 EXIT LABEL 03999 5D1F8003 6 STAK 1936 LEAVE POP 1937 * --- 1938 0399A 202D2D2D 1939 MOREMES TEXTZ " --- More ---" 1940 +BUF 0000301B F 13 1910a 1918a +BUFL 00000050 F 13 1909 1912 +BUFP 0000302F F 13 1917s +CRLINEFD 0000308D F 13 1932a EXIT 00003999 F 13 1899j 1924j 1935= +LINECNT 00003098 F 13 1897s 1922s 1933s MAINCNTRL 00003994 F 13 1914j 1927= MAXLINE 00000014 F 13 1892= 1898 +MC 00003453 F 13 1928a +MORECHK 0000397A F 13 1886 1895= MOREMES 0000399A F 13 1902a 1939= NOMORE 00000017 F 13 1893= 1913 NORMAL 00003995 F 13 1916j 1920j 1930= +PROMPTCNT 0000300E F 13 1907s +PROMPTPTR 0000300F F 13 1903 +PROMPTTAB 00003010 F 13 1904 REGSAVE 00178801 F 13 1889= 1896s 1934 +SSCANRTN 00003462 F 13 1923a +VFETCHITMH 000013F8 F 13 1919 +VPREPOUT 000013F9 F 13 1901 1905 1931 +VREADLINE 000013F3 F 13 1911 1941 END MORECHK routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 70 (PEEK&POKEUTL) F 13 Utility routine: NEXTPARM 1944 1945 ********************************************************************************** 1946 * * 1947 * NEXTPARM. * 1948 * This routine reads in the user's input and * 1949 * processes it. * 1950 * Call: * 1951 * CALLNP NEXTPARM * 1952 * * 1953 * Eats R4:R5 * 1954 * * 1955 ********************************************************************************** 1956 1957 BLOCK NEXTPARM routine 1958 ENTRY NEXTPARM 1959 1960 BEGFRAME 1961 ENDFRAME 1962 0399E DD5F8001 6 STAK 1963 NEXTPARM ENTRNP PUSH 0399F 61003076 4 1964 LD R4 NEXTPOS where to get the next character from 039A0 DC5013F8 @ 1965 CALLNP @VFETCHITMH get a parameter 000039A1 1966 GETPARM LABEL 039A1 F67839BE 1 1967 JBT R1/TEOL READN jump if we are thru parsing the command 039A2 60C40005 3 IMM 1968 LD R3 MAXOPTIONS-1 setup for table search 1969 * \ / 000039A3 1970 SRCHPARAM LABEL 039A3 64A639B5 2 3 1971 CPR R2 OPTIONSTAB(R3) do we have a match 039A4 FE0239A7 1972 JEQ FNDPARAM jump if symbol matches 039A5 FAE639A3 3 1973 JDR R3 SRCHPARAM continue the search 039A6 FE0E3451 1974 JMP BADFORM bogus symbol! 1975 * --- 1976 000039A7 1977 FNDPARAM LABEL 039A7 60CAC1F0 3 3 CBM 1978 LD R3 R3/BITS 0:30 mod index by 2 039A8 5CA639BB 3 1979 LDPC PROCESSTAB(R3) jump to process parameter 1980 * --- 1981 000039A9 1982 PROCESSLIST LABEL 039A9 6000309D 0 1983 LD R0 STARTBLK check if BLOCK parameter given 039AA 7C00309C 0 1984 IOR R0 STARTREC or if the RECORDS parameter specified 039AB FA0C3451 0 1985 JNEZ R0 BADFORM error if either already given 039AC 3940309E 5 1986 LEA R5 STARTLIST pointer for LIST option 039AD FE0E39B3 1987 JMP THISTYPE go process the option 1988 * --- 1989 000039AE 1990 PROCESSRECS LABEL 039AE 3940309C 5 1991 LEA R5 STARTREC pointer for RECORDS option 039AF FE0E39B1 1992 JMP CHKLIST see if LIST option already given 1993 * --- 1994 000039B0 1995 PROCESSBLKS LABEL 039B0 3940309D 5 1996 LEA R5 STARTBLK pointer for BLOCKS option 1997 * \ / 000039B1 1998 CHKLIST LABEL 039B1 6000309E 0 1999 LD R0 STARTLIST se if LISt option already given 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 71 (PEEK&POKEUTL) F 13 Utility routine: NEXTPARM 039B2 FA0C3451 0 2000 JNEZ R0 BADFORM bad format if so! 2001 * \ / 000039B3 2002 THISTYPE LABEL 039B3 DC4039D2 2003 CALLNP PROCESPARM go process the option 039B4 FE0E39A1 2004 JMP GETPARM go pick up the next parameter 2005 * --- 2006 000039B5 2007 OPTIONSTAB LABEL 039B5 86470000 2008 PAK6 L 039B6 894A3D80 2009 PAK6 LIST 039B7 0000000B 2010 VFD 0B 039B8 4CB21EA5 2011 PAK6 BLOCKS 039B9 AAE60000 2012 PAK6 R 039BA AD3D42AE 2013 PAK6 RECORD 00000006 ABS 2014 MAXOPTIONS EQU DISPW OPTIONSTAB 2015 000039BB 2016 PROCESSTAB LABEL 039BB 000039A9 2017 VFD ADR (PROCESSLIST) process LIST parameter 039BC 000039B0 2018 VFD ADR (PROCESSBLKS) process BLOCKS parameter 039BD 000039AE 2019 VFD ADR (PROCESSRECS) process RECORDS parameter 2020 000039BE 2021 READN LABEL 039BE 6040303B 1 2022 LD R1 INBLOCK begining value for all defaults 039BF 6000309E 0 2023 LD R0 STARTLIST get LIST option given, if any 039C0 FA0639C3 0 2024 JGEZ R0 BLKCHECK jump to leave LIST option as is 039C1 E440309E 1 2025 ST R1 STARTLIST set to first block of file 039C2 FE0E39C9 2026 JMP ALLDONE just exit from here 2027 * --- 2028 000039C3 2029 BLKCHECK LABEL 039C3 6000309D 0 2030 LD R0 STARTBLK get BLOCKS option given, if any 039C4 FA0639C6 0 2031 JGEZ R0 RECCHECK jump to leave BLOCKS option as is 039C5 E440309D 1 2032 ST R1 STARTBLK set to first block of the file 2033 * \ / 000039C6 2034 RECCHECK LABEL 039C6 6000309C 0 2035 LD R0 STARTREC get RECORDS option given, if any 039C7 FA0639C9 0 2036 JGEZ R0 ALLDONE jump to leave RECORDS option as is 039C8 E440309C 1 2037 ST R1 STARTREC set to first block of the file 2038 * \ / 000039C9 2039 ALLDONE LABEL 039C9 5D1F8001 6 STAK 2040 LEAVE POP 2041 * --- 2042 ALLDONE 000039C9 F 13 2026j 2036j 2039= +BADFORM 00003451 F 13 1974j 1985j 2000j BLKCHECK 000039C3 F 13 2024j 2029= CHKLIST 000039B1 F 13 1992j 1998= FNDPARAM 000039A7 F 13 1972j 1977= GETPARM 000039A1 F 13 1966= 2004j +INBLOCK 0000303B F 13 2022 MAXOPTIONS 00000006 F 13 1968 2014= +NEXTPARM 0000399E F 13 1958 1963= +NEXTPOS 00003076 F 13 1964 OPTIONSTAB 000039B5 F 13 1971 2007= 2014e +PROCESPARM UUUUUUUU F 13 2003 PROCESSBLKS 000039B0 F 13 1995= 2018a 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 72 (PEEK&POKEUTL) F 13 Utility routine: NEXTPARM PROCESSLIST 000039A9 F 13 1982= 2017a PROCESSRECS 000039AE F 13 1990= 2019a PROCESSTAB 000039BB F 13 1979 2016= READN 000039BE F 13 1967j 2021= RECCHECK 000039C6 F 13 2031j 2034= SRCHPARAM 000039A3 F 13 1970= 1973j +STARTBLK 0000309D F 13 1983 1996a 2030 2032s +STARTLIST 0000309E F 13 1986a 1999 2023 2025s +STARTREC 0000309C F 13 1984 1991a 2035 2037s +TEOL 00003810 F 13 1967j THISTYPE 000039B3 F 13 1987j 2002= +VFETCHITMH 000013F8 F 13 1965 2043 END NEXTPARAM routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 73 (PEEK&POKEUTL) F 13 Utility routine: NUMMESCHK 2046 2047 ********************************************************************************** 2048 * * 2049 * NUMMESCHK. * 2050 * Check to see if another message will fit * 2051 * on the current output line. * 2052 * Call: * 2053 * CALL NUMMESCHK * 2054 * PARVL * 2055 * * 2056 * Eats R0, R3 * 2057 * * 2058 ********************************************************************************** 2059 2060 BLOCK NUMMESCHK routine 2061 ENTRY NUMMESCHK 2062 2063 BEGFRAME 2064 ENDFRAME 2065 039CA DD1F8001 6 STAK 2066 NUMMESCHK ENTR PUSH 039CB C0520000 0 REG 2067 STPVL R0 maximum items per line 039CC BCC03099 3 2068 INCL R3 NUMMES up the count of messages on this line 039CD 64D20000 3 0 REG 2069 CPR R3 R0 up against the limit 039CE FE0A39D1 2070 JLE WILLFIT another message will fit 2071 * \ / 039CF EDC03099 2072 STW NUMMES reset the counter 039D0 DC4038F3 2073 CALLNP CRLINFEED output a CR line feed 2074 * \ / 000039D1 2075 WILLFIT LABEL 039D1 5D1F8001 6 STAK 2076 LEAVE POP 2077 * --- 2078 +CRLINFEED 000038F3 F 13 2073 +NUMMES 00003099 F 13 2068s 2072s +NUMMESCHK 000039CA F 13 2061 2066= WILLFIT 000039D1 F 13 2070j 2075= 2079 END NUMMESCHK routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 74 (PEEK&POKEUTL) F 13 Utility routine: PROCESPARM 2082 2083 ********************************************************************************** 2084 * * 2085 * PROCESPARM. * 2086 * This routine checks the format of the parameters in the * 2087 * SSCAN command and sets internal flags accordingly. * 2088 * Call: * 2089 * LD R3 pointer to record or block start message variable * 2090 * LD R4 pointer to next parameter to process * 2091 * CALLNP PROCESPARM * 2092 * * 2093 ********************************************************************************** 2094 2095 BLOCK PROCESPARM routine 2096 ENTRY PROCESPARM 2097 2098 BEGFRAME 2099 ENDFRAME 2100 039D2 DD5F8001 6 STAK 2101 PROCESPARM ENTRNP PUSH 039D3 5C174400 5 @R 2102 CMZ @R5 039D4 FE0C3451 2103 JNE BADFORM bad format if already set 2104 * \ / 039D5 D1574400 5 @R 2105 STMW @R5 indicate that we have processed a record/block 039D6 DC5013F8 @ 2106 CALLNP @VFETCHITMH get the next parameter 039D7 F27E39DA 1 2107 JBF R1/TNUM EXIT1 if it is not a number then exit 2108 * \ / 039D8 E4974400 2 5 @R 2109 ST R2 @R5 set the RECORDS/BLOCKS message start variable 039D9 DC5013F8 @ 2110 CALLNP @VFETCHITMH get the next parameter 2111 * \ / 000039DA 2112 EXIT1 LABEL 039DA 5D1F8001 6 STAK 2113 LEAVE POP return 2114 * --- 2115 +BADFORM 00003451 F 13 2103j EXIT1 000039DA F 13 2107j 2112= +PROCESPARM 000039D2 F 13 2096 2101= +TNUM 00003E10 F 13 2107j +VFETCHITMH 000013F8 F 13 2106 2110 2116 END PROCESPARM routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 75 (PEEK&POKEUTL) F 13 Utility routine: READIN 2119 2120 ********************************************************************************** 2121 * * 2122 * READIN. * 2123 * This routine will read in the requested block. * 2124 * It will then make some checks to see if block messages * 2125 * are to be listed out. * 2126 * Call: * 2127 * LD R0 INBLOCK block to read in * 2128 * CALLNP READIN * 2129 * * 2130 * Reads the block into DATABLK and returns * 2131 * * 2132 * Eats R0:R4 * 2133 * * 2134 ********************************************************************************** 2135 2136 BLOCK READIN routine 2137 ENTRY READIN 2138 2139 BEGFRAME 2140 ENDFRAME 2141 0000000A ABS 2142 MAXBLKMES EQU 10 number of blocks per line 2143 039DB DD5F8001 6 STAK 2144 READIN ENTRNP PUSH 039DC E400303B 0 2145 ST R0 INBLOCK save the block number to be read in 039DD D000308F 2146 INC BLOCKCNT increment the relative block count 039DE 60845400 2 IMM 2147 LD R2 ADR DATABLK area to read into 039DF 60441000 1 IMM 2148 LD R1 CPP length of read 039E0 FE580000 2149 CFILL 00 first zero everything out for neatness 039E1 61003031 4 2150 LD R4 DISKCBP get the pointer to the disk control block 039E2 DC1013E0 @ 2151 CALL @VREAD 039E3 4140303B 2152 PARV INBLOCK the block number to be read in 039E4 41403017 2153 PARV PFDATABLK pointer to the area to read it into 039E5 410030D2 2154 PAR FBIBUFF where to put the FBI 039E6 4144000C IMM 2155 PARV FBITSAF make sure it is a SAF 039E7 40003A30 2156 PARL LERROR load error routine 039E8 380030D2 0 2157 LEA R0 FBIBUFF generate pointer to FBI buffer 039E9 60081182 0 0 ZBM 2158 LD R0 R0,FBIBLINK get value of backward link 039EA 64003096 0 2159 CPR R0 PREVBLOCK check if legitimate 039EB FE0239EF 2160 JEQ BLINKOK jump if it checks out 039EC DC1013F9 @ 2161 CALL @VPREPOUT tell user backward link is bad 039ED 4100303B 2162 PAR INBLOCK block that is bad 039EE 40003A22 2163 PARL BADBLNKMSG message to tell 2164 * \ / 2165 000039EF 2166 BLINKOK LABEL 039EF 6000303B 0 2167 LD R0 INBLOCK get current block 039F0 E4003096 0 2168 ST R0 PREVBLOCK and save for next time around 2169 * \ / 039F1 380030D2 0 2170 LEA R0 FBIBUFF generate pointer to FBI buffer 039F2 60081184 0 0 ZBM 2171 LD R0 R0,FBIRELBLK pick up relative block number 039F3 6400308F 0 2172 CPR R0 BLOCKCNT check to see if what expected 039F4 FE0239F8 2173 JEQ RELBLKOK jump if okay 039F5 DC1013F9 @ 2174 CALL @VPREPOUT tell user relative block number is bad 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 76 (PEEK&POKEUTL) F 13 Utility routine: READIN 039F6 4100303B 2175 PAR INBLOCK block that is bad 039F7 40003A17 2176 PARL RELBLKMSG message to tell 2177 * \ / 000039F8 2178 RELBLKOK LABEL 039F8 5C00309A 2179 CMZ RECMSGON is the record message flag set? 039F9 FE0C39FE 2180 JNE PRTBLKHDR if set print block header 039FA 6040309C 1 2181 LD R1 STARTREC block number to start printing records 039FB 6440303B 1 2182 CPR R1 INBLOCK is it time to print out records? 039FC FE0C3A07 2183 JNE NXTCHK see if the block messages are on 039FD EDC0309A 2184 STW RECMSGON remember to print out record starts 2185 * \ / 000039FE 2186 PRTBLKHDR LABEL 039FE 60003099 0 2187 LD R0 NUMMES check where we are on a line 039FF FA023A02 0 2188 JEQZ R0 NONEONLINE if at begining only advance one line 03A00 EC003099 2189 STZ NUMMES reset line item counter 03A01 DC4038F3 2190 CALLNP CRLINFEED this puts us at the next line 2191 * \ / 00003A02 2192 NONEONLINE LABEL 03A02 DC4038F3 2193 CALLNP CRLINFEED this should skip one line 03A03 DC1013F9 @ 2194 CALL @VPREPOUT call the output routine 03A04 4100303B 2195 PAR INBLOCK the block we are processing 03A05 40003A2C 2196 PARL RECBLKMSG message format 03A06 FE0E3A13 2197 JMP EXIT later days mate 2198 * --- 2199 00003A07 2200 NXTCHK LABEL 03A07 5C00308E 2201 CMZ BLKMSGON is the block message flag set? 03A08 FE0C3A0D 2202 JNE JUSTBLKS yes, therefore print them out 03A09 6040309D 1 2203 LD R1 STARTBLK block to start listing block messages 03A0A 6440303B 1 2204 CPR R1 INBLOCK compare it to the current block in 03A0B FE0C3A13 2205 JNE EXIT do nothing this pass 03A0C EDC0308E 2206 STW BLKMSGON turn on the block messages 2207 * \ / 00003A0D 2208 JUSTBLKS LABEL 03A0D DC0039CA 2209 CALL NUMMESCHK will another message fit? 03A0E 4044000A IMM 2210 PARVL MAXBLKMES maximum items per line 03A0F 384030D2 1 2211 LEA R1 FBIBUFF get the address of the FBI buffer 03A10 DC1013F9 @ 2212 CALL @VPREPOUT 03A11 41085181 1 ZBM 2213 PAR R1,FBIDA get the block number 03A12 40003A14 2214 PARL LOADMESS output the load message 2215 * \ / 00003A13 2216 EXIT LABEL 03A13 5D1F8001 6 STAK 2217 LEAVE POP return 2218 * --- 2219 03A14 2A5C4831 2220 LOADMESS TEXTZ "*\H1,6\ " 03A17 20426164 2221 RELBLKMSG TEXTZ " Bad relative block number, block = \H1,6\" 03A22 20426164 2222 BADBLNKMSG TEXTZ " Bad backwards SAF link, block = \H1,6\" 03A2C 20426C6F 2223 RECBLKMSG TEXTZ " Block = \H1,6\" 2224 2225 * Disk load error routine 2226 00003A30 2227 LERROR LABEL 03A30 64040002 0 IMM 2228 CPR R0 ECFBI 03A31 FE023A35 2229 JEQ NOTASAF file read in is not a SAF 2230 * \ / 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 77 (PEEK&POKEUTL) F 13 Utility routine: READIN 03A32 6040303B 1 2231 LD R1 INBLOCK load the block number 03A33 DC40350E 2232 CALLNP DISKERROUT tell him why it failed 03A34 FE0E3453 2233 JMP MC 2234 * --- 2235 2236 * File read in was not a SAF 2237 00003A35 2238 NOTASAF LABEL 03A35 384030D2 1 2239 LEA R1 FBIBUFF generate pointer to FBI 03A36 DC1013F9 @ 2240 CALL @VPREPOUT offline output writer 03A37 41085181 1 ZBM 2241 PAR R1,FBIDA get the block number 03A38 40003A3A 2242 PARL NOTASAFMES 03A39 FE0E3453 2243 JMP MC 2244 * --- 2245 03A3A 20464249 2246 NOTASAFMES TEXTZ " FBI type mismatch in block \H1,6\" 2247 BADBLNKMSG 00003A22 F 13 2163a 2222= BLINKOK 000039EF F 13 2160j 2166= +BLKMSGON 0000308E F 13 2201 2206s +BLOCKCNT 0000308F F 13 2146s 2172 +CPP 00001000 F 13 2148 +CRLINFEED 000038F3 F 13 2190 2193 +DATABLK UUUUUUUU F 13 2147a +DISKCBP 00003031 F 13 2150 +DISKERROUT 0000350E F 13 2232 +ECFBI 00000002 F 13 2228 EXIT 00003A13 F 13 2197j 2205j 2216= +FBIBLINK 00089182 F 13 2158 +FBIBUFF 000030D2 F 13 2154a 2157a 2170a 2211a 2239a +FBIDA 00089181 F 13 2213a 2241a +FBIRELBLK 00089184 F 13 2171 +FBITSAF 0000000C F 13 2155 +INBLOCK 0000303B F 13 2145s 2152 2162a 2167 2175a 2182 2195a 2204 2231 JUSTBLKS 00003A0D F 13 2202j 2208= LERROR 00003A30 F 13 2156a 2227= LOADMESS 00003A14 F 13 2214a 2220= MAXBLKMES 0000000A F 13 2142= 2210 +MC 00003453 F 13 2233j 2243j NONEONLINE 00003A02 F 13 2188j 2192= NOTASAF 00003A35 F 13 2229j 2238= NOTASAFMES 00003A3A F 13 2242a 2246= +NUMMES 00003099 F 13 2187 2189s +NUMMESCHK 000039CA F 13 2209 NXTCHK 00003A07 F 13 2183j 2200= +PFDATABLK 00003017 F 13 2153 +PREVBLOCK 00003096 F 13 2159 2168s PRTBLKHDR 000039FE F 13 2180j 2186= +READIN 000039DB F 13 2137 2144= RECBLKMSG 00003A2C F 13 2196a 2223= +RECMSGON 0000309A F 13 2179 2184s RELBLKMSG 00003A17 F 13 2176a 2221= RELBLKOK 000039F8 F 13 2173j 2178= +STARTBLK 0000309D F 13 2203 +STARTREC 0000309C F 13 2181 +VPREPOUT 000013F9 F 13 2161 2174 2194 2212 2240 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 78 (PEEK&POKEUTL) F 13 Utility routine: READIN +VREAD 000013E0 F 13 2151 2248 END READIN routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 79 (PEEK&POKEUTL) F 13 Utility routine: RECORDMES 2251 2252 ********************************************************************************** 2253 * * 2254 * RECORDMES. * 2255 * This routine checks to see if record starts are to be * 2256 * printed out. The messages are in the form of: Block Number, * 2257 * Record Word Offset, Record Character Offset and Record Length. * 2258 * Note that if the record crosses multiple blocks only the * 2259 * blocks where the records begin will be listed. * 2260 * * 2261 * CALLNP RECORDMES * 2262 * * 2263 * Stack Required: 1 * 2264 * Registers Used: R0:R2 * 2265 * * 2266 ********************************************************************************** 2267 2268 BLOCK RECORDMES routine 2269 ENTRY RECORDMES 2270 2271 BEGFRAME 2272 ENDFRAME 2273 00000006 ABS 2274 MAXRECMES EQU 6 maximum items per line 03A43 2A5C4831 2275 RECSTRMES TEXTZ "*\H1,3\/\H2,1\/\H3,5\ " 2276 03A49 DD5F8001 6 STAK 2277 RECORDMES ENTRNP PUSH 03A4A 5C00309A 2278 CMZ RECMSGON are the RECORD messages to be printed? 03A4B FE023A59 2279 JEQ NORECS no, therefore leave 2280 * \ / 03A4C DC0039CA 2281 CALL NUMMESCHK will another item fit on the line? 03A4D 40440006 IMM 2282 PARVL MAXRECMES maximum items per line 03A4E 60403090 1 2283 LD R1 CHARDISP get the record offset 03A4F 10440002 1 IMM 2284 SUB R1 2 point to the beginning of the record 03A50 600A7C20 0 1 CBM 2285 LD R0 R1/BITS 30:31 get the character offset 03A51 E4003091 0 2286 ST R0 CHAROFFST save for call to prepout 03A52 600A5160 0 1 CBM 2287 LD R0 R1/BITS 8:29 get the word offset 03A53 E40030A0 0 2288 ST R0 WORDOFFST save for call to prepout 03A54 DC1013F9 @ 2289 CALL @VPREPOUT call the output routine 03A55 410030A0 2290 PAR WORDOFFST word offset 03A56 41003091 2291 PAR CHAROFFST character offset 03A57 4110392A @ 2292 PAR @RECORDLEN record length 03A58 40003A43 2293 PARL RECSTRMES message format 2294 * \ / 00003A59 2295 NORECS LABEL 03A59 5D1F8001 6 STAK 2296 LEAVE POP 2297 * --- 2298 +CHARDISP 00003090 F 13 2283 +CHAROFFST 00003091 F 13 2286s 2291a MAXRECMES 00000006 F 13 2274= 2282 NORECS 00003A59 F 13 2279j 2295= +NUMMESCHK 000039CA F 13 2281 +RECMSGON 0000309A F 13 2278 +RECORDLEN 0000392A F 13 2292a +RECORDMES 00003A49 F 13 2269 2277= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 80 (PEEK&POKEUTL) F 13 Utility routine: RECORDMES RECSTRMES 00003A43 F 13 2275= 2293a +VPREPOUT 000013F9 F 13 2289 +WORDOFFST 000030A0 F 13 2288s 2290a 2299 END RECORDMES routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 81 (PEEK&POKEUTL) F 13 Utility routine: RECERROR 2302 2303 ********************************************************************************** 2304 * * 2305 * RECERROR * 2306 * Output that a record mismatch has occurred. * 2307 * Call: * 2308 * CALLNP RECERROR * 2309 * * 2310 * Eats R0:R3 * 2311 * * 2312 ********************************************************************************** 2313 2314 BLOCK RECERROR routine 2315 ENTRY RECERROR 2316 2317 BEGFRAME 2318 ENDFRAME 2319 2320 03A5A DD5F8001 6 STAK 2321 RECERROR ENTRNP PUSH 03A5B 60803095 2 2322 LD R2 HDRDISP get the header's displacement 03A5C 600ABC20 0 2 CBM 2323 LD R0 R2/BITS 30:31 get the character offset 03A5D E4003091 0 2324 ST R0 CHAROFFST save for now 03A5E 600A9160 0 2 CBM 2325 LD R0 R2/BITS 8:29 get the word offset 03A5F E40030A0 0 2326 ST R0 WORDOFFST save for now 2327 2328 * output record mismatch message 2329 03A60 DC4038F3 2330 CALLNP CRLINFEED output a CR and a linefeed 03A61 DC1013F9 @ 2331 CALL @VPREPOUT 03A62 41003094 2332 PAR HDRBLOCK write out the block number 03A63 4100308F 2333 PAR BLOCKCNT write out the relative block number 03A64 40003A79 2334 PARL NOTAMATCH error message 2335 2336 * output the header message 2337 03A65 DC4038F3 2338 CALLNP CRLINFEED output a CR and a line feed 03A66 DC1013F9 @ 2339 CALL @VPREPOUT 03A67 410030A0 2340 PAR WORDOFFST 03A68 41003091 2341 PAR CHAROFFST 03A69 40003A6B 2342 PARL HEADERMES 03A6A 5D1F8001 6 STAK 2343 LEAVE POP return 2344 * --- 2345 03A6B 20526563 2346 HEADERMES TEXTZ " Record Header at word \H1,4\ character offset \H2,4\ " 03A79 30526563 2347 NOTAMATCH TEXTZ "0Record Mismatch at Block \H1,6\ Relative Block #\H2,4\" 2348 +BLOCKCNT 0000308F F 13 2333a +CHAROFFST 00003091 F 13 2324s 2341a +CRLINFEED 000038F3 F 13 2330 2338 +HDRBLOCK 00003094 F 13 2332a +HDRDISP 00003095 F 13 2322 HEADERMES 00003A6B F 13 2342a 2346= NOTAMATCH 00003A79 F 13 2334a 2347= +RECERROR 00003A5A F 13 2315 2321= +VPREPOUT 000013F9 F 13 2331 2339 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 82 (PEEK&POKEUTL) F 13 Utility routine: RECERROR +WORDOFFST 000030A0 F 13 2326s 2340a 2349 END RECERROR routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 83 (PEEK&POKEUTL) F 13 Utility routine: CKSUMBLK 2352 2353 ********************************************************************************** 2354 * * 2355 * CKSUMBLK * 2356 * * 2357 * This routine computes the checksum for a specified buffer. * 2358 * The checksum computation is an implementation of a CRC * 2359 * generator. We implement this by using a PRMUT on the current * 2360 * word. This is equivalent to a shift of 32 in a linear feedback * 2361 * shift register. The mechanism works because the results in a * 2362 * CRC generator are a linear combination of each input bit treated * 2363 * separately. We just ran each of the possible 32 bits through * 2364 * a simulated register and stored the results for the PRMUT. * 2365 * Then we XOR in the new word. This is a division type operation. * 2366 * Call: * 2367 * CALL CKSUMBLK * 2368 * PARL * 2369 * * 2370 * Eats R0:R2 * 2371 * * 2372 ********************************************************************************** 2373 2374 BLOCK CKSUMBLK subroutine 2375 ENTRY CKSUMBLK 2376 2377 BEGFRAME 2378 ENDFRAME 2379 03A87 DD1F8001 6 STAK 2380 CKSUMBLK ENTR PUSH 03A88 C0128000 2 REG 2381 STPL R2 save buffer address 03A89 18840400 2 IMM 2382 ADD R2 WPP advance pointer to buffer end 03A8A EC120000 0 REG 2383 STZ R0 initialize checksum holder 03A8B 6047FC00 1 IMM 2384 LD R1 -WPP initialize page index 2385 * \ / 2386 00003A8C 2387 NEXTWORD LABEL 03A8C F0003A90 0 2388 PRMUT R0 PRMUTTAB run 32 shifts of CRC 03A8D 741C8800 0 21 BASE 2389 XOR R0 R2,0(R1) combine in new word 03A8E FA603A8C 1 2390 IRJ R1 NEXTWORD do the whole block 2391 * \ / 03A8F 5D1F8001 6 STAK 2392 LEAVE POP exit this routine 2393 * --- 2394 00003A90 2395 PRMUTTAB LABEL 03A90 E0000200 2396 VFD 0E0000200 bit 0 through 32 shifts 03A91 70000100 2397 VFD 070000100 bit 1 ... 03A92 38000080 2398 VFD 038000080 03A93 1C000040 2399 VFD 01C000040 03A94 0E000020 2400 VFD 00E000020 03A95 07000010 2401 VFD 007000010 03A96 03800008 2402 VFD 003800008 03A97 01C00004 2403 VFD 001C00004 2404 03A98 00E00002 2405 VFD 000E00002 bit 8 ... 03A99 00700001 2406 VFD 000700001 03A9A E0380200 2407 VFD 0E0380200 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 84 (PEEK&POKEUTL) F 13 Utility routine: CKSUMBLK 03A9B 701C0100 2408 VFD 0701C0100 03A9C 380E0080 2409 VFD 0380E0080 03A9D 1C070040 2410 VFD 01C070040 03A9E 0E038020 2411 VFD 00E038020 03A9F 0701C010 2412 VFD 00701C010 2413 03AA0 0380E008 2414 VFD 00380E008 bit 16 ... 03AA1 01C07004 2415 VFD 001C07004 03AA2 00E03802 2416 VFD 000E03802 03AA3 00701C01 2417 VFD 000701C01 03AA4 E0380C00 2418 VFD 0E0380C00 03AA5 701C0600 2419 VFD 0701C0600 03AA6 380E0300 2420 VFD 0380E0300 03AA7 1C070180 2421 VFD 01C070180 2422 03AA8 0E0380C0 2423 VFD 00E0380C0 bit 24 ... 03AA9 0701C060 2424 VFD 00701C060 03AAA 0380E030 2425 VFD 00380E030 03AAB 01C07018 2426 VFD 001C07018 03AAC 00E0380C 2427 VFD 000E0380C 03AAD 00701C06 2428 VFD 000701C06 03AAE 00380E03 2429 VFD 000380E03 03AAF E01C0501 2430 VFD 0E01C0501 2431 +CKSUMBLK 00003A87 F 13 2375 2380= NEXTWORD 00003A8C F 13 2387= 2390j PRMUTTAB 00003A90 F 13 2388 2395= +WPP 00000400 F 13 2382 2384 2432 END CKSUMBLK subroutine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 85 (PEEK&POKEUTL) F 13 Utility routine: GETNUMBER 2435 2436 ********************************************************************************** 2437 * * 2438 * Get the typed in number * 2439 * * 2440 ********************************************************************************** 2441 2442 BLOCK GETNUMBER routine 2443 ENTRY GETNUMBER 2444 2445 BEGFRAME 2446 ENDFRAME 2447 03AB0 DD5F8001 6 STAK 2448 GETNUMBER ENTRNP PUSH 03AB1 60440050 1 IMM 2449 LD R1 BUFL 03AB2 6084301B 2 IMM 2450 LD R2 ADR BUF 03AB3 DC5013F3 @ 2451 CALLNP @VREADLINE get a line from the user 03AB4 30440050 1 IMM 2452 RSB R1 BUFL 03AB5 EC32302F 1 @ 2453 STZ @BUFP(R1) mark the end 03AB6 6104301B 4 IMM 2454 LD R4 ADR BUF get pointer to its beginning 03AB7 DC5013F5 @ 2455 CALLNP @VFETCHITEM and fetch the first item 03AB8 5D1F8001 6 STAK 2456 LEAVE POP 2457 * --- 2458 +BUF 0000301B F 13 2450a 2454a +BUFL 00000050 F 13 2449 2452 +BUFP 0000302F F 13 2453s +GETNUMBER 00003AB0 F 13 2443 2448= +VFETCHITEM 000013F5 F 13 2455 +VREADLINE 000013F3 F 13 2451 2459 END GETNUMBER routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 86 (PEEK&POKEUTL) F 13 Utility routine: GETNUMBER 2461 2462 ********************************************************************************** 2463 * * 2464 * TESTFORBRK. Check whether the break key has been pressed. * 2465 * Call: * 2466 * * 2467 * CALLNP TESTFORBRK * 2468 * * 2469 * * 2470 * * 2471 * Eats R0 * 2472 * * 2473 ********************************************************************************** 2474 2475 BLOCK TESTFORBRK subroutine 2476 ENTRY TESTFORBRK 2477 2478 BEGFRAME 00178801 6 BASE 2479 SAVER3 BSS 1 save R3 here 00178802 6 BASE 2480 PFSAVE BSS 1 save IO window mapping 2481 ENDFRAME 2482 03AB9 DD5F8003 6 STAK 2483 TESTFORBRK ENTRNP PUSH 03ABA 5C003016 2484 CMZ ONLINE are we running offline 03ABB FE0C3AC8 2485 JNE ONLINETEST jump if so 03ABC E4D78801 3 6 BASE 2486 ST R3 SP,SAVER3 save away register R3 03ABD 60C40086 3 IMM 2487 LD PFPTR PNCIX page file location for IO window 03ABE 80978802 6 BASE 2488 PFRD SP,PFSAVE save current mapping 03ABF 00D013E5 @ 2489 LDPF @VPF4SSU lets talk to the SSU 2490 * \ / 00003AC0 2491 NXTSSUCHAR LABEL 03AC0 6000180D 0 2492 LD R0 CIX(SSUCHARIN) fetch character 03AC1 FA063AC5 0 2493 JGEZ R0 NOSSUCHAR jump if no characters 03AC2 6400308B 0 2494 CPR R0 SSUBREAK have a break character 03AC3 FE023AC6 2495 JEQ HAVEBREAK jump if a match 03AC4 FE0E3AC0 2496 JMP NXTSSUCHAR read remaining characters 2497 * --- 2498 00003AC5 2499 NOSSUCHAR LABEL 03AC5 19C40001 7 IMM 2500 ADD R7 1 advance to no-break return 2501 * \ / 00003AC6 2502 HAVEBREAK LABEL 03AC6 00D78802 6 BASE 2503 LDPF SP,PFSAVE restore page file 03AC7 5D1F8003 6 STAK 2504 LEAVE POP return 2505 * --- 2506 00003AC8 2507 ONLINETEST LABEL 03AC8 D1803079 2508 CLRT BREAKFLAG test, clear break flag 03AC9 FE0C3ACB 2509 JNE BREAKED jump if break flag set 03ACA 19C40001 7 IMM 2510 ADD R7 1 return + 1 if not breaked 2511 * \ / 00003ACB 2512 BREAKED LABEL 03ACB 5D1F8003 6 STAK 2513 LEAVE POP return 2514 * --- 2515 BREAKED 00003ACB F 13 2509j 2512= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 87 (PEEK&POKEUTL) F 13 Utility routine: GETNUMBER +BREAKFLAG 00003079 F 13 2508s +CIX 00001800 F 13 2492 HAVEBREAK 00003AC6 F 13 2495j 2502= NOSSUCHAR 00003AC5 F 13 2493j 2499= NXTSSUCHAR 00003AC0 F 13 2491= 2496j +ONLINE 00003016 F 13 2484 ONLINETEST 00003AC8 F 13 2485j 2507= +PFPTR 0012C000 F 13 2487 PFSAVE 00178802 F 13 2480= 2488s 2503 +PNCIX 00000086 F 13 2487 SAVER3 00178801 F 13 2479= 2486s +SSUBREAK 0000308B F 13 2494 +SSUCHARIN 0000000D F 13 2492 +TESTFORBRK 00003AB9 F 13 2476 2483= +VPF4SSU 000013E5 F 13 2489 2516 END TESTFORBRK subroutine 651 INPUT SOURCE.OPSYS:DATESTUFF date conversion utilities 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 88 (DATESTUFF) F 14 System date packers and unpackers 3 BLOCK Date Conversion Routines 4 5 ENTRY UNPACKDATE convert 44 bits into calander fields 6 ENTRY PACKDATE convert calander fields into 44 bits 7 8 ********************************************************************************** 9 * * 10 * The system time form (44 bits counting milliseconds from 0000z * 11 * 17 Nov 1858) is not easy to convert to and from calendar fields * 12 * (month, day, year) so these routines work that magic on the date * 13 * to convert calendar fields into the 44 bit system date (PackDate) * 14 * and to convert the 44 bit system number into calendar fields (UnPackDate). * 15 * * 16 ********************************************************************************** 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 89 (DATESTUFF) F 14 System date packers and unpackers 18 19 ********************************************************************************** 20 * * 21 * UNPACKDATE. Routine that will unpack a 44 bit system date into calender * 22 * fields. Any time zone adjustment must be done before the call. * 23 * Call: * 24 * * 25 * CALL UNPACKDATE * 26 * PARV2 * 27 * PAR * 28 * PAR * 29 * PAR * 30 * PAR * 31 * PARL * 32 * * 33 * Eats R0:R3. * 34 * Stack required = 9. * 35 * * 36 ********************************************************************************** 37 38 BLOCK UNPACKDATE subroutine 39 ENTRY UNPACKDATE convert 44 bits into calendar fields 40 41 BEGFRAME 00178801 6 BASE 42 THEDATE BSS 2 the 44 bit system date 00178803 6 BASE 43 MILLI BSS 1 place to put milliseconds 00178804 6 BASE 44 DAYOFWEEK BSS 1 place for day of week (SUN=0) 00178805 6 BASE 45 DATE BSS 1 place for date in month 00178806 6 BASE 46 MONTH BSS 1 place for month (JAN=1) 00178807 6 BASE 47 YEAR BSS 1 place for year 00178808 6 BASE 48 TEMP BSS 1 temp 49 ENDFRAME 50 03ACC DD1F8009 6 STAK 51 UNPACKDATE ENTR PUSH 03ACD C3578801 6 BASE 52 STPV2 SP,THEDATE the 44 bit system date 03ACE C1178803 6 BASE 53 STP SP,MILLI place for milliseconds in today 03ACF C1178805 6 BASE 54 STP SP,DATE place for the date in month 03AD0 C1178806 6 BASE 55 STP SP,MONTH place for month (JAN=1) 03AD1 C1178807 6 BASE 56 STP SP,YEAR place for year 03AD2 C0178804 6 BASE 57 STPL SP,DAYOFWEEK place for day of week 58 03AD3 62178801 016 BASE 59 LD2 R0 SP,THEDATE get the passed date 03AD4 58C40010 IMM 60 IORPSR PSRMODIF use modify arithmetic 03AD5 14003B38 0 61 DIV R0 ONEDAYINMS make day count in R0 03AD6 E4578C03 1 6 FPVR 62 ST R1 @(SP,MILLI) save time of day from R1 03AD7 E4178808 0 6 BASE 63 ST R0 SP,TEMP save the day count 03AD8 62161003 010 REG 64 LD2 R0 R0+3 make double for divide, make wednesdays=3 03AD9 14040007 0 IMM 65 DIV R0 7 divide by days/week 03ADA E4578C04 1 6 FPVR 66 ST R1 @(SP,DAYOFWEEK) save the day of the week 03ADB 58840010 IMM 67 CLBPSR PSRMODIF repeal modify arithmetic 03ADC 60178808 0 6 BASE 68 LD R0 SP,TEMP retrieve day count 03ADD 60440018 1 IMM 69 LD R1 TABLE1SZ-1 get size of century table 00003ADE 70 T1LOOP LABEL 03ADE 64223B12 0 1 71 CPR R0 TABLE1(R1) check this entry 03ADF FE063AE1 72 JGE THISENTRY jump if proper century found 03AE0 FA663ADE 1 73 JDR R1 T1LOOP count down to proper century 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 90 (DATESTUFF) F 14 System date packers and unpackers 74 * --- 75 00003AE1 76 THISENTRY LABEL found century entry in table 03AE1 10223B12 0 1 77 SUB R0 TABLE1(R1) make day of century 03AE2 1C440064 1 IMM 78 MUL R1 100 convert century table index to integer year 03AE3 E4578C07 1 6 FPVR 79 ST R1 @(SP,YEAR) this will be updated from time to time 03AE4 58C40010 IMM 80 IORPSR PSRMODIF use modify arithmetic again 03AE5 62120000 010 REG 81 LD2 R0 R0 place in proper starting registers 03AE6 140405B5 0 IMM 82 DIV R0 365*4+1 make into four year chunks 03AE7 58840010 IMM 83 CLBPSR PSRMODIF repeal marth 03AE8 1C040004 0 IMM 84 MUL R0 4 make quotient back into proper year 03AE9 98178C07 0 6 FPVR 85 ADDM R0 @(SP,YEAR) update the year to the nearest leap year 03AEA 58C40010 IMM 86 IORPSR PSRMODIF again 03AEB 60040000 0 IMM 87 LD R0 0 clear the upper half, lower=remainder 03AEC 1404016D 0 IMM 88 DIV R0 365 get which year of group of four 03AED 58840010 IMM 89 CLBPSR PSRMODIF repeal marth 03AEE 64040004 0 IMM 90 CPR R0 4 check for leap day 03AEF FE0C3AF2 91 JNE NOTLEAR jump if not 03AF0 60040003 0 IMM 92 LD R0 3 leap day is last day of third year 03AF1 6044016D 1 IMM 93 LD R1 365 so fix registers 00003AF2 94 NOTLEAR LABEL 03AF2 98178C07 0 6 FPVR 95 ADDM R0 @(SP,YEAR) advance year to the current 'fake' year 03AF3 6084000E 2 IMM 96 LD R2 TABLE2SZ-1 get size of month table 00003AF4 97 T2LOOP LABEL 03AF4 64643B28 1 2 98 CPR R1 TABLE2(R2) check for down to proper month yet 03AF5 FE043AF7 99 JGT THISMONTH jump if we have arrived at proper month 03AF6 FAA63AF4 2 100 JDR R2 T2LOOP continue search for right month 101 * --- 102 00003AF7 103 THISMONTH LABEL 03AF7 10643B28 1 2 104 SUB R1 TABLE2(R2) subtract off prior days 03AF8 E4578C05 1 6 FPVR 105 ST R1 @(SP,DATE) save day of month 03AF9 6484000C 2 IMM 106 CPR R2 12 check for into Jan or Feb of 'fake' year 03AFA FE0A3AFD 107 JLE MONTHOK if not, the month number is okay 03AFB 1084000C 2 IMM 108 SUB R2 12 otherwise, fix for Jan=1 03AFC D0178C07 6 FPVR 109 INC @(SP,YEAR) also, fix up the year 00003AFD 110 MONTHOK LABEL 03AFD E4978C06 2 6 FPVR 111 ST R2 @(SP,MONTH) save the month number 03AFE 5D1F8009 6 STAK 112 LEAVE POP 113 * --- 114 DATE 00178805 F 14 45= 54s 105s DAYOFWEEK 00178804 F 14 44= 57s 66s MILLI 00178803 F 14 43= 53s 62s MONTH 00178806 F 14 46= 55s 111s MONTHOK 00003AFD F 14 107j 110= NOTLEAR 00003AF2 F 14 91j 94= +ONEDAYINMS UUUUUUUU F 14 61 +PSRMODIF 00000010 F 14 60 67 80 83 86 89 T1LOOP 00003ADE F 14 70= 73j T2LOOP 00003AF4 F 14 97= 100j +TABLE1 UUUUUUUU F 14 71 77 +TABLE1SZ UUUUUUUU F 14 69 +TABLE2 UUUUUUUU F 14 98 104 +TABLE2SZ UUUUUUUU F 14 96 TEMP 00178808 F 14 48= 63s 68 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 91 (DATESTUFF) F 14 System date packers and unpackers THEDATE 00178801 F 14 42= 52s 59 THISENTRY 00003AE1 F 14 72j 76= THISMONTH 00003AF7 F 14 99j 103= +UNPACKDATE 00003ACC F 14 39 51= YEAR 00178807 F 14 47= 56s 79s 85s 95s 109s 115 END UNPACKDATE subroutine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 92 (DATESTUFF) F 14 System date packers and unpackers 117 118 ********************************************************************************** 119 * * 120 * PACKDATE. This routine takes calender fields and converts them * 121 * into the 44 bit system time code. The system time is returned * 122 * right justified in 64 bits. * 123 * Call: * 124 * * 125 * CALL PACKDATE * 126 * PAR2 * 127 * PARV * 128 * PARV * 129 * PARV * 130 * PARVL * 131 * * 132 * Eats R0:R3. * 133 * Stack required = 8. * 134 * * 135 ********************************************************************************** 136 137 BLOCK PACKDATE subroutine 138 ENTRY PACKDATE 139 140 BEGFRAME 00178801 6 BASE 141 THEDATE BSS 2 the 44 bit system date 00178803 6 BASE 142 MILLI BSS 1 place to put milliseconds 00178804 6 BASE 143 DATE BSS 1 place for date in month 00178805 6 BASE 144 MONTH BSS 1 place for month (JAN=1) 00178806 6 BASE 145 YEAR BSS 1 place for year 00178807 6 BASE 146 TEMP BSS 1 temp 147 ENDFRAME 148 03AFF DD1F8008 6 STAK 149 PACKDATE ENTR PUSH 03B00 C3178801 6 BASE 150 STP2 SP,THEDATE the 44 bit system date 03B01 C1578803 6 BASE 151 STPV SP,MILLI milliseconds in today 03B02 C1578804 6 BASE 152 STPV SP,DATE the date in month 03B03 C1578805 6 BASE 153 STPV SP,MONTH month (JAN=1) 03B04 C0578806 6 BASE 154 STPVL SP,YEAR year 155 03B05 60040000 0 IMM 156 LD R0 0 03B06 60578806 1 6 BASE 157 LD R1 SP,YEAR R0,R1=year 03B07 60978805 2 6 BASE 158 LD R2 SP,MONTH r2=month 03B08 64840002 2 IMM 159 CPR R2 2 check against february 03B09 FE043B0C 160 JGT LATERPART jump if later in year 03B0A 10440001 1 IMM 161 SUB R1 1 use earlier year 03B0B 1884000C 2 IMM 162 ADD R2 12 make it up in months 163 * this makes years start on MAR 1 164 * to make leap year processing reasonable 00003B0C 165 LATERPART LABEL 03B0C 58C40010 IMM 166 IORPSR PSRMODIF set up for funny arithmetic 03B0D 14040064 0 IMM 167 DIV R0 100 separate century and year 03B0E 58840010 IMM 168 CLBPSR PSRMODIF restore normal math 169 * R0 = century, R1 = year 03B0F 60203B12 0 0 170 LD R0 TABLE1(R0) get first day in century 03B10 E4178807 0 6 BASE 171 ST R0 SP,TEMP save for later 03B11 60040000 0 IMM 172 LD R0 0 get sign extension 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 93 (DATESTUFF) F 14 System date packers and unpackers 03B12 58C40010 IMM 173 IORPSR PSRMODIF set funny arithmetic 03B13 14040004 0 IMM 174 DIV R0 4 div by 4 years (repeat interval of leap years) 03B14 58840010 IMM 175 CLBPSR PSRMODIF restore normalcy 176 * R0 = group of 4, R1 = 0-3 03B15 1C0405B5 0 IMM 177 MUL R0 4*365+1 convert group of four to day count 03B16 98178807 0 6 BASE 178 ADDM R0 SP,TEMP update day count 03B17 1C44016D 1 IMM 179 MUL R1 365 convert the other to days 03B18 18643B28 1 2 180 ADD R1 TABLE2(R2) add number of days up to current month 03B19 18578804 1 6 BASE 181 ADD R1 SP,DATE add day of month 03B1A 18578807 1 6 BASE 182 ADD R1 SP,TEMP get the total day count 03B1B 1C440018 1 IMM 183 MUL R1 24 make day count into hours 03B1C 58C40010 IMM 184 IORPSR PSRMODIF set funny arithmetic 03B1D 1C403B37 1 185 MUL R1 ONEHOURMS make hour count into milliseconds 03B1E 58840004 IMM 186 CLBPSR PSRCARRY clear the carry bit 03B1F 18978803 2 6 BASE 187 ADD R2 SP,MILLI add in the time of day 03B20 18440000 1 IMM 188 ADD R1 0 add carry if present 03B21 58840010 IMM 189 CLBPSR PSRMODIF restore normalcy 03B22 E6578C01 126 FPVR 190 ST2 R1 @(SP,THEDATE) store time back to user 03B23 5D1F8008 6 STAK 191 LEAVE POP 192 * --- 193 DATE 00178804 F 14 143= 152s 181 LATERPART 00003B0C F 14 160j 165= MILLI 00178803 F 14 142= 151s 187 MONTH 00178805 F 14 144= 153s 158 +ONEHOURMS UUUUUUUU F 14 185 +PACKDATE 00003AFF F 14 138 149= +PSRCARRY 00000004 F 14 186 +PSRMODIF 00000010 F 14 166 168 173 175 184 189 +TABLE1 UUUUUUUU F 14 170 +TABLE2 UUUUUUUU F 14 180 TEMP 00178807 F 14 146= 171s 178s 182 THEDATE 00178801 F 14 141= 150s 190s YEAR 00178806 F 14 145= 154s 157 194 END PACKDATE subroutine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 94 (DATESTUFF) F 14 System date packers and unpackers 196 197 ********************************************************************************** 198 * TABLE 1 * 199 * This table gives the day count for each century year * 200 * 1 March. It is used to reduce the day count down to a * 201 * hundred year range, with the (maybe) leap year at the end. * 202 ********************************************************************************** 203 00008EAC ABS 204 DAYSPCEN EQU 36524 days in a normal century 00003AE7 ABS 205 MAR1900 EQU 15079 day count to 0000Z 1 Mar, 1900 206 00003B24 207 CENTABLE BSS 0 00003B12 208 TABLE1 EQU CENTABLE(-18) referenced to 0 A.D. 03B24 FFFFAC3B 209 VFD MAR1900-DAYSPCEN 0000Z 1 Mar, 1800 03B25 00003AE7 210 VFD MAR1900 0000Z 1 Mar, 1900 03B26 0000C994 211 VFD MAR1900+DAYSPCEN+1 0000Z 1 Mar, 2000 03B27 00015840 212 VFD MAR1900+2*DAYSPCEN+1 0000Z 1 Mar, 2100 03B28 0001E6EC 213 VFD MAR1900+3*DAYSPCEN+1 0000Z 1 Mar, 2200 03B29 00027598 214 VFD MAR1900+4*DAYSPCEN+1 0000Z 1 Mar, 2300 03B2A 00030445 215 VFD MAR1900+5*DAYSPCEN+2 0000Z 1 Mar, 2400 00000019 ABS 216 TABLE1SZ EQU DISPW TABLE1 217 218 ********************************************************************************** 219 * TABLE 2 * 220 * This simple minded table is used to reduce the julian * 221 * date (day within year) to a month and day. It starts out * 222 * with -1 because people are absurd enough to call the * 223 * zeroth day of a month by number 1. * 224 ********************************************************************************** 225 00003B2B 226 DAYTAB BSS 0 00003B28 227 TABLE2 EQU DAYTAB(-3) referenced to Mar=3 03B2B FFFFFFFF 228 VFD -1 March (31) 03B2C 0000001E 229 VFD 30 April (30) 03B2D 0000003C 230 VFD 60 May (31) 03B2E 0000005B 231 VFD 91 June (30) 03B2F 00000079 232 VFD 121 July (31) 03B30 00000098 233 VFD 152 Aug (31) 03B31 000000B7 234 VFD 183 Sept (30) 03B32 000000D5 235 VFD 213 Oct (31) 03B33 000000F4 236 VFD 244 Nov (30) 03B34 00000112 237 VFD 274 Dec (31) 03B35 00000131 238 VFD 305 Jan (31) 03B36 00000150 239 VFD 336 Feb (28) 0000000F ABS 240 TABLE2SZ EQU DISPW TABLE2 241 03B37 0036EE80 242 ONEHOURMS VFD 60*60*1000 one hour in milliseconds 03B38 05265C00 243 ONEDAYINMS VFD 24*60*60*1000 one day in milliseconds 244 CENTABLE 00003B24 F 14 207= 208e DAYSPCEN 00008EAC F 14 204= 209x 211x 212x 213x 214x 215x DAYTAB 00003B2B F 14 226= 227e MAR1900 00003AE7 F 14 205= 209x 210x 211x 212x 213x 214x 215x ONEDAYINMS 00003B38 F 14 61 243= ONEHOURMS 00003B37 F 14 185 242= +PACKDATE 00003AFF F 14 6 138 149= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 95 (DATESTUFF) F 14 System date packers and unpackers +PSRCARRY 00000004 F 14 186 +PSRMODIF 00000010 F 14 60 67 80 83 86 89 166 168 173 175 184 189 TABLE1 00003B12 F 14 71 77 170 208= 216e TABLE1SZ 00000019 F 14 69 216= TABLE2 00003B28 F 14 98 104 180 227= 240e TABLE2SZ 0000000F F 14 96 240= +UNPACKDATE 00003ACC F 14 5 39 51= 245 END Date Conversion Routines 652 INPUT P&PCMD1 some of the commands 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 96 (P&PCMD1) F 15 Command: CKSUM 3 4 ********************************************************************************** 5 * * 6 * CKSUM is a useful command to find out if any * 7 * changes have occured in a file, group of blocks, or an * 8 * individual block. It calculates CRCs on blocks, groups * 9 * of blocks, or code files. * 10 * User call: * 11 * CKSUM * 12 * This format does the currently loaded * 13 * block or file. * 14 * CKSUM * 15 * This format does the single block. * 16 * CKSUM : * 17 * This format does the range of blocks, * 18 * printing each block checksum individually. * 19 * CKSUM [,L] * 20 * This format does a code file. It prints * 21 * each individual block checksum if [,L] is * 22 * specified and an overall file checksum. * 23 * It leaves the file loaded. * 24 * * 25 ********************************************************************************** 26 27 BLOCK CKSUM command 28 ENTRY CCKSUM 29 0000305C 30 STRTBLK EQU VARS(0) starting block number 0000305C 31 LISTFLAG EQU VARS(0) flag for code file list control 0000305D 32 STOPBLK EQU VARS(1) ending block number 0000305E 33 FILECKSUM EQU VARS(2) checksum for entire file 00000004 ABS 34 ENTCNTLN EQU 4 number of entries printed per line 35 00003B39 36 CCKSUM LABEL 03B39 E500301A 4 37 ST R4 BEFOREPTR save char ptr in case we find a filename 03B3A DC5013F8 @ 38 CALLNP @VFETCHITMH get initial range value 03B3B F6783B5B 1 39 JBT R1/TEOL NOPARMS if end of line, do current item 03B3C F27E3B67 1 40 JBF R1/TNUM CKSUMFILE jump if not legal number 03B3D E480305C 2 41 ST R2 STRTBLK this is the starting block number 03B3E E480305D 2 42 ST R2 STOPBLK assume end is the same 03B3F 6404003A 0 IMM 43 CPR R0 COLON did we get a range? 03B40 FE0C3B47 44 JNE NOTRANGE jump if not the case 45 * \ / 03B41 D00B1F30 4 CBM 46 INC R4/FLDCHARS advance over colon 03B42 DC5013F8 @ 47 CALLNP @VFETCHITMH get ending range value 03B43 F27E3BB9 1 48 JBF R1/TNUM BADRANGE jump if not numeric 03B44 6480305C 2 49 CPR R2 STRTBLK compare end to start 03B45 FE083BB9 50 JLT BADRANGE jump if start greater than end 03B46 E480305D 2 51 ST R2 STOPBLK set ending block number 52 * \ / 53 00003B47 54 NOTRANGE LABEL 03B47 DC40356A 55 CALLNP CHECKFILE clear file mode 03B48 6100305C 4 56 LD R4 STRTBLK initialize starting block 57 * \ / 00003B49 58 PRNTNXT LABEL 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 97 (P&PCMD1) F 15 Command: CKSUM 03B49 61440003 5 IMM 59 LD R5 ENTCNTLN-1 number of entries per line 60 * \ / 00003B4A 61 CKSUMNXT LABEL 03B4A DC0037D5 62 CALL LOADBLOCK call to load a block 03B4B 40530000 4 REG 63 PARVL R4 this is the block number 03B4C FE0E3453 64 JMP MC terminate on disk error 65 * \ / 03B4D DC003A87 66 CALL CKSUMBLK now calculate the checksum 03B4E 40005400 67 PARL DATABLK of this block 03B4F E42A306C 0 5 68 ST R0 RESULTS(R5) save the checksum away 03B50 E52A3070 4 5 69 ST R4 BLOCKS(R5) and the block number 03B51 19040001 4 IMM 70 ADD R4 1 advance the block number 03B52 6500305D 4 71 CPR R4 STOPBLK compare against ending block number 03B53 FE043B58 72 JGT NONELEFT jump if no more to do 03B54 FB663B4A 5 73 JDR R5 CKSUMNXT back 'round for more 74 * \ / 03B55 DC003608 75 CALL PRINTLINE print the line out 03B56 40534000 5 REG 76 PARVL R5 index indicates how many entries are good 03B57 FE0E3B49 77 JMP PRNTNXT gather information for next line 78 * --- 79 00003B58 80 NONELEFT LABEL 03B58 DC003608 81 CALL PRINTLINE print the line out, if necessary 03B59 40534000 5 REG 82 PARVL R5 index indicates how many entries are good 03B5A FE0E3453 83 JMP MC back to the main control 84 * --- 85 86 ********************************************************************************** 87 * The CKSUM command was used with no parameters. We * 88 * check to see if the currently item is a file or a block * 89 * and calculate the checksum of whichever is loaded. * 90 ********************************************************************************** 91 00003B5B 92 NOPARMS LABEL 03B5B EC00305C 93 STZ LISTFLAG in case we do the whole file 03B5C 5C00303A 94 CMZ FILEFLAG is a file currently loaded? 03B5D FE0C3B89 95 JNE DOCURFILE jump if so 03B5E 6000303B 0 96 LD R0 INBLOCK get the block currently in 03B5F FA084E49 0 97 JLTZ R0 NONEIN jump if none loaded 98 * Since this is non-destructive, we don't call MODCHECK 03B60 E4003073 0 99 ST R0 BLOCKS(ENTCNTLN-1) save block number for the print 03B61 DC003A87 100 CALL CKSUMBLK now calculate the checksum 03B62 40005400 101 PARL DATABLK of this block 03B63 E400306F 0 102 ST R0 RESULTS(ENTCNTLN-1) save the checksum away 03B64 DC003608 103 CALL PRINTLINE print the line out with a single entry 03B65 40440003 IMM 104 PARVL ENTCNTLN-1 index indicates how many entries are good 03B66 FE0E3453 105 JMP MC back to the main control 106 * --- 107 108 ********************************************************************************** 109 * This section does the checksum for a code file. The * 110 * checksummer prints each individual block checksum as it goes, * 111 * if requested, and an overall file checksum. The block * 112 * checksums are the CRC calculated on the data of the * 113 * individual block and the file checksum is the CRC calculated * 114 * on the CCB after the DAs have been replaced with the * 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 98 (P&PCMD1) F 15 Command: CKSUM 115 * individual block checksums. We isolate the upper 8 bits of * 116 * the DA word (primarily to save the protect bit, including the * 117 * other for future use) and XOR them with the checksum stored * 118 * into the CCB. Therefore, the file checksum includes the CCB * 119 * information (transfer points, etc), the block contents, and * 120 * all of the protect bits. * 121 ********************************************************************************** 122 00003B67 123 CKSUMFILE LABEL 03B67 6100301A 4 124 LD R4 BEFOREPTR restore buffer pointer 03B68 6144303C 5 IMM 125 LD R5 ADR FILENAME pointer to block 03B69 60C03104 3 126 LD R3 RADCODE assume a code file 03B6A DC5013F6 @ 127 CALLNP @VFETCHFNM try to pack the filename 03B6B FA083451 0 128 JLTZ R0 BADFORM error if not 129 03B6C EC00305C 130 STZ LISTFLAG indicate no list of individual sums 03B6D DC5013F8 @ 131 CALLNP @VFETCHITMH pick up a value 03B6E FA0C3451 0 132 JNEZ R0 BADFORM terminator must be EOL 03B6F F6783B73 1 133 JBT R1/TEOL NOLIST if only EOL, no list 03B70 66803BDC 23 134 CPR2 R2 LISTOPTION otherwise must be "L" 03B71 FE0C3451 135 JNE BADFORM else error 03B72 EDC0305C 136 STW LISTFLAG indicate to list all individual CKSUMs 00003B73 137 NOLIST LABEL 03B73 6004303C 0 IMM 138 LD R0 ADR FILENAME filename trying to load 03B74 6044003C 1 IMM 139 LD R1 FILENMLN*CPW file name length 03B75 6084304B 2 IMM 140 LD R2 ADR LDFILENM last loaded filename 03B76 FE400000 141 CMOVE remember the name 142 03B77 61443050 5 IMM 143 LD R5 ADR LDFILENM(5) get pointer to file name 03B78 61003031 4 144 LD R4 DISKCBP pointer to disk control block 03B79 DC5013E2 @ 145 CALLNP @VSRCHDIR look for the file 03B7A FAF03BB3 3 146 JZA R3 CKSNOFILE jump if the file is not found 03B7B 60040003 0 IMM 147 LD R0 HTYPECODE get type for code file 03B7C 6408EA60 0 3 ZBM 148 CPR R0 R3,FDET see if we found a code file 03B7D FE0C3BB5 149 JNE CKSBDTYPE error if not 03B7E DC4034DE 150 CALLNP MODCHECK check for modified block 03B7F DC40356A 151 CALLNP CHECKFILE clear existing file mode 03B80 6008D185 0 3 ZBM 152 LD R0 R3,FDDA get the CCB address 03B81 E400303A 0 153 ST R0 FILEFLAG indicate this file now loaded 154 * \ / 03B82 61003031 4 155 LD R4 DISKCBP pointer to disk control block 03B83 DC1013E0 @ 156 CALL @VREAD read in the file's CCB 03B84 4140303A 157 PARV FILEFLAG disk block to read 03B85 41403018 158 PARV PFCCBBLK place to put the block 03B86 410030DD 159 PAR FBIBUFF2 buffer for FBI 03B87 41440013 IMM 160 PARV FBITCCB expecting Code Control Block 03B88 40003BBC 161 PARL CKSUMDERR where to go if disk error 162 * \ / 00003B89 163 DOCURFILE LABEL 03B89 61040000 4 IMM 164 LD R4 0 initialize CCB index 03B8A 61440003 5 IMM 165 LD R5 ENTCNTLN-1 number of entries per line 166 * \ / 00003B8B 167 FINDNXTBLK LABEL 03B8B 60285800 0 4 168 LD R0 CCBBLK(R4) get possible code page 03B8C 780030FE 0 169 AND R0 MSBLKMASK mask off extra bits 03B8D FA023B9F 0 170 JEQZ R0 TRYNXTBLK jump if none here 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 99 (P&PCMD1) F 15 Command: CKSUM 171 * \ / 03B8E E42A3070 0 5 172 ST R0 BLOCKS(R5) save away block number 03B8F DC0037D5 173 CALL LOADBLOCK load this block 03B90 40520000 0 REG 174 PARVL R0 pass block address 03B91 FE0E3453 175 JMP MC terminate if disk error 176 * \ / 03B92 DC003A87 177 CALL CKSUMBLK now calculate the checksum 03B93 40005400 178 PARL DATABLK of this block 03B94 E42A306C 0 5 179 ST R0 RESULTS(R5) save away checksum 03B95 60685800 1 4 180 LD R1 CCBBLK(R4) pick up DA word 03B96 7843FE00 1 IMM 181 AND R1 0FF000000 remove DA leaving protect bit 03B97 74124000 0 1 REG 182 XOR R0 R1 combine with checksum 03B98 E4285800 0 4 183 ST R0 CCBBLK(R4) save away checksum in CCB over DA 03B99 5C00305C 184 CMZ LISTFLAG check for list of individual sums 03B9A FE023B9F 185 JEQ TRYNXTBLK jump if no requested 03B9B FB663B9F 5 186 JDR R5 TRYNXTBLK now count line index for print 187 * \ / 03B9C DC003608 188 CALL PRINTLINE print the line out 03B9D 40534000 5 REG 189 PARVL R5 index indicates how many entries exists 03B9E 61440003 5 IMM 190 LD R5 ENTCNTLN-1 number of entries per line 191 * \ / 00003B9F 192 TRYNXTBLK LABEL 03B9F 19040001 4 IMM 193 ADD R4 1 advance CCB index register 03BA0 650403E7 4 IMM 194 CPR R4 CCBMAXPAGE-1 have we hit the end yet? 03BA1 FE0A3B8B 195 JLE FINDNXTBLK jump if not 196 * \ / 03BA2 DC003608 197 CALL PRINTLINE print out any remaining final line 03BA3 40575001 5 REG 198 PARVL (R5+1) index indicates how many entries exist 03BA4 DC003A87 199 CALL CKSUMBLK call to calculate file checksum 03BA5 40005800 200 PARL CCBBLK of the entire CCB 03BA6 E400305E 0 201 ST R0 FILECKSUM and save for output printer 03BA7 DC1013F9 @ 202 CALL @VPREPOUT offline output writer 03BA8 4100303C 203 PAR FILENAME filename 03BA9 4100305E 204 PAR FILECKSUM and its checksum 03BAA 40003BD3 205 PARL CKSUMMSG1 line prototype 206 * \ / 207 * Here we read back the CCB so that the file 208 * is left loaded. 209 * \ / 03BAB 61003031 4 210 LD R4 DISKCBP pointer to disk control block 03BAC DC1013E0 @ 211 CALL @VREAD read in the file's CCB 03BAD 4140303A 212 PARV FILEFLAG disk block to read 03BAE 41403018 213 PARV PFCCBBLK place to put the block 03BAF 410030DD 214 PAR FBIBUFF2 buffer for FBI 03BB0 41440013 IMM 215 PARV FBITCCB expecting Code Control Block 03BB1 40003BBC 216 PARL CKSUMDERR where to go if disk error 03BB2 FE0E3453 217 JMP MC back to the main control 218 * --- 219 00003BB3 220 CKSNOFILE LABEL 03BB3 DC4035D2 221 CALLNP OUTSRCHMSG file not found, tell him why 03BB4 FE0E3453 222 JMP MC back to the mainline 223 * --- 224 00003BB5 225 CKSBDTYPE LABEL 03BB5 DC1013F9 @ 226 CALL @VPREPOUT offline output writer 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 100 (P&PCMD1) F 15 Command: CKSUM 03BB6 4100303C 227 PAR FILENAME actual filename 03BB7 40003BCB 228 PARL CKSUMERR2 tell them the file is not a code 03BB8 FE0E3453 229 JMP MC back to the mainline 230 * --- 231 00003BB9 232 BADRANGE LABEL 03BB9 DC1013F9 @ 233 CALL @VPREPOUT offline output writer 03BBA 40003BC0 234 PARL CKSUMERR1 tell them about the bad range 03BBB FE0E3453 235 JMP MC back to the mainline 236 * --- 237 00003BBC 238 CKSUMDERR LABEL 03BBC 6040303A 1 239 LD R1 FILEFLAG load the block number 03BBD DC40350E 240 CALLNP DISKERROUT tell him why it failed 03BBE EC00303A 241 STZ FILEFLAG indicate no file loaded 03BBF FE0E3453 242 JMP MC back to the mainline 243 * --- 244 03BC0 20546865 245 CKSUMERR1 TEXTZ " The range of blocks specified is illegal" 03BCB 2046696C 246 CKSUMERR2 TEXTZ " File \F1\ is not a CODE file" 03BD3 2046696C 247 CKSUMMSG1 TEXTZ " File \F1\ has a checksum of \H2\" 03BDC 86470000 248 LISTOPTION PAK12 L 249 +BADFORM 00003451 F 15 128j 132j 135j BADRANGE 00003BB9 F 15 48j 50j 232= +BEFOREPTR 0000301A F 15 37s 124 +BLOCKS 00003070 F 15 69s 99s 172s +CCBBLK UUUUUUUU F 15 168 180 183s 200a +CCBMAXPAGE 000003E8 F 15 194 +CCKSUM 00003B39 F 15 28 36= +CHECKFILE 0000356A F 15 55 151 CKSBDTYPE 00003BB5 F 15 149j 225= CKSNOFILE 00003BB3 F 15 146j 220= +CKSUMBLK 00003A87 F 15 66 100 177 199 CKSUMDERR 00003BBC F 15 161a 216a 238= CKSUMERR1 00003BC0 F 15 234a 245= CKSUMERR2 00003BCB F 15 228a 246= CKSUMFILE 00003B67 F 15 40j 123= CKSUMMSG1 00003BD3 F 15 205a 247= CKSUMNXT 00003B4A F 15 61= 73j +COLON 0000003A F 15 43 +CPW 00000004 F 15 139 +DATABLK UUUUUUUU F 15 67a 101a 178a +DISKCBP 00003031 F 15 144 155 210 +DISKERROUT 0000350E F 15 240 DOCURFILE 00003B89 F 15 95j 163= ENTCNTLN 00000004 F 15 34= 59 99s 102s 104 165 190 +FBIBUFF2 000030DD F 15 159a 214a +FBITCCB 00000013 F 15 160 215 +FDDA 0008D185 F 15 152 +FDET 0008EA60 F 15 148 FILECKSUM 0000305E F 15 33= 201s 204a +FILEFLAG 0000303A F 15 94 153s 157 212 239 241s +FILENAME 0000303C F 15 125a 138a 203a 227a +FILENMLN 0000000F F 15 139 FINDNXTBLK 00003B8B F 15 167= 195j 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 101 (P&PCMD1) F 15 Command: CKSUM +FLDCHARS 00001F30 F 15 46s +HTYPECODE 00000003 F 15 147 +INBLOCK 0000303B F 15 96 +LDFILENM 0000304B F 15 140a 143a LISTFLAG 0000305C F 15 31= 93s 130s 136s 184 LISTOPTION 00003BDC F 15 134 248= +LOADBLOCK 000037D5 F 15 62 173 +MC 00003453 F 15 64j 83j 105j 175j 217j 222j 229j 235j 242j +MODCHECK 000034DE F 15 150 +MSBLKMASK 000030FE F 15 169 NOLIST 00003B73 F 15 133j 137= +NONEIN UUUUUUUU F 15 97j NONELEFT 00003B58 F 15 72j 80= NOPARMS 00003B5B F 15 39j 92= NOTRANGE 00003B47 F 15 44j 54= +OUTSRCHMSG 000035D2 F 15 221 +PFCCBBLK 00003018 F 15 158 213 +PRINTLINE 00003608 F 15 75 81 103 188 197 PRNTNXT 00003B49 F 15 58= 77j +RADCODE 00003104 F 15 126 +RESULTS 0000306C F 15 68s 102s 179s STOPBLK 0000305D F 15 32= 42s 51s 71 STRTBLK 0000305C F 15 30= 41s 49 56 +TEOL 00003810 F 15 39j 133j +TNUM 00003E10 F 15 40j 48j TRYNXTBLK 00003B9F F 15 170j 185j 186j 192= +VARS 0000305C F 15 30e 31e 32e 33e +VFETCHFNM 000013F6 F 15 127 +VFETCHITMH 000013F8 F 15 38 47 131 +VPREPOUT 000013F9 F 15 202 226 233 +VREAD 000013E0 F 15 156 211 +VSRCHDIR 000013E2 F 15 145 250 END CKSUM command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 102 (P&PCMD1) F 15 Command: CMPR 253 254 ********************************************************************************** 255 * * 256 * CMPRs only ambition in life is to compare two disk blocks * 257 * and relate any differences to the user. The primary block is * 258 * specified by the load command, the second block is specified * 259 * as a parameter. If a difference is found, the index into the * 260 * blocks and the words that differ are displayed. * 261 * * 262 ********************************************************************************** 263 264 BLOCK CMPR command 265 ENTRY CCMPR 266 00003BDE 267 CCMPR LABEL 03BDE 5C00303B 268 CMZ INBLOCK check if block is loaded 03BDF FE084E49 269 JLT NONEIN jump if no block there 03BE0 DC4034DE 270 CALLNP MODCHECK if block modified, write it out first 03BE1 DC40356A 271 CALLNP CHECKFILE if file, always write modified block 272 * \ / 03BE2 DC5013F8 @ 273 CALLNP @VFETCHITMH fetch block number 03BE3 F2783BE7 1 274 JBF R1/TEOL PRESENCE jump if something specified 275 * \ / no parameters, continue for next word 03BE4 608030BD 2 276 LD R2 CPRBLOCK pick up current block number 03BE5 FAAC3C13 2 277 JEQMW R2 PARAMERR error if not okay block number 03BE6 FE0E3BF7 278 JMP RESUMENTRY and go to resume 279 * --- 280 00003BE7 281 PRESENCE LABEL 03BE7 F27E3C13 1 282 JBF R1/TNUM PARAMERR jump if parameter not numeric 283 * \ / 03BE8 E48030BD 2 284 ST R2 CPRBLOCK save block number for read routine 03BE9 EC0030BE 285 STZ WORDOFF indicate to start at beginning 03BEA 60845C00 2 IMM 286 LD R2 ADR CMPRBLK buffer address 03BEB 60441000 1 IMM 287 LD R1 CPP number of characters per page 03BEC FE580000 288 CFILL 00 fill the entire block 289 * \ / 03BED 61003031 4 290 LD R4 DISKCBP address of the disk control block 03BEE DC003570 291 CALL SUBCHECK check if block substituted or not 03BEF 404030BD 292 PARVL CPRBLOCK block number to check on 03BF0 E4090016 0 4 ZBM 293 ST R0 R4,DCBNOSUBS 0 => do subs, 1 => ignore subs 294 * \ / 295 03BF1 DC1013E0 @ 296 CALL @VREAD routine to read a block 03BF2 414030BD 297 PARV CPRBLOCK block to read 03BF3 41403019 298 PARV PFCMPRBLK data buffer 03BF4 410030E8 299 PAR FBIBUFF3 place to put the FBI 03BF5 4147FFFF IMM 300 PARV -1 no FBI type checking 03BF6 40003C10 301 PARL CMPRDERR jump here if errors 302 * \ / 00003BF7 303 RESUMENTRY LABEL 03BF7 604030BE 1 304 LD R1 WORDOFF get index to starting location 03BF8 38225400 0 1 305 LEA R0 DATABLK(R1) loaded block memory address 03BF9 38A25C00 2 1 306 LEA R2 CMPRBLK(R1) comparison block memory address 03BFA 1C440004 1 IMM 307 MUL R1 CPW make char count 03BFB 30441000 1 IMM 308 RSB R1 CPP number of characters per page 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 103 (P&PCMD1) F 15 Command: CMPR 03BFC FE540000 309 CMS check if blocks are equal 03BFD FE0C3C02 310 JNE BLKNOTEQU jump if blocks not equal 00003BFE 311 CMPRXITK LABEL 03BFE D14030BD 312 STMW CPRBLOCK indicate no usable block 00003BFF 313 CMPRXIT LABEL 03BFF 61003031 4 314 LD R4 DISKCBP address of disk control block 03C00 EC090016 4 ZBM 315 STZ R4,DCBNOSUBS normal substitutions 03C01 FE0E3453 316 JMP MC back for more punishment 317 * --- 318 00003C02 319 BLKNOTEQU LABEL 03C02 30441000 1 IMM 320 RSB R1 CPP character index we are at 03C03 604A41E0 1 1 CBM 321 LD R1 R1/BITS 0:29 convert to word index 03C04 E44030BE 1 322 ST R1 WORDOFF put here for PREPOUT 03C05 DC1013F9 @ 323 CALL @VPREPOUT give news to user 03C06 410030BE 324 PAR WORDOFF word offset 03C07 4100303B 325 PAR INBLOCK loaded block number 03C08 41225400 1 326 PAR DATABLK(R1) word from the loaded block 03C09 410030BD 327 PAR CPRBLOCK compare block number 03C0A 41225C00 1 328 PAR CMPRBLK(R1) word from the compare block 03C0B 40003C16 329 PARL CMPRERR1 message prototype 03C0C BC0030BE 0 330 INCL R0 WORDOFF advance for possible restart 03C0D 64040400 0 IMM 331 CPR R0 WPP done complete block? 03C0E FE063BFE 332 JGE CMPRXITK yet, indicate no more and exit 03C0F FE0E3BFF 333 JMP CMPRXIT exit this routine 334 * --- 335 00003C10 336 CMPRDERR LABEL 03C10 604030BD 1 337 LD R1 CPRBLOCK load the block number 03C11 DC40350E 338 CALLNP DISKERROUT tell him why it failed 03C12 FE0E3BFF 339 JMP CMPRXIT finish shit off 340 * --- 341 00003C13 342 PARAMERR LABEL 03C13 DC1013F9 @ 343 CALL @VPREPOUT give news to user 03C14 40003C24 344 PARL CMPRERR2 message prototype 03C15 FE0E3453 345 JMP MC back to main control 346 * --- 347 03C16 20496E64 348 CMPRERR1 TEXTZ " Index = \H1,3\, Blk = \H2,6\:\H3\, Blk = \H4,6\:\H5\" 03C24 20457870 349 CMPRERR2 TEXTZ " Expecting a block number" 350 BLKNOTEQU 00003C02 F 15 310j 319= +CCMPR 00003BDE F 15 265 267= +CHECKFILE 0000356A F 15 271 +CMPRBLK UUUUUUUU F 15 286a 306a 328a CMPRDERR 00003C10 F 15 301a 336= CMPRERR1 00003C16 F 15 329a 348= CMPRERR2 00003C24 F 15 344a 349= CMPRXIT 00003BFF F 15 313= 333j 339j CMPRXITK 00003BFE F 15 311= 332j +CPP 00001000 F 15 287 308 320 +CPRBLOCK 000030BD F 15 276 284s 292 297 312s 327a 337 +CPW 00000004 F 15 307 +DATABLK UUUUUUUU F 15 305a 326a +DCBNOSUBS 00080016 F 15 293s 315s 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 104 (P&PCMD1) F 15 Command: CMPR +DISKCBP 00003031 F 15 290 314 +DISKERROUT 0000350E F 15 338 +FBIBUFF3 000030E8 F 15 299a +INBLOCK 0000303B F 15 268 325a +MC 00003453 F 15 316j 345j +MODCHECK 000034DE F 15 270 +NONEIN UUUUUUUU F 15 269j PARAMERR 00003C13 F 15 277j 282j 342= +PFCMPRBLK 00003019 F 15 298 PRESENCE 00003BE7 F 15 274j 281= RESUMENTRY 00003BF7 F 15 278j 303= +SUBCHECK 00003570 F 15 291 +TEOL 00003810 F 15 274j +TNUM 00003E10 F 15 282j +VFETCHITMH 000013F8 F 15 273 +VPREPOUT 000013F9 F 15 323 343 +VREAD 000013E0 F 15 296 +WORDOFF 000030BE F 15 285s 304 322s 324a 330s +WPP 00000400 F 15 331 351 END CMPR command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 105 (P&PCMD1) F 15 Command: COMMANDS 354 355 ********************************************************************************** 356 * * 357 * COMMANDS is a handy command to provide a list of all * 358 * available commands. * 359 * * 360 ********************************************************************************** 361 362 BLOCK COMMANDS command 363 ENTRY CCOMMAND 364 00003C2B 365 CCOMMAND LABEL 03C2B DC1013F9 @ 366 CALL @VPREPOUT 03C2C 4100347E 367 PAR COMMTAB(0) 03C2D 41003480 368 PAR COMMTAB(2) 03C2E 41003482 369 PAR COMMTAB(4) 03C2F 41003484 370 PAR COMMTAB(6) 03C30 40003C56 371 PARL COMMLINE 372 * \ / 03C31 DC1013F9 @ 373 CALL @VPREPOUT 03C32 41003486 374 PAR COMMTAB(8) 03C33 41003488 375 PAR COMMTAB(10) 03C34 4100348A 376 PAR COMMTAB(12) 03C35 4100348C 377 PAR COMMTAB(14) 03C36 40003C56 378 PARL COMMLINE 379 * \ / 03C37 DC1013F9 @ 380 CALL @VPREPOUT 03C38 4100348E 381 PAR COMMTAB(16) 03C39 41003490 382 PAR COMMTAB(18) 03C3A 41003492 383 PAR COMMTAB(20) 03C3B 41003494 384 PAR COMMTAB(22) 03C3C 40003C56 385 PARL COMMLINE 386 * \ / 03C3D DC1013F9 @ 387 CALL @VPREPOUT 03C3E 41003496 388 PAR COMMTAB(24) 03C3F 41003498 389 PAR COMMTAB(26) 03C40 4100349A 390 PAR COMMTAB(28) 03C41 4100349C 391 PAR COMMTAB(30) 03C42 40003C56 392 PARL COMMLINE 393 * \ / 03C43 DC1013F9 @ 394 CALL @VPREPOUT 03C44 4100349E 395 PAR COMMTAB(32) 03C45 410034A0 396 PAR COMMTAB(34) 03C46 410034A2 397 PAR COMMTAB(36) 03C47 410034A4 398 PAR COMMTAB(38) 03C48 40003C56 399 PARL COMMLINE 400 * \ / 03C49 DC1013F9 @ 401 CALL @VPREPOUT 03C4A 410034A6 402 PAR COMMTAB(40) 03C4B 410034A8 403 PAR COMMTAB(42) 03C4C 410034AA 404 PAR COMMTAB(44) 03C4D 410034AC 405 PAR COMMTAB(46) 03C4E 40003C56 406 PARL COMMLINE 407 * \ / 03C4F DC1013F9 @ 408 CALL @VPREPOUT 03C50 410034AE 409 PAR COMMTAB(48) 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 106 (P&PCMD1) F 15 Command: COMMANDS 03C51 410034B0 410 PAR COMMTAB(50) 03C52 410034B2 411 PAR COMMTAB(52) 03C53 410034B4 412 PAR COMMTAB(54) 03C54 40003C56 413 PARL COMMLINE 03C55 FE0E3453 414 JMP MC 415 * --- 416 03C56 205C7331 417 COMMLINE TEXTZ " \s1,12\ \s2,12\ \s3,12\ \s4,12\" 418 +CCOMMAND 00003C2B F 15 363 365= COMMLINE 00003C56 F 15 371a 378a 385a 392a 399a 406a 413a 417= +COMMTAB 0000347E F 15 367a 368a 369a 370a 374a 375a 376a 377a 381a 382a 383a 384a 388a 389a 390a 391a 395a 396a 397a 398a 402a 403a 404a 405a 409a 410a 411a 412a +MC 00003453 F 15 414j +VPREPOUT 000013F9 F 15 366 373 380 387 394 401 408 419 END COMMANDS comand 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 107 (P&PCMD1) F 15 Command: HELP 422 423 ********************************************************************************** 424 * * 425 * The HELP command is used to give brief descriptions of * 426 * each of the commands. * 427 * * 428 ********************************************************************************** 429 430 BLOCK HELP command 431 ENTRY CHELP 432 0000305C 433 MESPTR EQU VARS(0) holds pointer to current line of help output 434 00003C5F 435 CHELP LABEL 03C5F DC5013F5 @ 436 CALLNP @VFETCHITEM fetch the next item (command name) 03C60 F6783C66 1 437 JBT R1/TEOL GENERAL give general help if no command name 03C61 F27C3451 1 438 JBF R1/TALPH BADFORM must be symbol 03C62 6144001F 5 IMM 439 LD R5 COMMTABL-1 get number of commands in table 440 * \ / 441 00003C63 442 HELPCOMLP LABEL 03C63 66AA347E 23 5 443 CPR2 R2 COMMTAB(R5) look for this command 03C64 FE023C68 444 JEQ HELPCOMFND jump if found 03C65 FB663C63 5 445 JDR R5 HELPCOMLP go back until done 446 * \ / sorry, no such command 447 00003C66 448 GENERAL LABEL 03C66 60043C9D 0 IMM 449 LD R0 ADR HIGENHELP get pointer to general help 03C67 FE0E3C69 450 JMP HELPWPTR and go to general printer 451 * --- 452 00003C68 453 HELPCOMFND LABEL 03C68 602A3C80 0 5 454 LD R0 COMMHELPT(R5) get pointer to the appropriate text 00003C69 455 HELPWPTR LABEL 03C69 E400305C 0 456 ST R0 MESPTR and save for following code 00003C6A 457 HELPNXTLIN LABEL 03C6A 6000305C 0 458 LD R0 MESPTR pick up the message pointer 03C6B 60440064 1 IMM 459 LD R1 100 all lines are shorter than this 03C6C 60840000 2 IMM 460 LD R2 0 we will look for the terminator (null) 03C6D FE560000 461 CSRCH look for its end 03C6E FE0C3C75 462 JNE HELPERR must find terminator 03C6F 30440064 1 IMM 463 RSB R1 100 make line length 03C70 FA423453 1 464 JEQZ R1 MC if another null, done with help 03C71 38960801 2 0 BASE 465 LEA R2 R0,1 make word address of next word 03C72 E080305C 2 466 EXCH R2 MESPTR put this away for next search, and get last to print 03C73 DC5013F4 @ 467 CALLNP @VWRITELINE print out the line 03C74 FE0E3C6A 468 JMP HELPNXTLIN and go for the next line 469 * --- 470 00003C75 471 HELPERR LABEL 03C75 DC1013F9 @ 472 CALL @VPREPOUT call to output desperation message 03C76 40003C78 473 PARL HELPBUG must be bug in internal messages 03C77 FE0E3453 474 JMP MC and back to main control 475 * --- 476 03C78 202A2A2A 477 HELPBUG TEXTZ " *** bug in help routine ***" 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 108 (P&PCMD1) F 15 Command: HELP 478 00003C80 479 COMMHELPT LABEL pointers to the help messages 03C80 00003CBB 480 VFD ADR HIACCOUNT 03C81 00003CF2 481 VFD ADR HIASCAN 03C82 00003D94 482 VFD ADR HICKSUM 03C83 00003E38 483 VFD ADR HICLOSEGAP 484 03C84 00003E38 485 VFD ADR HICLOSEGAP for CLOSEGAPB 03C85 00003F07 486 VFD ADR HICMPR 03C86 00003F8E 487 VFD ADR HICOMMAND 03C87 00003FFA 488 VFD ADR HIDISPLAY 489 03C88 00003FA4 490 VFD ADR HIDISK 03C89 00003FFA 491 VFD ADR HIDISPLAY 03C8A 00004154 492 VFD ADR HIDISPLONG 03C8B 00004241 493 VFD ADR HIDSCAN for DNSCAN 494 03C8C 00004241 495 VFD ADR HIDSCAN 03C8D 000043BB 496 VFD ADR HIEXIT 03C8E 000043CD 497 VFD ADR HIFIND 03C8F 00004409 498 VFD ADR HIFINDSN 499 03C90 0000444A 500 VFD ADR HIHELP 03C91 00004451 501 VFD ADR HILOAD 03C92 000044EA 502 VFD ADR HIMERGE 03C93 00004601 503 VFD ADR HISCAN for NSCAN 504 03C94 0000450C 505 VFD ADR HIOPENGAP 03C95 0000450C 506 VFD ADR HIOPENGAP for OPENGAPB 03C96 000045CE 507 VFD ADR HIRETURN 03C97 00004601 508 VFD ADR HISCAN 509 03C98 000046D7 510 VFD ADR HISSCAN 03C99 000047D8 511 VFD ADR HISUB 03C9A 0000481F 512 VFD ADR HIVOLUME 03C9B 000048B0 513 VFD ADR HIWRITE 514 03C9C 000048F5 515 VFD ADR HIERROR 516 00003C9D 517 HIGENHELP LABEL 03C9D 20466F72 518 TEXTZ " For a list of valid commands, type 'Commands'. For help" 03CAC 20776974 519 TEXTZ " with a specific command, type 'help '." 03CBA 00000000 520 VFD 0 00003CBB 521 HIACCOUNT LABEL 03CBB 20466F72 522 TEXTZ " Formats: ACCOUNT" 03CC0 20202020 523 TEXTZ " ACCOUNT ." 03CCA 20202020 524 TEXTZ " The first format restores DSCAN searching to" 03CD7 206E6F72 525 TEXTZ " normal, the second restricts DSCAN finds to blocks" 03CE4 2062656C 526 TEXTZ " belonging to the specified .." 03CF1 00000000 527 VFD 0 00003CF2 528 HIASCAN LABEL 03CF2 20466F72 529 TEXTZ " Format: ASCAN [:] [,BLOCKS|B]" 03CFE 20202020 530 TEXTZ " ASCAN" 03D02 20000000 531 TEXTZ " " 03D03 20202020 532 TEXTZ " This command will search the ADT for an entry corresponding" 03D14 20746F20 533 TEXTZ " to the given block, or any block in the given range. When it" 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 109 (P&PCMD1) F 15 Command: HELP 03D24 2066696E 534 TEXTZ " finds one, it notifies you of the block that was found, the ADT" 03D35 20626C6F 535 TEXTZ " block in which it was found (which remains the currently loaded" 03D46 20626C6F 536 TEXTZ " block), and the position in the block. It then returns to the" 03D56 20504545 537 TEXTZ " PEEK&POKE prompt. A subsequent ASCAN with no parameters will" 03D66 20636F6E 538 TEXTZ " continue the search from that point (presuming that you are" 03D76 20736561 539 TEXTZ " searching for more than one block). If BLOCKS is specified," 03D86 20746865 540 TEXTZ " the ADT blocks that are examined will be listed." 03D93 00000000 541 VFD 0 00003D94 542 HICKSUM LABEL 03D94 20466F72 543 TEXTZ " Formats: CKSUM" 03D98 20202020 544 TEXTZ " CKSUM " 03DA0 20202020 545 TEXTZ " CKSUM [:]" 03DAC 20202020 546 TEXTZ " CKSUM .:.[,L]" 03DBC 20200000 547 TEXTZ " " 03DBD 20202020 548 TEXTZ " The first format computes the checksum of the currently" 03DCD 206C6F61 549 TEXTZ " loaded block or file. The second format returns the checksum of" 03DDE 20746865 550 TEXTZ " the block specified and leaves it loaded. The third format" 03DEE 20646973 551 TEXTZ " displays the checksum for each block in the specified range" 03DFE 2028696E 552 TEXTZ " (inclusive). The last block of the range is left loaded. The" 03E0E 206C6173 553 TEXTZ " last format computes the overall file checksum. If [,L] was" 03E1E 20737065 554 TEXTZ " specified, it also lists the checksum for each block in the" 03E2E 2066696C 555 TEXTZ " file. The file is left loaded." 03E37 00000000 556 VFD 0 00003E38 557 HICLOSEGAP LABEL 03E38 20466F72 558 TEXTZ " Format: CLOSEGAP " 03E41 20202020 559 TEXTZ " " 03E43 20202020 560 TEXTZ " The CLOSEGAP command is used to remove words from the" 03E52 20637572 561 TEXTZ " currently loaded block. The address specifies the" 03E61 20666972 562 TEXTZ " first of words to remove. The 'gap' is 'closed'" 03E70 20627920 563 TEXTZ " by repeatedly copying the word beyond the gap into the first" 03E80 20776F72 564 TEXTZ " word of the gap, and then zeroing the final words" 03E90 20696E20 565 TEXTZ " in the block. This command is not valid while file patching" 03EA0 20697320 566 TEXTZ " is in progess. The parameter is assumed to be" 03EAE 20686578 567 TEXTZ " hexadecimal, is assumed to be decimal (leading 0" 03EBD 20737065 568 TEXTZ " specifies hexadecimal). It is an error to specify negative" 03ECD 20617267 569 TEXTZ " arguments, or to specify a gap which overlaps the end of the" 03EDD 20626C6F 570 TEXTZ " block." 03EDF 20000000 571 TEXTZ " " 03EE0 20466F72 572 TEXTZ " Format: CLOSEGAPB " 03EEA 20000000 573 TEXTZ " " 03EEB 20202020 574 TEXTZ " This is the same as CLOSEGAP except that the start and" 03EFB 20676170 575 TEXTZ " gapsize are specified in terms of bytes." 03F06 00000000 576 VFD 0 00003F07 577 HICMPR LABEL 03F07 20466F72 578 TEXTZ " Format: CMPR " 03F0F 20202020 579 TEXTZ " " 03F11 20202020 580 TEXTZ " This command compares two disk blocks and relates" 03F1F 20616E79 581 TEXTZ " any differences to the user. The primary block must" 03F2D 20686176 582 TEXTZ " have been loaded by the LOAD command, the second block" 03F3B 20697320 583 TEXTZ " is specified as a parameter. If any difference is found" 03F4A 20746865 584 TEXTZ " the index into the blocks and the words that differ" 03F58 20617265 585 TEXTZ " are displayed. If no differences exist then nothing" 03F66 20697320 586 TEXTZ " is reported. If a difference is reported, then the" 03F74 20636F6D 587 TEXTZ " comparison search may be resumed at the next word by" 03F82 20696E76 588 TEXTZ " invoking the command with no parameters." 03F8D 00000000 589 VFD 0 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 110 (P&PCMD1) F 15 Command: HELP 00003F8E 590 HICOMMAND LABEL 03F8E 20466F72 591 TEXTZ " Format: COMMANDS" 03F93 20202020 592 TEXTZ " " 03F95 20202020 593 TEXTZ " This command prints a list of the valid commands." 03FA3 00000000 594 VFD 0 00003FA4 595 HIDISK LABEL 03FA4 20466F72 596 TEXTZ " Format: DISK DSKscu" 03FAA 20202020 597 TEXTZ " " 03FAC 20776865 598 TEXTZ " where 's' is the VRM slot, 'c' is the PPU channel, and" 03FBA 20277527 599 TEXTZ " 'u' is the disk unit number." 03FC2 20202020 600 TEXTZ " This command is used to select a different disk" 03FD0 20617320 601 TEXTZ " as the target for all subsequent loads. A currently" 03FDE 206C6F61 602 TEXTZ " loaded block may no longer be returned, however it may" 03FEC 20626520 603 TEXTZ " be written onto the new disk with a WRITE command." 03FF9 00000000 604 VFD 0 00003FFA 605 HIDISPLAY LABEL 03FFA 20466F72 606 TEXTZ " Format: D
[]" 04002 20202020 607 TEXTZ " " 04004 20202020 608 TEXTZ " The DISPLAY (or D) command is used to print locations" 04013 2066726F 609 TEXTZ " from the currently loaded block or file (see LOAD). If a" 04022 20626C6F 610 TEXTZ " block is currently loaded, addresses 000 through 3FF will" 04031 20707269 611 TEXTZ " print the corresponding relative location in the block. The" 04041 2073796D 612 TEXTZ " symbols 'FBI0' through 'FBI10' will print the appropriate FBI" 04051 206C6F63 613 TEXTZ " location. When a file is loaded, only locations that have a" 04061 20636F72 614 TEXTZ " corresponding block in the code file may be displayed." 0406F 20202020 615 TEXTZ " The type of display is normally hexadecimal, however, by" 0407F 20666F6C 616 TEXTZ " following the address with a display type, the type of display" 0408F 206D6179 617 TEXTZ " may be changed. The legal display types are 'A' for ascii," 0409F 20274427 618 TEXTZ " 'D' for decimal, 'P' or 'P6' for PAK6, 'P12' for PAK12," 040AE 20275427 619 TEXTZ " 'T' for double word time, 'Z' for single word time, and" 040BD 20274827 620 TEXTZ " 'H' for explicit hexadecimal." 040C5 20202020 621 TEXTZ " Following the display, a user input is expected. A" 040D4 20636172 622 TEXTZ " carriage return will return the user to the command processor" 040E4 20666F72 623 TEXTZ " for another command. A line feed will cause a display of" 040F3 20746865 624 TEXTZ " the next sequential location. Data (of the same type as the" 04103 206F7574 625 TEXTZ " output) typed before either of these terminators will replace" 04113 20746865 626 TEXTZ " the current contents of the location just displayed." 04121 20202020 627 TEXTZ " For the time types, the format for inserting changes is:" 04131 203C6461 628 TEXTZ " [<:second>] [AM|PM]." 04141 20416E79 629 TEXTZ " Any unspecified field will be set to the value originally" 04150 20646973 630 TEXTZ " displayed." 04153 00000000 631 VFD 0 00004154 632 HIDISPLONG LABEL 04154 20466F72 633 TEXTZ " Format: DL
[]" 0415C 20202020 634 TEXTZ " " 0415E 20202020 635 TEXTZ " The DL command prints locations from the currently" 0416D 206C6F61 636 TEXTZ " loaded block or file (see LOAD). This command places from" 0417C 20352074 637 TEXTZ " 5 to 12 words on the output line, depending on the display" 0418B 20747970 638 TEXTZ " type given with the command." 04193 20202020 639 TEXTZ " For blocks,
specifies a location relative" 041A2 20746F20 640 TEXTZ " to the start of the block and has the range 0:3FF. FBI" 041B1 206C6F63 641 TEXTZ " locations are specified by the symbols 'FBI0' through" 041BF 20274642 642 TEXTZ " 'FBI10'. For code files, the specified locations must" 041CD 20636F72 643 TEXTZ " correspond to existing blocks in the file." 041D8 20202020 644 TEXTZ " The default type of display is hexadecimal. The" 041E6 20747970 645 TEXTZ " types that may be explicitly specified are 'A' for ASCII," 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 111 (P&PCMD1) F 15 Command: HELP 041F5 20274427 646 TEXTZ " 'D' for decimal, 'P' or 'P6' for PAK6, 'P12' for PAK12," 04204 20616E64 647 TEXTZ " and 'H' for hexadecimal." 0420B 20202020 648 TEXTZ " User input is expected following the output line. A" 0421A 20636172 649 TEXTZ " carriage return returns the user to the command processor" 04229 20666F72 650 TEXTZ " for another command. A line feed causes the display of" 04238 20746865 651 TEXTZ " the next sequential locations." 04240 00000000 652 VFD 0 00004241 653 HIDSCAN LABEL 04241 20466F72 654 TEXTZ " Format: D(N)SCAN[,t] [':' ]" 0424F 20202020 655 TEXTZ " ['[' [':' ']']] []" 0425F 20202020 656 TEXTZ " " 04261 20202020 657 TEXTZ " These commands search the disk for the specified ." 04272 20546865 658 TEXTZ " The DSCAN command searches for equality, DNSCAN for the first" 04282 20776F72 659 TEXTZ " word NOT matching. If is given, only bit locations" 04291 20636F72 660 TEXTZ " corresponding to one bits in the are compared. If a" 042A1 20737562 661 TEXTZ " subrange is specified, only that range of locations in each" 042B1 20626C6F 662 TEXTZ " block is searched. The subrange specifier must appear within" 042C1 20627261 663 TEXTZ " brackets. The default subrange is the entire block and its" 042D1 20464249 664 TEXTZ " FBI. If is given with no , the default " 042E1 20697320 665 TEXTZ " is . The default is the last block on" 042F0 20746865 666 TEXTZ " the disk. The currently loaded block or file is written out," 04300 20696620 667 TEXTZ " if modified, and unloaded. The scan is terminated when the" 04310 20666972 668 TEXTZ " first match is made or the entire area has been searched. The" 04320 206C6F63 669 TEXTZ " location and unmasked contents of the word found are printed" 04330 20696620 670 TEXTZ " if the search is successful. Entering the command with no" 0433F 20706172 671 TEXTZ " parameters causes the search to resume at the location after" 0434F 20746865 672 TEXTZ " the previous matching word. If only the range is specified," 0435F 20746865 673 TEXTZ " the subrange, pattern, and mask from the previous scan are" 0436E 20757365 674 TEXTZ " used. The block number of the loaded block is always printed" 0437E 2075706F 675 TEXTZ " upon completion of the search." 04386 20202020 676 TEXTZ " Two options are available that cause the scan to continue" 04396 20657665 677 TEXTZ " even after a find. DSCAN,N is a simple continue (NOSTOP) while" 043A7 20445343 678 TEXTZ " DSCAN,L (LIST) causes a LOAD style header to be printed about" 043B7 20746865 679 TEXTZ " the block." 043BA 00000000 680 VFD 0 000043BB 681 HIEXIT LABEL 043BB 20466F72 682 TEXTZ " Format: EXIT" 043BF 20202020 683 TEXTZ " " 043C1 20202020 684 TEXTZ " This command returns control to OPL." 043CC 00000000 685 VFD 0 000043CD 686 HIFIND LABEL 043CD 20466F72 687 TEXTZ " Format: FIND .:." 043DC 20202020 688 TEXTZ " " 043DE 20202020 689 TEXTZ " This command searches the SEC, IDX, UDIR1, and UDIR2" 043ED 20666F72 690 TEXTZ " for the specified file. The block numbers and relative" 043FC 206C6F63 691 TEXTZ " locations of important 'finds' are reported." 04408 00000000 692 VFD 0 00004409 693 HIFINDSN LABEL 04409 20466F72 694 TEXTZ " Format: FINDSN . " 04419 20202020 695 TEXTZ " " 0441B 20202020 696 TEXTZ " This command searches the SEC, IDX, UDIR1, and UDIR2 for" 0442B 20746865 697 TEXTZ " the file specified by serial number. The block numbers and" 0443B 2072656C 698 TEXTZ " relative locations of important 'finds' are reported." 04449 00000000 699 VFD 0 0000444A 700 HIHELP LABEL 0444A 20202020 701 TEXTZ " You do need help." 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 112 (P&PCMD1) F 15 Command: HELP 04450 00000000 702 VFD 0 00004451 703 HILOAD LABEL 04451 20466F72 704 TEXTZ " Format: LOAD" 04455 20202020 705 TEXTZ " " 04457 20202020 706 TEXTZ " LOAD " 0445F 20202020 707 TEXTZ " LOAD @" 04469 20202020 708 TEXTZ " LOAD @, for an individual disk block, OR" 04479 20202000 709 TEXTZ " " 0447A 20202020 710 TEXTZ " LOAD .:." 04489 20202000 711 TEXTZ " " 0448A 20202020 712 TEXTZ " The first format informs the user of the currently" 04499 206C6F61 713 TEXTZ " loaded block or file. The second, third, and fourth formats" 044A9 206C6F61 714 TEXTZ " load a single disk block whose address you specify or which" 044B9 20697320 715 TEXTZ " is to be found in the current block or FBI. The fifth format" 044C9 206C6F61 716 TEXTZ " loads an entire code file. The block or file is then accessible" 044DA 20746F20 717 TEXTZ " to the DISPLAY command for examination or modification." 044E9 00000000 718 VFD 0 000044EA 719 HIMERGE LABEL 044EA 20466F72 720 TEXTZ " Format: MERGE " 044F2 20202020 721 TEXTZ " " 044F4 20202020 722 TEXTZ " The MERGE command does a bit by bit IOR of the current" 04504 20626C6F 723 TEXTZ " block and ." 0450B 00000000 724 VFD 0 0000450C 725 HIOPENGAP LABEL 0450C 20466F72 726 TEXTZ " Format: OPENGAP " 04515 20202020 727 TEXTZ " " 04517 20202020 728 TEXTZ " The OPENGAP command is used to provide 'new' words" 04526 20696E20 729 TEXTZ " in the currently loaded block. Each of the words in the" 04535 206E6577 730 TEXTZ " new gap is set to zero. The gap is created by moving all" 04544 20646174 731 TEXTZ " data above to higher addresses. Old data within" 04553 203C6761 732 TEXTZ " words of the end is lost. This command is not" 04562 2076616C 733 TEXTZ " valid while file patching is in progress. The " 04570 20706172 734 TEXTZ " parameter is assumed to be hexadecimal, is" 0457E 20617373 735 TEXTZ " assumed to be decimal (leading 0 specifies hexadecimal)." 0458D 20497420 736 TEXTZ " It is an error to specify negative arguments, or to" 0459B 20737065 737 TEXTZ " specify a gap which overlaps the end of the block." 045A8 20000000 738 TEXTZ " " 045A9 20466F72 739 TEXTZ " Format: OPENGAPB " 045B2 20000000 740 TEXTZ " " 045B3 20202020 741 TEXTZ " This is the same as OPENGAP except that the start and" 045C2 20676170 742 TEXTZ " gapsize are specified in terms of bytes." 045CD 00000000 743 VFD 0 000045CE 744 HIRETURN LABEL 045CE 20466F72 745 TEXTZ " Format: RETURN" 045D2 20202020 746 TEXTZ " " 045D4 20202020 747 TEXTZ " This command is used to write the current loaded block," 045E4 20776974 748 TEXTZ " with any modifications that have been made, back to the disk" 045F4 20617420 749 TEXTZ " at the same address from which it was read." 04600 00000000 750 VFD 0 00004601 751 HISCAN LABEL 04601 20466F72 752 TEXTZ " Format: (N)SCAN [':' ] []" 04614 20202020 753 TEXTZ " " 04616 20202020 754 TEXTZ " This command searches the currently loaded block (if a" 04626 20626C6F 755 TEXTZ " block is loaded) or the currently loaded file (if a file is" 04636 206C6F61 756 TEXTZ " loaded) for the specified word . The SCAN command" 04646 20736561 757 TEXTZ " searches for equality, NSCAN for the first word NOT matching." 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 113 (P&PCMD1) F 15 Command: HELP 04656 20496620 758 TEXTZ " If is specified, only the bit locations corresponding to" 04667 206F6E65 759 TEXTZ " one bits in the are used to make the comparison. The" 04677 20646566 760 TEXTZ " default is the last word in the file or block." 04687 20546865 761 TEXTZ " The location and unmasked contents of the word found are printed" 04698 20696620 762 TEXTZ " if the search is successful. Entering the command with no" 046A7 20706172 763 TEXTZ " parameters causes the search to resume at the location following" 046B8 20746865 764 TEXTZ " the previous matching word. If only the range is specified, the" 046C9 20706174 765 TEXTZ " pattern and mask from the previous scan are used." 046D6 00000000 766 VFD 0 000046D7 767 HISSCAN LABEL 046D7 20466F72 768 TEXTZ " Format: SSCAN [,RECORDS|R[=]]" 046E4 20202020 769 TEXTZ " [,BLOCKS|B[=]] [,LIST|L[=]]" 046F3 20202020 770 TEXTZ " " 046F5 20202020 771 TEXTZ " This command will verify that the specified SAF file" 04704 20636F6E 772 TEXTZ " contains no disk structure errors. When an inconsistency" 04713 20697320 773 TEXTZ " is found the appropriate block or record is displayed. If" 04722 20746865 774 TEXTZ " the error is recoverable the remainder of the file is still" 04732 20636865 775 TEXTZ " checked. The RECORDS|R option will display the block and" 04741 20726563 776 TEXTZ " record locations of the records. Locations are given in the" 04751 20666F72 777 TEXTZ " format of Word Offset/Character Offset/Record Length. The" 04760 20424C4F 778 TEXTZ " BLOCKS|B option will display only the blocks of the file." 0476F 20546865 779 TEXTZ " The LIST|L option will list out the file's text in ASCII" 0477E 20666F72 780 TEXTZ " format to the standard output device. If the LIST|L option" 0478E 20697320 781 TEXTZ " is specified then no other options are allowed. If the" 0479D 206F7074 782 TEXTZ " optional parameter , which is considered a hex" 047AB 20646973 783 TEXTZ " disk block address, is specified, the listing of records," 047BA 20626C6F 784 TEXTZ " blocks or text begins at that block number. If " 047C9 20697320 785 TEXTZ " is not specified, the start of the file is assumed." 047D7 00000000 786 VFD 0 000047D8 787 HISUB LABEL 047D8 20466F72 788 TEXTZ " Format: SUBST " 047DF 20000000 789 TEXTZ " " 047E0 20202020 790 TEXTZ " This command will make a substitution for the given block," 047F0 20776869 791 TEXTZ " which presumably is one that is causing many errors. If this" 04800 20636F6D 792 TEXTZ " command is used in the on-line environment, the current disk" 04810 206D7573 793 TEXTZ " must have been already mounted before entering ONPL." 0481E 00000000 794 VFD 0 0000481F 795 HIVOLUME LABEL 0481F 20466F72 796 TEXTZ " Format: VOLUME | " 0482B 20000000 797 TEXTZ " " 0482C 20202020 798 TEXTZ " This command is similar to the DISK command except that" 0483C 20697420 799 TEXTZ " it expects either a volume name or an account name, from which" 0484C 20697420 800 TEXTZ " it will derive the desired disk name. (If the account does not" 0485D 20657869 801 TEXTZ " exist, you will get the system volume.)" 04868 20202020 802 TEXTZ " This command is used to select a different disk as the" 04878 20746172 803 TEXTZ " target for all subsequent loads. A currently loaded block" 04887 206D6179 804 TEXTZ " may no longer be returned, however it may be written onto the" 04897 206E6577 805 TEXTZ " new disk with a WRITE command." 0489F 20202020 806 TEXTZ " This command is only available in the online environment." 048AF 00000000 807 VFD 0 000048B0 808 HIWRITE LABEL 048B0 20466F72 809 TEXTZ " Format: WRITE " 048B8 20202020 810 TEXTZ " " 048BA 20202020 811 TEXTZ " This command is used to write a previously loaded block" 048CA 20746F20 812 TEXTZ " to a new location on the disk. Note that you are responsible" 048DA 20666F72 813 TEXTZ " for fixing any fields that the operating system validates" 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 114 (P&PCMD1) F 15 Command: HELP 048E9 2028696E 814 TEXTZ " (including MSDA) except for the checksum." 048F4 00000000 815 VFD 0 000048F5 816 HIERROR LABEL 048F5 202A2A2A 817 TEXTZ " *** no corresponding command ***" 048FE 00000000 818 VFD 0 819 +BADFORM 00003451 F 15 438j +CHELP 00003C5F F 15 431 435= COMMHELPT 00003C80 F 15 454 479= +COMMTAB 0000347E F 15 443 +COMMTABL 00000020 F 15 439 GENERAL 00003C66 F 15 437j 448= HELPBUG 00003C78 F 15 473a 477= HELPCOMFND 00003C68 F 15 444j 453= HELPCOMLP 00003C63 F 15 442= 445j HELPERR 00003C75 F 15 462j 471= HELPNXTLIN 00003C6A F 15 457= 468j HELPWPTR 00003C69 F 15 450j 455= HIACCOUNT 00003CBB F 15 480a 521= HIASCAN 00003CF2 F 15 481a 528= HICKSUM 00003D94 F 15 482a 542= HICLOSEGAP 00003E38 F 15 483a 485a 557= HICMPR 00003F07 F 15 486a 577= HICOMMAND 00003F8E F 15 487a 590= HIDISK 00003FA4 F 15 490a 595= HIDISPLAY 00003FFA F 15 488a 491a 605= HIDISPLONG 00004154 F 15 492a 632= HIDSCAN 00004241 F 15 493a 495a 653= HIERROR 000048F5 F 15 515a 816= HIEXIT 000043BB F 15 496a 681= HIFIND 000043CD F 15 497a 686= HIFINDSN 00004409 F 15 498a 693= HIGENHELP 00003C9D F 15 449a 517= HIHELP 0000444A F 15 500a 700= HILOAD 00004451 F 15 501a 703= HIMERGE 000044EA F 15 502a 719= HIOPENGAP 0000450C F 15 505a 506a 725= HIRETURN 000045CE F 15 507a 744= HISCAN 00004601 F 15 503a 508a 751= HISSCAN 000046D7 F 15 510a 767= HISUB 000047D8 F 15 511a 787= HIVOLUME 0000481F F 15 512a 795= HIWRITE 000048B0 F 15 513a 808= +MC 00003453 F 15 464j 474j MESPTR 0000305C F 15 433= 456s 458 466s +TALPH 00003C10 F 15 438j +TEOL 00003810 F 15 437j +VARS 0000305C F 15 433e +VFETCHITEM 000013F5 F 15 436 +VPREPOUT 000013F9 F 15 472 +VWRITELINE 000013F4 F 15 467 820 END HELP command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 115 (P&PCMD1) F 15 Command: EXIT 823 824 ********************************************************************************** 825 * * 826 * Leave this program and return to OPL. * 827 * * 828 ********************************************************************************** 829 830 BLOCK EXIT command 831 ENTRY CEXIT 832 000048FF 833 CEXIT LABEL 048FF DC4034DE 834 CALLNP MODCHECK see if block is modified 04900 60403078 1 835 LD R1 ORIGIAD value 04901 FA484907 1 836 JLTZ R1 JUSTEXIT 04902 600400EB 0 IMM 837 LD R0 URPSETREG+REGIAD restore IAD 04903 09040000 IMM 838 UREQ 0 call OS, ignore error 04904 600400EA 0 IMM 839 LD R0 URPSETREG+REGIMR restore IMR 04905 60403077 1 840 LD R1 ORIGIMR value 04906 09040000 IMM 841 UREQ 0 call OS, ignore error 842 * \ / 00004907 843 JUSTEXIT LABEL 04907 5C8013F0 844 LDPC VDONEEXIT exit to OPL 845 * --- 846 +CEXIT 000048FF F 15 831 833= JUSTEXIT 00004907 F 15 836j 843= +MODCHECK 000034DE F 15 834 +ORIGIAD 00003078 F 15 835 +ORIGIMR 00003077 F 15 840 +REGIAD 0000000B F 15 837 +REGIMR 0000000A F 15 839 +URPSETREG 000000E0 F 15 837 839 +VDONEEXIT 000013F0 F 15 844 847 END EXIT command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 116 (P&PCMD1) F 15 Command: FIND and FINDSN 850 851 ********************************************************************************** 852 * * 853 * The FIND command searches the directory for a file, * 854 * and returns the following information: * 855 * - the security block number * 856 * - the IDX bucket number within the security block * 857 * - the IDX block number * 858 * - the offset to the IDX entry for the relevant account * 859 * - the UDIR1 block number * 860 * - the offset in the UDIR1 block to the FDE or secondary * 861 * index entry * 862 * - the UDIR2 block number, if any * 863 * - the offset in the UDIR2 block to the FDE * 864 * - the first block number of the file * 865 * * 866 * The command format is: FIND * 867 * * 868 * The FINDSN command works exactly the same, except that the * 869 * file is specified by serial number. The command format is: * 870 * FINDSN * 871 * * 872 ********************************************************************************** 873 874 BLOCK FIND/FINDSN commands 875 ENTRY CFIND 876 ENTRY CFINDSN 877 00004908 878 CFINDSN LABEL 04908 6144303C 5 IMM 879 LD R5 ADR FILENAME where to parse the account name 04909 60C40000 3 IMM 880 LD R3 0 default extension 0490A DC5013F6 @ 881 CALLNP @VFETCHFNM pack up the account name 0490B FA083451 0 882 JLTZ R0 BADFORM jump if garbage 883 884 * Okay, we now have an account name in the file name spot. 885 * Move it up. 886 0490C 60043041 0 IMM 887 LD R0 ADR FILENAME(5) get the source 0490D 60440028 1 IMM 888 LD R1 2*5*CPW get the length 0490E 6084303C 2 IMM 889 LD R2 ADR FILENAME(0) and destination 0490F FE400000 890 CMOVE move up the file name stuff 04910 60440014 1 IMM 891 LD R1 5*CPW get length for file name part 04911 FE580000 892 CFILL 000 walk on file name (for cleanliness) 893 * \ / 04912 DC5013F8 @ 894 CALLNP @VFETCHITMH call for the high serial number 04913 F27E3451 1 895 JBF R1/TNUM BADFORM if not number, error 04914 E4803046 2 896 ST R2 FILENAME(10) save high serial number 897 * \ / 04915 DC5013F8 @ 898 CALLNP @VFETCHITMH call for the low serial number 04916 F27E3451 1 899 JBF R1/TNUM BADFORM if not number, error 04917 E4803047 2 900 ST R2 FILENAME(11) save low serial number 901 * \ / 04918 61443041 5 IMM 902 LD R5 ADR FILENAME(5) get pointer to file specifier block 04919 61003031 4 903 LD R4 DISKCBP get pointer to disk control block 0491A DC5013EE @ 904 CALLNP @VSRCHDIRSN search directory by serial number 0491B 61124000 4 1 REG 905 LD R4 R1 copy result block pointer to R4 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 117 (P&PCMD1) F 15 Command: FIND and FINDSN 0491C FAF0492C 3 906 JZA R3 FSNNOTFND jump if the file was not found 0491D 6216C802 013 BASE 907 LD2 R0 R3,FDNAME otherwise, get the name 0491E E6003046 01 908 ST2 R0 FILENAME(5) put into printout location 909 * (remember that the index of 5 is doubled) 0491F 6016C804 0 3 BASE 910 LD R0 R3,FDEXTEN and extension 04920 E4003048 0 911 ST R0 FILENAME(12) 04921 DC1013F9 @ 912 CALL @VPREPOUT tell operator what the file name is 04922 4100303C 913 PAR FILENAME indicate where name is 04923 40004927 914 PARL MSGFNAME and the message 04924 DC403666 915 CALLNP GOTFILE now print out remainder of information 04925 FE0E3451 916 JMP BADFORM bad format 917 * \ / 04926 FE0E3453 918 JMP MC all done 919 * --- 920 04927 2046696C 921 MSGFNAME TEXTZ " File \F1\ found." 922 0000492C 923 FSNNOTFND LABEL 0492C 64040006 0 IMM 924 CPR R0 6 check for just a no find 0492D FE02492F 925 JEQ BEFORSRCH print more file information 926 * \ / only error was file not found. 0492E DC4035D2 927 CALLNP OUTSRCHMSG explain why no file 0000492F 928 BEFORSRCH LABEL 0492F DC1013F9 @ 929 CALL @VPREPOUT print error without trying to print file name 04930 40004934 930 PARL MSGNOFILE 04931 DC403666 931 CALLNP GOTFILE and print remainder of information 04932 FE0E3451 932 JMP BADFORM bad format 933 * \ / 04933 FE0E3453 934 JMP MC all done 935 * --- 936 04934 2046696C 937 MSGNOFILE TEXTZ " File not found." 938 00004939 939 CFIND LABEL 04939 DC403659 940 CALLNP FINDFIL find the file 0493A FE0E3451 941 JMP BADFORM bad format 942 * \ / 0493B FE0E3453 943 JMP MC all done 944 * --- +BADFORM 00003451 F 15 882j 895j 899j 916j 932j 941j BEFORSRCH 0000492F F 15 925j 928= +CFIND 00004939 F 15 875 939= +CFINDSN 00004908 F 15 876 878= +CPW 00000004 F 15 888 891 +DISKCBP 00003031 F 15 903 +FDEXTEN 0016C804 F 15 910 +FDNAME 0016C802 F 15 907 +FILENAME 0000303C F 15 879a 887a 889a 896s 900s 902a 908s 911s 913a +FINDFIL 00003659 F 15 940 FSNNOTFND 0000492C F 15 906j 923= +GOTFILE 00003666 F 15 915 931 +MC 00003453 F 15 918j 934j 943j MSGFNAME 00004927 F 15 914a 921= MSGNOFILE 00004934 F 15 930a 937= +OUTSRCHMSG 000035D2 F 15 927 +TNUM 00003E10 F 15 895j 899j 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 118 (P&PCMD1) F 15 Command: FIND and FINDSN +VFETCHFNM 000013F6 F 15 881 +VFETCHITMH 000013F8 F 15 894 898 +VPREPOUT 000013F9 F 15 912 929 +VSRCHDIRSN 000013EE F 15 904 945 END FIND/FINDSN commands 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 119 (P&PCMD1) F 15 Command: LOAD 948 949 ********************************************************************************** 950 * * 951 * The LOAD command reads in the specified disk block from * 952 * the selected disk. The block is initialized as unmodified. * 953 * The FBI will be inspected and the user will be told about * 954 * its contents. * 955 * The LOAD command can also access a file so that it can be * 956 * patched. The specified file is looked for on the currently * 957 * selected disk. Thereafter, the locations that are displayed * 958 * are mapped into the address space of the selected code file. * 959 * * 960 * The command format is: LOAD * 961 * LOAD @ * 962 * or LOAD * 963 * * 964 ********************************************************************************** 965 966 BLOCK LOAD command 967 ENTRY CLOAD 968 0000305D 969 TEMPBLK EQU VARS(1) holds next current block number 0000305E 970 INDIRECT EQU VARS(2) signifies "@address" form used 971 0000493C 972 CLOAD LABEL 0493C 60170001 0 4 CACH 973 LD R0 CACH R4,1 peek at next input char 0493D 64040040 0 IMM 974 CPR R0 "@" indirect address? 0493E EC40305E 975 STLEQ INDIRECT 0493F FE0C4941 976 JNE GETBLKNUM no, proceed normally 04940 D00B1F30 4 CBM 977 INC R4/FLDCHARS skip over the "@" 00004941 978 GETBLKNUM LABEL 04941 E500301A 4 979 ST R4 BEFOREPTR save the beginning of the param 04942 DC5013F8 @ 980 CALLNP @VFETCHITMH get the block number 04943 F6784997 1 981 JBT R1/TEOL DISPLOAD if eol, tell whats loaded 04944 5C00305E 982 CMZ INDIRECT 04945 FE024950 983 JEQ NOINDIRECT 04946 F27E494A 1 984 JBF R1/TNUM TRYFBI if indirect, might be FBIxx 04947 788403FF 2 IMM 985 AND R2 WPP-1 prepare block index 04948 60A45400 2 2 986 LD R2 DATABLK(R2) now we have the real disk address 04949 FE0E4951 987 JMP GOTBLKNUM 988 * --- 0000494A 989 TRYFBI LABEL 0494A DC403745 990 CALLNP GETFBIINDX 0494B FA823451 2 991 JEQZ R2 BADFORM 0494C 70928000 2 2 REG 992 LDN R2 R2 i don't know why r2 is returned this way 0494D 3084000B 2 IMM 993 RSB R2 11 but this gets us the index into the fbi 0494E 60A430D2 2 2 994 LD R2 FBIBUFF(R2) now we have the disk address 0494F FE0E4951 995 JMP GOTBLKNUM 996 * --- 00004950 997 NOINDIRECT LABEL 04950 F27E496B 1 998 JBF R1/TNUM LOADFILE if not a block number, check for filename 00004951 999 GOTBLKNUM LABEL 04951 608A9180 2 2 CBM 1000 LD R2 R2/MSBLKFIELD 04952 E480305D 2 1001 ST R2 TEMPBLK save the real block number 1002 * \ / 04953 DC4034DE 1003 CALLNP MODCHECK see if the current buffer is OK 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 120 (P&PCMD1) F 15 Command: LOAD 04954 DC40356A 1004 CALLNP CHECKFILE exit file mode if we're in it 1005 * \ / 04955 6000305D 0 1006 LD R0 TEMPBLK get given block 04956 E400303B 0 1007 ST R0 INBLOCK save as current block 04957 EC003075 1008 STZ MODFLAG the block is so far unmodified 04958 60845400 2 IMM 1009 LD R2 ADR DATABLK zero fill the page before attempting read 04959 60441000 1 IMM 1010 LD R1 CPP how much to fill 0495A FE580000 1011 CFILL 00 1012 * \ / 0495B 61003031 4 1013 LD R4 DISKCBP pointer to disk control block 0495C DC003570 1014 CALL SUBCHECK see if block needs special handling 0495D 4040303B 1015 PARVL INBLOCK block number 0495E E4090016 0 4 ZBM 1016 ST R0 R4,DCBNOSUBS indicates whether to ignore subs list or not 1017 * \ / 1018 0495F DC1013E0 @ 1019 CALL @VREAD read in the disk block 04960 4140303B 1020 PARV INBLOCK 04961 41403017 1021 PARV PFDATABLK read it into window 1 04962 410030D2 1022 PAR FBIBUFF 04963 4147FFFF IMM 1023 PARV -1 no FBI checking 04964 40004966 1024 PARL LOADDERR where to go for disk error 04965 FE0E4968 1025 JMP READOK 1026 * --- 1027 1028 * A disk error. We print out the type of error message and goto main control 00004966 1029 LOADDERR LABEL 04966 6040303B 1 1030 LD R1 INBLOCK load the block number 04967 DC40350E 1031 CALLNP DISKERROUT tell him why it failed 1032 * \ / 1033 00004968 1034 READOK LABEL 04968 DC4036D5 1035 CALLNP DOFBICHECK compute checksum, check disk address 04969 DC403824 1036 CALLNP DESCRBLK describe the block 0496A FE0E3453 1037 JMP MC go get next command 1038 * --- 1039 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 121 (P&PCMD1) F 15 Command: LOAD 1041 1042 ********************************************************************************** 1043 * * 1044 * The param is a symbol so we try to pack a file specifier. * 1045 * That file is then looked up on the disk and, if found, we read * 1046 * in the file's CCB and set up to do the file address mapping. * 1047 * * 1048 ********************************************************************************** 1049 0000496B 1050 LOADFILE LABEL 0496B DC4034DE 1051 CALLNP MODCHECK see if the current buffer is OK 0496C DC40356A 1052 CALLNP CHECKFILE exit file mode if we're in it 0496D D140303B 1053 STMW INBLOCK indicate no block loaded 0496E 60003031 0 1054 LD R0 DISKCBP pointer to disk control block 0496F EC080016 0 ZBM 1055 STZ R0,DCBNOSUBS no special substitution handling 04970 6100301A 4 1056 LD R4 BEFOREPTR get pointer to beginning of filename 04971 6144303C 5 IMM 1057 LD R5 ADR FILENAME pointer to block 04972 60C03104 3 1058 LD R3 RADCODE assume a code file 04973 DC5013F6 @ 1059 CALLNP @VFETCHFNM try to pack the filename 04974 FA083451 0 1060 JLTZ R0 BADFORM error if not 04975 61443041 5 IMM 1061 LD R5 ADR FILENAME(5) 04976 61003031 4 1062 LD R4 DISKCBP 04977 DC5013E2 @ 1063 CALLNP @VSRCHDIR look for the file 04978 FAF049B4 3 1064 JZA R3 LOADNOFIL jump if the file is not found 04979 60040003 0 IMM 1065 LD R0 HTYPECODE 0497A 6408EA60 0 3 ZBM 1066 CPR R0 R3,FDET see if we found a code file 0497B FE0C49B6 1067 JNE NOTOKTYPE error if not 0497C 6008D185 0 3 ZBM 1068 LD R0 R3,FDDA get the CCB address 0497D E400303A 0 1069 ST R0 FILEFLAG save addr and say we're file patching 0497E 6004303C 0 IMM 1070 LD R0 ADR FILENAME filename trying to load 0497F 6044003C 1 IMM 1071 LD R1 FILENMLN*CPW file name length 04980 6084304B 2 IMM 1072 LD R2 ADR LDFILENM last loaded filename 04981 FE400000 1073 CMOVE remember the name 1074 * \ / 04982 61003031 4 1075 LD R4 DISKCBP 04983 DC1013E0 @ 1076 CALL @VREAD read in the file's CCB 04984 4140303A 1077 PARV FILEFLAG 04985 41403018 1078 PARV PFCCBBLK 04986 410030D2 1079 PAR FBIBUFF 04987 41440013 IMM 1080 PARV FBITCCB 04988 400049C1 1081 PARL LOADDERRX 1082 * \ / 04989 DC1013F9 @ 1083 CALL @VPREPOUT tell him we found the file 0498A 4100303C 1084 PAR FILENAME 0498B 4100303A 1085 PAR FILEFLAG 0498C 4000498E 1086 PARL FILEINM 0498D FE0E3453 1087 JMP MC 1088 * --- 1089 0498E 2046696C 1090 FILEINM TEXTZ " File \F1\ loaded. CCB = \H2,6\." 1091 00004997 1092 DISPLOAD LABEL 04997 5C00303A 1093 CMZ FILEFLAG is a file loaded 04998 FE02499E 1094 JEQ NOFILELD jump if no file loaded 04999 DC5013F9 @ 1095 CALLNP @VPREPOUT offline output writer 0499A 4100303B 1096 PAR INBLOCK current block 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 122 (P&PCMD1) F 15 Command: LOAD 0499B 4100304B 1097 PAR LDFILENM current file 0499C 400049A2 1098 PARL DISPLDMSG1 line prototype 0499D FE0E3453 1099 JMP MC go get next command 1100 * --- 1101 0000499E 1102 NOFILELD LABEL 0499E DC5013F9 @ 1103 CALLNP @VPREPOUT offline output writer 0499F 4100303B 1104 PAR INBLOCK current block 049A0 400049AE 1105 PARL DISPLDMSG2 line prototype 049A1 FE0E3453 1106 JMP MC go get next command 1107 * --- 1108 049A2 20437572 1109 DISPLDMSG1 TEXTZ " Current block = \H1,6\ Current file = \F2\" 049AE 20437572 1110 DISPLDMSG2 TEXTZ " Current block = \H1,6\" 1111 1112 * The file was not found. Tell him why. 000049B4 1113 LOADNOFIL LABEL 049B4 DC4035D2 1114 CALLNP OUTSRCHMSG write the error message 049B5 FE0E3453 1115 JMP MC 1116 * --- 1117 1118 * The file was not a code file. 000049B6 1119 NOTOKTYPE LABEL 049B6 DC5013F9 @ 1120 CALLNP @VPREPOUT 049B7 4100303C 1121 PAR FILENAME 049B8 400049BA 1122 PARL NOTOKTYPEM 049B9 FE0E3453 1123 JMP MC go get next command 1124 * --- 1125 049BA 2046696C 1126 NOTOKTYPEM TEXTZ " File \F1\ not a CODE file." 1127 1128 * A disk error happened. 000049C1 1129 LOADDERRX LABEL 049C1 6040303A 1 1130 LD R1 FILEFLAG load the block number 049C2 DC40350E 1131 CALLNP DISKERROUT tell him why it failed 049C3 EC00303A 1132 STZ FILEFLAG can't process the file 049C4 FE0E3453 1133 JMP MC and get next command 1134 * --- 1135 +BADFORM 00003451 F 15 991j 1060j +BEFOREPTR 0000301A F 15 979s 1056 +CHECKFILE 0000356A F 15 1004 1052 +CLOAD 0000493C F 15 967 972= +CPP 00001000 F 15 1010 +CPW 00000004 F 15 1071 +DATABLK UUUUUUUU F 15 986 1009a +DCBNOSUBS 00080016 F 15 1016s 1055s +DESCRBLK 00003824 F 15 1036 +DISKCBP 00003031 F 15 1013 1054 1062 1075 +DISKERROUT 0000350E F 15 1031 1131 DISPLDMSG1 000049A2 F 15 1098a 1109= DISPLDMSG2 000049AE F 15 1105a 1110= DISPLOAD 00004997 F 15 981j 1092= +DOFBICHECK 000036D5 F 15 1035 +FBIBUFF 000030D2 F 15 994 1022a 1079a +FBITCCB 00000013 F 15 1080 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 123 (P&PCMD1) F 15 Command: LOAD +FDDA 0008D185 F 15 1068 +FDET 0008EA60 F 15 1066 +FILEFLAG 0000303A F 15 1069s 1077 1085a 1093 1130 1132s FILEINM 0000498E F 15 1086a 1090= +FILENAME 0000303C F 15 1057a 1061a 1070a 1084a 1121a +FILENMLN 0000000F F 15 1071 +FLDCHARS 00001F30 F 15 977s GETBLKNUM 00004941 F 15 976j 978= +GETFBIINDX 00003745 F 15 990 GOTBLKNUM 00004951 F 15 987j 995j 999= +HTYPECODE 00000003 F 15 1065 +INBLOCK 0000303B F 15 1007s 1015 1020 1030 1053s 1096a 1104a INDIRECT 0000305E F 15 970= 975s 982 +LDFILENM 0000304B F 15 1072a 1097a LOADDERR 00004966 F 15 1024a 1029= LOADDERRX 000049C1 F 15 1081a 1129= LOADFILE 0000496B F 15 998j 1050= LOADNOFIL 000049B4 F 15 1064j 1113= +MC 00003453 F 15 1037j 1087j 1099j 1106j 1115j 1123j 1133j +MODCHECK 000034DE F 15 1003 1051 +MODFLAG 00003075 F 15 1008s +MSBLKFIELD 00001180 F 15 1000 NOFILELD 0000499E F 15 1094j 1102= NOINDIRECT 00004950 F 15 983j 997= NOTOKTYPE 000049B6 F 15 1067j 1119= NOTOKTYPEM 000049BA F 15 1122a 1126= +OUTSRCHMSG 000035D2 F 15 1114 +PFCCBBLK 00003018 F 15 1078 +PFDATABLK 00003017 F 15 1021 +RADCODE 00003104 F 15 1058 READOK 00004968 F 15 1025j 1034= +SUBCHECK 00003570 F 15 1014 TEMPBLK 0000305D F 15 969= 1001s 1006 +TEOL 00003810 F 15 981j +TNUM 00003E10 F 15 984j 998j TRYFBI 0000494A F 15 984j 989= +VARS 0000305C F 15 969e 970e +VFETCHFNM 000013F6 F 15 1059 +VFETCHITMH 000013F8 F 15 980 +VPREPOUT 000013F9 F 15 1083 1095 1103 1120 +VREAD 000013E0 F 15 1019 1076 +VSRCHDIR 000013E2 F 15 1063 +WPP 00000400 F 15 985 1136 END LOAD command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 124 (P&PCMD1) F 15 Command: MERGE 1139 1140 ********************************************************************************** 1141 * * 1142 * MERGE takes the named block and IORs it with the current * 1143 * block (not the FBI). * 1144 * * 1145 ********************************************************************************** 1146 1147 BLOCK MERGE command 1148 ENTRY CMERGE 1149 0000305C 1150 MRGBLOCK EQU VARS(0) holds the block number to compare 1151 000049C5 1152 CMERGE LABEL 049C5 5C00303B 1153 CMZ INBLOCK check if block is loaded 049C6 FE084E49 1154 JLT NONEIN jump if no block there 049C7 5C00303A 1155 CMZ FILEFLAG can't be patching 049C8 FE0C4E49 1156 JNE NONEIN 'No block read in', and JMP MC 1157 * \ / 049C9 DC5013F8 @ 1158 CALLNP @VFETCHITMH fetch block number 049CA F27E49E6 1 1159 JBF R1/TNUM PARAMERR jump if not numeric 1160 * \ / 049CB E480305C 2 1161 ST R2 MRGBLOCK save block number for read routine 049CC 60845C00 2 IMM 1162 LD R2 ADR CMPRBLK buffer address 049CD 60441000 1 IMM 1163 LD R1 CPP number of characters per page 049CE FE580000 1164 CFILL 00 file the entire block 1165 * \ / 049CF 61003031 4 1166 LD R4 DISKCBP address of the disk control block 049D0 DC003570 1167 CALL SUBCHECK check if block substituted or not 049D1 4040305C 1168 PARVL MRGBLOCK block number to check on 049D2 E4090016 0 4 ZBM 1169 ST R0 R4,DCBNOSUBS 0 => do subs, 1 => ignore subs 1170 * \ / 1171 049D3 DC1013E0 @ 1172 CALL @VREAD routine to read a block 049D4 4140305C 1173 PARV MRGBLOCK block to read 049D5 41403019 1174 PARV PFCMPRBLK data buffer 049D6 410030E8 1175 PAR FBIBUFF3 place to put the FBI 049D7 4147FFFF IMM 1176 PARV -1 no FBI type checking 049D8 400049E3 1177 PARL MERGEDERR jump here if errors 1178 * \ / 049D9 60C45400 3 IMM 1179 LD R3 ADR DATABLK loaded block pointer 049DA 60845C00 2 IMM 1180 LD R2 ADR CMPRBLK block to merge in 049DB 604403FF 1 IMM 1181 LD R1 WPP-1 number of words per page 000049DC 1182 MERGELOOP LABEL 049DC 601C8800 0 21 BASE 1183 LD R0 R2,0(R1) load the merging data 049DD FC1CC800 0 31 BASE 1184 IORM R0 R3,0(R1) merge with current block 049DE FA6649DC 1 1185 JDR R1 MERGELOOP finish entire page 1186 * \ / 049DF EDC03075 1187 STW MODFLAG say the thing is modified 1188 * \ / 000049E0 1189 MERGEXIT LABEL 049E0 61003031 4 1190 LD R4 DISKCBP address of disk control block 049E1 EC090016 4 ZBM 1191 STZ R4,DCBNOSUBS normal substitutions 049E2 FE0E3453 1192 JMP MC back for more punishment 1193 * --- 1194 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 125 (P&PCMD1) F 15 Command: MERGE 000049E3 1195 MERGEDERR LABEL 049E3 6040305C 1 1196 LD R1 MRGBLOCK load the block number 049E4 DC40350E 1197 CALLNP DISKERROUT tell him why it failed 049E5 FE0E49E0 1198 JMP MERGEXIT finish shit off 1199 * --- 1200 000049E6 1201 PARAMERR LABEL 049E6 DC1013F9 @ 1202 CALL @VPREPOUT give news to user 049E7 400049E9 1203 PARL MERGEERR1 message prototype 049E8 FE0E3453 1204 JMP MC back to main control 1205 * --- 1206 049E9 20457870 1207 MERGEERR1 TEXTZ " Expecting a block number" 1208 +CMERGE 000049C5 F 15 1148 1152= +CMPRBLK UUUUUUUU F 15 1162a 1180a +CPP 00001000 F 15 1163 +DATABLK UUUUUUUU F 15 1179a +DCBNOSUBS 00080016 F 15 1169s 1191s +DISKCBP 00003031 F 15 1166 1190 +DISKERROUT 0000350E F 15 1197 +FBIBUFF3 000030E8 F 15 1175a +FILEFLAG 0000303A F 15 1155 +INBLOCK 0000303B F 15 1153 +MC 00003453 F 15 1192j 1204j MERGEDERR 000049E3 F 15 1177a 1195= MERGEERR1 000049E9 F 15 1203a 1207= MERGELOOP 000049DC F 15 1182= 1185j MERGEXIT 000049E0 F 15 1189= 1198j +MODFLAG 00003075 F 15 1187s MRGBLOCK 0000305C F 15 1150= 1161s 1168 1173 1196 +NONEIN UUUUUUUU F 15 1154j 1156j PARAMERR 000049E6 F 15 1159j 1201= +PFCMPRBLK 00003019 F 15 1174 +SUBCHECK 00003570 F 15 1167 +TNUM 00003E10 F 15 1159j +VARS 0000305C F 15 1150e +VFETCHITMH 000013F8 F 15 1158 +VPREPOUT 000013F9 F 15 1202 +VREAD 000013E0 F 15 1172 +WPP 00000400 F 15 1181 1209 END MERGE command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 126 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 1212 1213 ********************************************************************************** 1214 * * 1215 * DISPLAY will display the contents of some location of * 1216 * the loaded page in the specified format. The number given * 1217 * is the location to be displayed or the "name" of the FBI * 1218 * location to look at. * 1219 * * 1220 * The command format is: DISPLAY number [format descriptor] * 1221 * or D number [format descriptor] * 1222 * or number [format descriptor] * 1223 * or DISPLAY FBIn [format descriptor] * 1224 * or D FBIn [format descriptor] * 1225 * or FBIn [format descriptor] * 1226 * * 1227 * Format descriptors are: h - hex * 1228 * d - decimal * 1229 * p - packed * 1230 * p6 - packed * 1231 * a - ascii * 1232 * z - single word time * 1233 * t - double word time * 1234 * p12- double word packed * 1235 * * 1236 * The selected location is displayed in the format specified * 1237 * (default is hex), and the cursor is left after the number. * 1238 * The operator may then enter a new value for the location * 1239 * or just look at the next location by typing LF or reenter * 1240 * command mode by terminating the entry with a CR. * 1241 * The DISPLAY command's code is shared extensively with * 1242 * the DL command. * 1243 * * 1244 ********************************************************************************** 1245 1246 BLOCK D/DL command 1247 ENTRY CDISPLAY 1248 ENTRY CDISPLONG 1249 ENTRY DISBLKM 1250 ENTRY DISFBIM 1251 ENTRY DISFILEM 1252 ENTRY OPENLOC 1253 ENTRY NAMEOFFBI 1254 ENTRY CONTENTS 1255 ENTRY TIMEZONE 1256 0000305C 1257 DISPTYPE EQU VARS(0) display type (upper byte must be zero) 0000305D 1258 OPENLOC EQU VARS(1) the current open location (logical form) 0000305E 1259 THEPLACE EQU VARS(2) pointer to location open (actual memory addr) 0000305F 1260 TERMCHAR EQU VARS(3) input terminator 00003060 1261 NAMEOFFBI EQU VARS(4) name of the open FBI location 00003061 1262 WORDCOUNT EQU VARS(5) how many words to put on output line 00003062 1263 DLFLAG EQU VARS(6) sez long display 00003063 1264 WORDPERLN EQU VARS(7) words per line for chosen display type 1265 000049F0 1266 CDISPLAY LABEL 049F0 EC003062 1267 STZ DLFLAG say we are normal display 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 127 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 049F1 EDC03061 1268 STW WORDCOUNT want one word only on output line 049F2 DC5013F8 @ 1269 CALLNP @VFETCHITMH get the location to display 049F3 FA883451 2 1270 JLTZ R2 BADFORM negative numbers not allowed 049F4 E480305D 2 1271 ST R2 OPENLOC save desired address 049F5 F67E49FA 1 1272 JBT R1/TNUM GETDISPTYP go process the expected number 049F6 F27C3451 1 1273 JBF R1/TALPH BADFORM jump if not a symbol (FBIxx only possibility) 1274 * \ / Verify symbol is FBIxx and find the location he wants. 049F7 DC403745 1275 CALLNP GETFBIINDX get index into FBI buffer 049F8 FA823451 2 1276 JEQZ R2 BADFORM oops 049F9 E480305D 2 1277 ST R2 OPENLOC save the calculated index 1278 * \ / 000049FA 1279 GETDISPTYP LABEL 049FA DC5013F5 @ 1280 CALLNP @VFETCHITEM now check for display type 049FB F6784A15 1 1281 JBT R1/TEOL NODISP jump if none given - use hex 049FC F27C3451 1 1282 JBF R1/TALPH BADFORM must have an alpha type 049FD 60440007 1 IMM 1283 LD R1 TYPETABL-1 size of the display type table 000049FE 1284 GETTYPLOOP LABEL 049FE 64A24A02 2 1 1285 CPR R2 TYPETAB(R1) see if this is our type 049FF FE024A16 1286 JEQ DISPOK 04A00 FA6649FE 1 1287 JDR R1 GETTYPLOOP try the next one 1288 * \ / 04A01 FE0E3451 1289 JMP BADFORM out of chances!! 1290 * --- 1291 00004A02 1292 TYPETAB BASE 04A02 6DDD0000 1293 DSPH PAK6 H hex display 04A03 55730000 1294 DSPD PAK6 D decimal display 04A04 9EB10000 1295 DSPP PAK6 P packed display 04A05 9FC27000 1296 DSPP6 PAK6 P6 packed display 04A06 43238000 1297 DSPA PAK6 A ascii display 04A07 DBBA0000 1298 DSPTIME PAK6 Z single word time 04A08 B71B0000 1299 PAK6 T double time 04A09 9F020E00 1300 DSPP12 PAK6 P12 double word packed 1301 DRCT 00000008 ABS 1302 TYPETABL EQU DISPW TYPETAB 1303 04A0A 20202048 1304 DISPTAB ASCII 1, H sez Hex 04A0B 20202044 1305 ASCII 1, D sez Decimal 04A0C 20202052 1306 ASCII 1, R sez Packed 04A0D 20202052 1307 ASCII 1, R sez Packed 04A0E 20202043 1308 ASCII 1, C sez 'character' (Ascii) to PREPOUT 04A0F 2020205A 1309 ASCII 1, Z sez single word time 04A10 20202054 1310 ASCII 1, T sez double word time 04A11 20202053 1311 ASCII 1, S sez double word Packed 1312 04A12 2A5C4831 1313 DISDATA TEXTZ "*\H1\ " *** IMPURE! *** 04A14 820C4A12 1314 DISPCODE PTR DISDATA/CH2 type char in display string 1315 00004A15 1316 NODISP LABEL 04A15 60440000 1 IMM 1317 LD R1 DSPH get code for hex 1318 * \ / 00004A16 1319 DISPOK LABEL 04A16 E440305C 1 1320 ST R1 DISPTYPE save the code 04A17 60624A0A 1 1 1321 LD R1 DISPTAB(R1) get prepout control code 04A18 E4504A14 1 @ 1322 ST R1 @DISPCODE stuff into prepout control 1323 * \ / 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 128 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 1324 00004A19 1325 OPENNEXT LABEL 04A19 DC404C22 1326 CALLNP TRANSLATE fiddle with address 04A1A FE0E4A2C 1327 JMP PRINTFBIA jump if address specifies FBI loc 04A1B FE0E4A23 1328 JMP PRINTFILEA jump if address specifies a file loc 1329 * \ / 04A1C DC1013F9 @ 1330 CALL @VPREPOUT display the address of the item 04A1D 4100305D 1331 PAR OPENLOC 04A1E 40004A20 1332 PARL DISBLKM 04A1F FE0E4A32 1333 JMP DSPLYDATA now go display the data 1334 * --- 04A20 2A5C4831 1335 DISBLKM TEXTZ "*\H1,3\/" 1336 00004A23 1337 PRINTFILEA LABEL 04A23 DC1013F9 @ 1338 CALL @VPREPOUT display the info 04A24 4100305D 1339 PAR OPENLOC 04A25 40004A27 1340 PARL DISFILEM 04A26 FE0E4A32 1341 JMP DSPLYDATA get what to put in it 1342 * --- 1343 04A27 2A5C4831 1344 DISFILEM TEXTZ "*\H1,5\/" 1345 04A2A 2A5C5231 1346 DISFBIM TEXTZ "*\R1\/" 1347 00004A2C 1348 PRINTFBIA LABEL 04A2C 7080305D 2 1349 LDN R2 OPENLOC make a good index 04A2D 6024374F 0 2 1350 LD R0 FBINAMET(R2-1) get the name of the opened location 04A2E E4003060 0 1351 ST R0 NAMEOFFBI 04A2F DC1013F9 @ 1352 CALL @VPREPOUT display the opened location 04A30 41003060 1353 PAR NAMEOFFBI 04A31 40004A2A 1354 PARL DISFBIM 1355 * \ / 1356 1357 ********************************************************************************** 1358 * * 1359 * Here, we call PREPOUT to display the actual data of * 1360 * interest. It can be displayed as hex (the default), decimal, * 1361 * pak6, ascii, double word time, or single word time. Note * 1362 * that PREPOUT always displays exactly one word (CONTENTS) * 1363 * except for double word time, and ascii when it terminates on * 1364 * a byte of #00. SINGTIME follows CONTENTS, and we set it to * 1365 * zero so that it will stop the display. * 1366 * We loop through displaying data for the number of words * 1367 * indicated by WORDCOUNT. * 1368 * * 1369 ********************************************************************************** 1370 1371 * \ / 00004A32 1372 DSPLYDATA LABEL 04A32 6000305C 0 1373 LD R0 DISPTYPE get display code 04A33 64040005 0 IMM 1374 CPR R0 DSPTIME is this a special case (time or P12)? 04A34 FE024A4A 1375 JEQ SINGWRD it is a single word time display 04A35 FE044A50 1376 JGT DBLWRD it is a double word display 1377 * \ / 04A36 6010305E 0 @ 1378 LD R0 @THEPLACE pick up the actual data 04A37 E40030CE 0 1379 ST R0 CONTENTS and save for prepout 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 129 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 04A38 EC0030CF 1380 STZ SINGTIME so ascii display will have a terminator 04A39 DC1013F9 @ 1381 CALL @VPREPOUT display the contents 04A3A 410030CE 1382 PAR CONTENTS pass address of data 04A3B 40004A12 1383 PARL DISDATA 00004A3C 1384 DSPLYDONE LABEL 04A3C 60840001 2 IMM 1385 LD R2 1 load display size 00004A3D 1386 DSPLYDONE2 LABEL 04A3D D000305D 1387 INC OPENLOC move logical address to the next item 04A3E D0403061 1388 DEC WORDCOUNT one less word left to output 04A3F FE0A4A68 1389 JLE GETCHNG if done, get response 04A40 9880305E 2 1390 ADDM R2 THEPLACE move the actual memory address to the next item 04A41 6000305D 0 1391 LD R0 OPENLOC get the present logical address 04A42 5C0A2CA0 0 CBM 1392 CMZ R0/BITS 22:31 see if at end of a page 04A43 FE0C4A32 1393 JNE DSPLYDATA if not, jump back to display more words 1394 * \ / logical address has advanced to end of page 04A44 5C00303A 1395 CMZ FILEFLAG are we looking at a loaded file? 04A45 FE024A68 1396 JEQ GETCHNG loaded block. stop at page end 04A46 DC404C22 1397 CALLNP TRANSLATE do address magic 04A47 FEC00000 1398 NOP 0 04A48 FEC00000 1399 NOP 0 04A49 FE0E4A32 1400 JMP DSPLYDATA and loop around 1401 * --- 1402 1403 * For a single word time we need to put the contents to be 1404 * displayed just before the word of time zone information. 1405 00004A4A 1406 SINGWRD LABEL 04A4A 6010305E 0 @ 1407 LD R0 @THEPLACE get the word 04A4B E40030CF 0 1408 ST R0 SINGTIME put in place for single time display 04A4C DC1013F9 @ 1409 CALL @VPREPOUT display time 04A4D 410030CF 1410 PAR SINGTIME 04A4E 40004A12 1411 PARL DISDATA 04A4F FE0E4A3C 1412 JMP DSPLYDONE go check the counter 1413 * --- 1414 1415 * Print a double word item (time or P12) 1416 * DOUBTIME is the address of a triplet containing 1417 * the double word item and the time zone offset 1418 * (used only for printing time). 1419 00004A50 1420 DBLWRD LABEL 04A50 D0403061 1421 DEC WORDCOUNT indicate using up an extra word 04A51 BC00305D 0 1422 INCL R0 OPENLOC advance logical location 04A52 FA024AA8 0 1423 JEQZ R0 CROSSERR jump if leaving FBI, crossing error 04A53 5C0A2CA0 0 CBM 1424 CMZ R0/BITS 22:31 check for end of page 04A54 FE0C4A61 1425 JNE DBLCLEAN if not, no worries, mate 04A55 5C00303A 1426 CMZ FILEFLAG are we working with a file? 04A56 FE024AA8 1427 JEQ CROSSERR if just a loaded block, give error 04A57 6010305E 0 @ 1428 LD R0 @THEPLACE get first word of double word item 04A58 E40030CE 0 1429 ST R0 DOUBTIME store it 04A59 DC404C22 1430 CALLNP TRANSLATE do translation in case of page crossing 04A5A FEC00000 1431 NOP 0 04A5B FEC00000 1432 NOP 0 04A5C 6010305E 0 @ 1433 LD R0 @THEPLACE get second word of double word item 04A5D E40030CF 0 1434 ST R0 DOUBTIME(1) store it 04A5E 6007FFFF 0 IMM 1435 LD R0 -1 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 130 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 04A5F 9800305E 0 1436 ADDM R0 THEPLACE undo one of the adds in case no store 04A60 FE0E4A63 1437 JMP DBLDSPLY 1438 * --- 00004A61 1439 DBLCLEAN LABEL 04A61 6210305E 01 @ 1440 LD2 R0 @THEPLACE get the item 04A62 E60030CE 01 1441 ST2 R0 DOUBTIME and save for display 00004A63 1442 DBLDSPLY LABEL 04A63 DC1013F9 @ 1443 CALL @VPREPOUT display item 04A64 410030CE 1444 PAR DOUBTIME 04A65 40004A12 1445 PARL DISDATA 04A66 60840002 2 IMM 1446 LD R2 2 load size of display 04A67 FE0E4A3D 1447 JMP DSPLYDONE2 go check the counter 1448 * --- 1449 1450 * The contents have been displayed. Get any changes. 1451 00004A68 1452 GETCHNG LABEL 04A68 60440050 1 IMM 1453 LD R1 BUFL 04A69 6084301B 2 IMM 1454 LD R2 ADR BUF 04A6A DC5013F3 @ 1455 CALLNP @VREADLINE read the response 04A6B 5C003062 1456 CMZ DLFLAG long display command? 04A6C FE0C4AE0 1457 JNE DLGETCHNG if so treat different 1458 * \ / 1459 04A6D E480305F 2 1460 ST R2 TERMCHAR save the terminating char 04A6E 30440050 1 IMM 1461 RSB R1 BUFL calculate last char index 04A6F EC32302F 1 @ 1462 STZ @BUFP(R1) emplace terminator 04A70 6100302F 4 1463 LD R4 BUFP get character pointer to input buffer 00004A71 1464 ITEMAGAIN LABEL 04A71 6040305C 1 1465 LD R1 DISPTYPE get display type 04A72 5D624A81 1 1466 XCT DISPIN(R1) take appropriate action 04A73 F6784A7C 1 1467 JBT R1/TEOL JUSTMOVEON if nothing there, check term 04A74 F67E4A7A 1 1468 JBT R1/TNUM GOTINPUT number is expected 04A75 FA4C3451 1 1469 JNEZ R1 BADFORM but we may accept an error 04A76 6404003A 0 IMM 1470 CPR R0 COLON ... as long as it's a colon 04A77 FE0C3451 1471 JNE BADFORM only numbers are allowed 04A78 39170001 4 4 CACH 1472 LEA R4 CACH R4,1 advance over the character 04A79 FE0E4A71 1473 JMP ITEMAGAIN and go try again 1474 * --- 00004A7A 1475 GOTINPUT LABEL 04A7A E490305E 2 @ 1476 ST R2 @THEPLACE store the new value 04A7B EDC03075 1477 STW MODFLAG say the thing is modified 00004A7C 1478 JUSTMOVEON LABEL 04A7C 6000305F 0 1479 LD R0 TERMCHAR get the terminator 04A7D 6404000D 0 IMM 1480 CPR R0 CR is it a CR? 04A7E FE023453 1481 JEQ MC if so, go back to control 04A7F EDC03061 1482 STW WORDCOUNT reset WORDCOUNT 04A80 FE0E4A19 1483 JMP OPENNEXT goto the next location 1484 * --- 1485 00004A81 1486 DISPIN LABEL 04A81 DC5013F8 @ 1487 CALLNP @VFETCHITMH fetch hex value 04A82 DC5013F5 @ 1488 CALLNP @VFETCHITEM fetch decimal value 04A83 DC403716 1489 CALLNP PACKER fetch packed symbol 04A84 DC403716 1490 CALLNP PACKER fetch packed symbol 04A85 DC403705 1491 CALLNP GETASCII fetch ascii item 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 131 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 04A86 FE0E4AEF 1492 JMP GET1TIME fetch single word time 04A87 FE0E4AF5 1493 JMP GET2TIME fetch double word time 04A88 FE0E4A89 1494 JMP GETPAK12 fetch a double word packed item 1495 * --- 1496 00004A89 1497 GETPAK12 LABEL 04A89 DC403720 1498 CALLNP DPACKER fetch double word packed symbol 04A8A F6784A7C 1 1499 JBT R1/TEOL JUSTMOVEON if nothing there, check term 04A8B E68030CE 23 1500 ST2 R2 DOUBTIME save item 04A8C F67E4A92 1 1501 JBT R1/TNUM DGOTINPUT number is expected 04A8D FA4C3451 1 1502 JNEZ R1 BADFORM but we may accept an error 04A8E 6404003A 0 IMM 1503 CPR R0 COLON ... as long as it's a colon 04A8F FE0C3451 1504 JNE BADFORM only numbers are allowed 04A90 39170001 4 4 CACH 1505 LEA R4 CACH R4,1 advance over the character 04A91 FE0E4A71 1506 JMP ITEMAGAIN and go try again 1507 * --- 00004A92 1508 DGOTINPUT LABEL 04A92 6000305D 0 1509 LD R0 OPENLOC pick up current logical location 04A93 1807FFFF 0 IMM 1510 ADD R0 -1 move back to second word of pair 04A94 5C0A2CA0 0 CBM 1511 CMZ R0/BITS 22:31 check for page crossing 04A95 FE0C4AA5 1512 JNE DDSTORE jump if no problem 04A96 6007FFFE 0 IMM 1513 LD R0 -2 04A97 9800305D 0 1514 ADDM R0 OPENLOC move location back for store 04A98 DC404C22 1515 CALLNP TRANSLATE do translation because of page crossing 04A99 FEC00000 1516 NOP 0 04A9A FEC00000 1517 NOP 0 04A9B 608030CE 2 1518 LD R2 DOUBTIME pick up first half 04A9C E490305E 2 @ 1519 ST R2 @THEPLACE store first half of new value 04A9D EDC03075 1520 STW MODFLAG say the thing is modified 04A9E D000305D 1521 INC OPENLOC move to second word 04A9F DC404C22 1522 CALLNP TRANSLATE translate to real address 04AA0 FEC00000 1523 NOP 0 04AA1 FEC00000 1524 NOP 0 04AA2 D000305D 1525 INC OPENLOC move on to next word 04AA3 608030CF 2 1526 LD R2 DOUBTIME(1) pick up right half 04AA4 FE0E4A7A 1527 JMP GOTINPUT go store and continue 1528 * --- 00004AA5 1529 DDSTORE LABEL 04AA5 E690305E 23 @ 1530 ST2 R2 @THEPLACE do the store 04AA6 EDC03075 1531 STW MODFLAG say page is modified 04AA7 FE0E4A7C 1532 JMP JUSTMOVEON 1533 * --- 1534 00004AA8 1535 CROSSERR LABEL 04AA8 DC1013F9 @ 1536 CALL @VPREPOUT print boundary crossing error 04AA9 40004AAB 1537 PARL CROSSMSG 04AAA FE0E3453 1538 JMP MC and leave 1539 * --- 1540 04AAB 20496C6C 1541 CROSSMSG TEXTZ " Illegal Boundary Crossing." 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 132 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 1543 1544 ********************************************************************************** 1545 * * 1546 * DL will display multiple words on a line. The number of * 1547 * words displayed per line is dependent on the display type. * 1548 * The setup work is done here then we merge in with the display * 1549 * command. The allowed display types are hex, decimal, ascii, * 1550 * and packed 6. * 1551 * * 1552 ********************************************************************************** 1553 00004AB2 1554 CDISPLONG LABEL 04AB2 EDC03062 1555 STW DLFLAG say we are in the long display 04AB3 6004000C 0 IMM 1556 LD R0 12 most words possible per line 04AB4 E4003061 0 1557 ST R0 WORDCOUNT 04AB5 DC5013F8 @ 1558 CALLNP @VFETCHITMH get the location to display 04AB6 FA883451 2 1559 JLTZ R2 BADFORM negative numbers not allowed 04AB7 E480305D 2 1560 ST R2 OPENLOC save address to list 04AB8 F67E4ABF 1 1561 JBT R1/TNUM GETLDSPTYP go process the expected number 04AB9 F27C3451 1 1562 JBF R1/TALPH BADFORM jump if not symbol (FBIxx only possibility) 1563 * \ / verify symbol is FBIxx and translate 04ABA DC403745 1564 CALLNP GETFBIINDX get index into fbi buffer 04ABB FA823451 2 1565 JEQZ R2 BADFORM jump if no legal translation 04ABC E480305D 2 1566 ST R2 OPENLOC save the index 1567 * \ / 1568 1569 * If displaying long the FBI we must not extend beyond the 1570 * end of the FBI. We set WORDCOUNT to the number of FBI 1571 * words still in the FBI after the initial FBI word. 1572 04ABD 70928000 2 2 REG 1573 LDN R2 R2 make into a positive number 04ABE E4803061 2 1574 ST R2 WORDCOUNT this is the most words per line 1575 * \ / 1576 00004ABF 1577 GETLDSPTYP LABEL 04ABF DC5013F5 @ 1578 CALLNP @VFETCHITEM now check for display type 04AC0 F6784ACE 1 1579 JBT R1/TEOL DLHEX jump if none given - use hex 04AC1 F27C3451 1 1580 JBF R1/TALPH BADFORM must have an alpha type 1581 * \ / 04AC2 64804A03 2 1582 CPR R2 TYPETAB/DSPD decimal display type? 04AC3 FE024AD1 1583 JEQ DLDEC 04AC4 64804A06 2 1584 CPR R2 TYPETAB/DSPA ascii display type? 04AC5 FE024AD4 1585 JEQ DLASC 04AC6 64804A04 2 1586 CPR R2 TYPETAB/DSPP packed display type? 04AC7 FE024ADA 1587 JEQ DLPAK 04AC8 64804A05 2 1588 CPR R2 TYPETAB/DSPP6 packed display type? 04AC9 FE024ADA 1589 JEQ DLPAK 04ACA 64804A09 2 1590 CPR R2 TYPETAB/DSPP12 double packed display type? 04ACB FE024AD7 1591 JEQ DLPAK12 04ACC 64804A02 2 1592 CPR R2 TYPETAB/DSPH hex display type? 04ACD FE0C3451 1593 JNE BADFORM out of possiblilities 1594 * \ / 1595 00004ACE 1596 DLHEX LABEL 04ACE 60040008 0 IMM 1597 LD R0 8 number of words per hex line 04ACF 60440000 1 IMM 1598 LD R1 DSPH hex type code 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 133 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 04AD0 FE0E4ADC 1599 JMP DLOK 1600 * --- 1601 00004AD1 1602 DLDEC LABEL 04AD1 60040006 0 IMM 1603 LD R0 6 number of words per decimal line 04AD2 60440001 1 IMM 1604 LD R1 DSPD decimal type code 04AD3 FE0E4ADC 1605 JMP DLOK 1606 * --- 1607 00004AD4 1608 DLASC LABEL 04AD4 6004000C 0 IMM 1609 LD R0 12 number of words per ascii line 04AD5 60440004 1 IMM 1610 LD R1 DSPA ascii type code 04AD6 FE0E4ADC 1611 JMP DLOK 1612 * --- 1613 00004AD7 1614 DLPAK12 LABEL 04AD7 6004000A 0 IMM 1615 LD R0 10 number of words per packed line 04AD8 60440007 1 IMM 1616 LD R1 DSPP12 packed type code 04AD9 FE0E4ADC 1617 JMP DLOK 1618 * --- 1619 00004ADA 1620 DLPAK LABEL 04ADA 60040005 0 IMM 1621 LD R0 5 number of words per packed line 04ADB 60440002 1 IMM 1622 LD R1 DSPP packed type code 1623 * \ / 1624 00004ADC 1625 DLOK LABEL 04ADC E4003063 0 1626 ST R0 WORDPERLN number of words/line for display type 04ADD 50003061 0 1627 MIN R0 WORDCOUNT in case FBI says we don't have enough 04ADE E4003061 0 1628 ST R0 WORDCOUNT set the proper number of words 04ADF FE0E4A16 1629 JMP DISPOK merge in with the display command 1630 * --- 1631 1632 * The line has been displayed and now what to do? 1633 * The only options are to return to main control 1634 * or kick out another line of info. 1635 00004AE0 1636 DLGETCHNG LABEL 04AE0 6484000D 2 IMM 1637 CPR R2 CR is the terminating char a CR? 04AE1 FE023453 1638 JEQ MC if so time for a new command 04AE2 6004000C 0 IMM 1639 LD R0 12 load largest number that we will put on a line 04AE3 E4003061 0 1640 ST R0 WORDCOUNT set to max for now 04AE4 7000305D 0 1641 LDN R0 OPENLOC get current logical address 04AE5 FA0A4AE7 0 1642 JLEZ R0 DLGOTADR jump if still in data area 04AE6 E4003061 0 1643 ST R0 WORDCOUNT set our new maximum word count 1644 * \ / to prevent going beyond FBI end 00004AE7 1645 DLGOTADR LABEL 04AE7 60003063 0 1646 LD R0 WORDPERLN number of words/line for display type 04AE8 50003061 0 1647 MIN R0 WORDCOUNT the smallest amount is how many we want 04AE9 E4003061 0 1648 ST R0 WORDCOUNT and thus we have the real wordcount 04AEA FE0E4A19 1649 JMP OPENNEXT now go display the line 1650 * --- 1651 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 134 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 1653 1654 ********************************************************************************** 1655 * * 1656 * GET1TIME converts the single word time to a double word * 1657 * time which is then processed like GET2TIME until the return * 1658 * to DSPLYDATA, at which time the double word time is * 1659 * changed to single word time and a jump is made to GOTINPUT. * 1660 * GET2TIME sets up defaults for all date parameters to * 1661 * the displayed value, then gets changes to these from the * 1662 * input string stored in BUF. Only the parameters entered * 1663 * are then changed, leaving all others as originally * 1664 * displayed. GET2TIME stores the changed double word then * 1665 * jumps to JUSTMOVEON. * 1666 * * 1667 ********************************************************************************** 1668 00003064 1669 TIME EQU VARS(8) msecs in the day 00003065 1670 HOURS EQU VARS(9) hour of the day 00003066 1671 DATE EQU VARS(10) normal sort of day of the month 00003067 1672 MONTH EQU VARS(11) Jan = 1 00003068 1673 YEAR EQU VARS(12) between 1859 and 2415 1674 04AEC 0036EE80 1675 ONEHOUR2 VFD 0,MSECSH msecs per hour double word 00004AEC 1676 MSHOUR EQU ONEHOUR2(1) msecs per hour 04AED 0000001F 1677 MAXDATE VFD 31 largest possible date 04AEE 00000FFF 1678 TMMASK VFD 0FFF mask off high 20 bits 1679 00000060 BYTE 1680 FLAGFLD EQU BITS 0:5 field for flag bits 00000070 BYTE 1681 ALLFLAG EQU BITS 0:6 includes single flag 00000010 BYTE 1682 FNDMNTH EQU BIT 0 00000210 BYTE 1683 FNDPM EQU BIT 1 00000410 BYTE 1684 DELBIT EQU BIT 2 00000610 BYTE 1685 FNDAT EQU BIT 3 00000810 BYTE 1686 FNDYR EQU BIT 4 00000A10 BYTE 1687 FNDTM EQU BIT 5 00000C10 BYTE 1688 SINGLE EQU BIT 6 1689 00004AEF 1690 GET1TIME LABEL 04AEF EC0BC060 7 CBM 1691 STZ R7/FLAGFLD zero out flags 04AF0 EDCBCC10 7 CBM 1692 STW R7/SINGLE say it is single word time 04AF1 600030CF 0 1693 LD R0 SINGTIME get single word time 04AF2 EE0030CE 1694 STZ2 DOUBTIME this zeroes out DOUBTIME and CONTENTS 04AF3 E41030D1 0 @ 1695 ST R0 @MIDTIME store in double word format 04AF4 FE0E4AF8 1696 JMP DEFAULTS 1697 * --- 1698 00004AF5 1699 GET2TIME LABEL 04AF5 EC0BC070 7 CBM 1700 STZ R7/ALLFLAG zero out flags 04AF6 60004AEE 0 1701 LD R0 TMMASK 04AF7 F80030CE 0 1702 ANDM R0 DOUBTIME zero out any clutter in bits 0:19 1703 * \ / 1704 00004AF8 1705 DEFAULTS LABEL 1706 * convert to local time zone and unpack time 04AF8 604030D0 1 1707 LD R1 TIMEZONE get timezone word 04AF9 700A7010 0 1 CBM 1708 LDN R0 R1/BIT 24 sign extend across next reg 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 135 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 04AFA E40A4180 0 1 CBM 1709 ST R0 R1/BITS 0:23 and sign extend across this reg 04AFB 1E004AEB 01 1710 MUL2 R0 ONEHOUR2 convert to millisecs per hour 04AFC 9A0030CE 01 1711 ADD2M R0 DOUBTIME adjust the raw time accoringly 1712 04AFD DC003ACC 1713 CALL UNPACKDATE get default values 04AFE 434030CE 1714 PARV2 DOUBTIME 04AFF 41003064 1715 PAR TIME 04B00 41003066 1716 PAR DATE 04B01 41003067 1717 PAR MONTH 04B02 41003068 1718 PAR YEAR 04B03 40003065 1719 PARL HOURS day of week goes here but don't need it 04B04 EC003065 1720 STZ HOURS get rid of garbage 04B05 61003030 4 1721 LD R4 PREBUF need to point before buffer 04B06 EC0BC410 7 CBM 1722 STZ R7/DELBIT no delimiters found yet 04B07 DC403729 1723 CALLNP GETCHAR pick up next input character 04B08 6404003A 0 IMM 1724 CPR R0 COLON is it a (leading) colon? 04B09 FE0C4B0B 1725 JNE HAVECHAR if not, start with it 1726 * \ / otherwise, throw it away 00004B0A 1727 NEXTLOOP LABEL 04B0A DC403729 1728 CALLNP GETCHAR pick up next input character 00004B0B 1729 HAVECHAR LABEL 04B0B 5CA24B0C 1 1730 LDPC NIJT(R1) type determines action 1731 * --- 1732 00004B0C 1733 NIJT LABEL 04B0C 00004C0B 1734 VFD ADR ENDSTRNG 0 - end of line 04B0D 00004B83 1735 VFD ADR ALPHA 1 - alpha 04B0E 00004B14 1736 VFD ADR DELIM 2 - delimiter 04B0F 00004B29 1737 VFD ADR GETNUM 3 - number 04B10 00004B0A 1738 VFD ADR NEXTLOOP 4 - blank 04B11 00004B14 1739 VFD ADR DELIM 5 - minus sign 04B12 00004B21 1740 VFD ADR BADSTUF 6 - special symbol char 04B13 00004B21 1741 VFD ADR BADSTUF 7 - filename punctuation 1742 1743 ********************************************************************************** 1744 * * 1745 * DELIM is jumped to when a delimiter is found. It * 1746 * checks if another delimiter has been found since the last * 1747 * input item. If so then error, else set delimiter flag * 1748 * and get the next item. * 1749 * * 1750 ********************************************************************************** 1751 00004B14 1752 DELIM LABEL 04B14 D1CBC410 7 CBM 1753 SETT R7/DELBIT indicate we have seen a delimiter 04B15 FE0C4B0A 1754 JNE NEXTLOOP jump if this is first time 1755 * \ / otherwise, error 04B16 FA284C1F 0 1756 JSR R0 ERROR 04B17 20457874 1757 TEXTZ " Extra delimiters between input items." 1758 * --- 1759 00004B21 1760 BADSTUF LABEL illegal characters in input 04B21 FA284C1F 0 1761 JSR R0 ERROR 04B22 20426164 1762 TEXTZ " Bad characters in input." 1763 * --- 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 136 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 1765 1766 ********************************************************************************** 1767 * * 1768 * GETNUM is jumped to when a number has been found in the * 1769 * input. It calls FETCHITEM to get the number then determines * 1770 * if the number is a time, year, date, or error. * 1771 * * 1772 ********************************************************************************** 1773 00004B29 1774 GETNUM LABEL 04B29 DC5013F5 @ 1775 CALLNP @VFETCHITEM get number from input 04B2A 6404003A 0 IMM 1776 CPR R0 ":" is the number a time? 04B2B FE024B5F 1777 JEQ ATIME 04B2C 64840032 2 IMM 1778 CPR R2 50 is the number a year? 04B2D FE064B45 1779 JGE AYEAR must be 1780 * \ / 1781 * the number must be a date 04B2E F7C64B3E 7 1782 JBT R7/FNDAT EXDATE date has already been found 04B2F 64804AED 2 1783 CPR R2 MAXDATE is it within bounds? 04B30 FE044B37 1784 JGT BADDATE nope 04B31 FA8A4B37 2 1785 JLEZ R2 BADDATE must be positive number 04B32 EDCBC610 7 CBM 1786 STW R7/FNDAT say date is found 04B33 E4803066 2 1787 ST R2 DATE 1788 * \ / 00004B34 1789 FROMNUM LABEL 04B34 60703744 1 0 @ 1790 LD R1 @CODES(R0) get the code for term char 04B35 EC0BC410 7 CBM 1791 STZ R7/DELBIT no delimiters found yet 04B36 FE0E4B0B 1792 JMP HAVECHAR 1793 * --- 1794 00004B37 1795 BADDATE LABEL 04B37 FA284C1F 0 1796 JSR R0 ERROR go to error routine 04B38 20446174 1797 TEXTZ " Date is out of range." 1798 * --- 1799 00004B3E 1800 EXDATE LABEL 04B3E FA284C1F 0 1801 JSR R0 ERROR 04B3F 20457874 1802 TEXTZ " Extra date in input." 1803 * --- 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 137 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 1805 1806 ********************************************************************************** 1807 * * 1808 * AYEAR is jumped to when GETNUM has determined that the * 1809 * number is in the possible range of a year. AYEAR does more * 1810 * bound checks on this number and converts the number to a * 1811 * 20th century year if necessary. * 1812 * * 1813 ********************************************************************************** 1814 00004B45 1815 AYEAR LABEL 04B45 F7C84B58 7 1816 JBT R7/FNDYR EXYEAR year has already been found 04B46 68840064 2 IMM 1817 UCPR R2 100 are the first digits there? 04B47 FE064B4A 1818 JGE OVER100 04B48 1884076C 2 IMM 1819 ADD R2 1900 add in the missing digits 04B49 FE0E4B4E 1820 JMP STOREY 1821 * --- 1822 00004B4A 1823 OVER100 LABEL 04B4A 64840743 2 IMM 1824 CPR R2 1859 is year in legal range? 04B4B FE084B51 1825 JLT BADYEAR too small 04B4C 6484096F 2 IMM 1826 CPR R2 2415 is year in legal range? 04B4D FE044B51 1827 JGT BADYEAR too big 00004B4E 1828 STOREY LABEL 04B4E EDCBC810 7 CBM 1829 STW R7/FNDYR say year has been found 04B4F E4803068 2 1830 ST R2 YEAR save the year 04B50 FE0E4B34 1831 JMP FROMNUM 1832 * --- 1833 00004B51 1834 BADYEAR LABEL 04B51 FA284C1F 0 1835 JSR R0 ERROR 04B52 20596561 1836 TEXTZ " Year is out of range." 1837 * --- 1838 00004B58 1839 EXYEAR LABEL 04B58 FA284C1F 0 1840 JSR R0 ERROR go to error handling routine 04B59 20457874 1841 TEXTZ " Extra year in input." 1842 * --- 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 138 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 1844 1845 ********************************************************************************** 1846 * * 1847 * ATIME is jumped to when GETNUM has determined that the * 1848 * number is a time. ATIME then gets the hours, minutes, and if * 1849 * there, seconds, does range checks on all of them, converts * 1850 * them to msecs, and adds them into TIME. The hour is saved for * 1851 * use by PMFND. * 1852 * * 1853 ********************************************************************************** 1854 00004B5F 1855 ATIME LABEL 04B5F F7CA4B7C 7 1856 JBT R7/FNDTM EXTIME too many times 04B60 68840018 2 IMM 1857 UCPR R2 24 is hour within range? 04B61 FE064B75 1858 JGE BADTIME 04B62 E4803065 2 1859 ST R2 HOURS save hour 04B63 1C804AEC 2 1860 MUL R2 MSHOUR convert to msecs 04B64 E4803064 2 1861 ST R2 TIME keep the hour 1862 * \ / 04B65 39170001 4 4 CACH 1863 LEA R4 CACH R4,1 move buffer pointer one 04B66 DC5013F5 @ 1864 CALLNP @VFETCHITEM get the minutes 04B67 6884003C 2 IMM 1865 UCPR R2 60 are they within range? 04B68 FE064B75 1866 JGE BADTIME nope 04B69 1C84EA60 2 IMM 1867 MUL R2 MSECSM convert minutes to msecs 04B6A 98803064 2 1868 ADDM R2 TIME keep them 04B6B EDCBCA10 7 CBM 1869 STW R7/FNDTM say time is found 04B6C 6404003A 0 IMM 1870 CPR R0 ":" are there seconds still? 04B6D FE0C4B34 1871 JNE FROMNUM don't need to get seconds 1872 * \ / 04B6E 39170001 4 4 CACH 1873 LEA R4 CACH R4,1 move buffer pointer one 04B6F DC5013F5 @ 1874 CALLNP @VFETCHITEM get the seconds 04B70 6884003C 2 IMM 1875 UCPR R2 60 are they within range? 04B71 FE064B75 1876 JGE BADTIME nope 04B72 1C8403E8 2 IMM 1877 MUL R2 MSECSS convert to msecs 04B73 98803064 2 1878 ADDM R2 TIME this is the time 04B74 FE0E4B34 1879 JMP FROMNUM continue onward 1880 * --- 1881 00004B75 1882 BADTIME LABEL 04B75 FA284C1F 0 1883 JSR R0 ERROR go to error handling routine 04B76 20496C6C 1884 TEXTZ " Illegal time value." 1885 * --- 1886 00004B7C 1887 EXTIME LABEL 04B7C FA284C1F 0 1888 JSR R0 ERROR go to error handling routine 04B7D 20457874 1889 TEXTZ " Extra time in input." 1890 * --- 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 139 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 1892 1893 ********************************************************************************** 1894 * * 1895 * ALPHA is jumped to when an alphabetic character has been * 1896 * found. It checks if there are alpha strings that have not * 1897 * already been found. If so then an error has occurred, else * 1898 * proceed to MNTNAME. * 1899 * * 1900 * MNTNAME gets a character at a time from the input * 1901 * string, packs it in R2, then compares R2 against legal * 1902 * strings in MONTHTAB. If a match is found then jump to * 1903 * MNTHFND, else pack the next character into R2 and check the * 1904 * table again. This proceeds until a match is found or * 1905 * something other than an alpha char or period is found in the * 1906 * input string. * 1907 * * 1908 * MONTHTAB contains the shortest unambiguous abbreviation * 1909 * of the 12 month names and A.M., P.M. along with a few other * 1910 * possible month name abbreviations. * 1911 * * 1912 ********************************************************************************** 1913 00004B83 1914 ALPHA LABEL 04B83 F3C04B8E 7 1915 JBF R7/FNDMNTH MNTNAME month has not been found 04B84 F3C24B8E 7 1916 JBF R7/FNDPM MNTNAME AM or PM has not been found yet 04B85 FA284C1F 0 1917 JSR R0 ERROR 04B86 20457874 1918 TEXTZ " Extra alpha strings in input." 1919 * --- 1920 00004B8E 1921 MNTNAME LABEL 04B8E EC128000 2 REG 1922 STZ R2 zero out R2 00004B8F 1923 SRCHLOOP LABEL 04B8F 7C920000 2 0 REG 1924 IOR R2 R0 that is where char is 04B90 60C40014 3 IMM 1925 LD R3 MNTHCNT-1 number of abbr to compare 1926 00004B91 1927 SRCHTAB LABEL 04B91 64A64BBB 2 3 1928 CPR R2 MONTHTAB(R3) do we have a legal abbr.? 04B92 FE024B9B 1929 JEQ MNTHFND yes 04B93 FAE64B91 3 1930 JDR R3 SRCHTAB try again 1931 * \ / 1932 * abbr was not found, get another char and try again 04B94 DC403729 1933 CALLNP GETCHAR get next char 04B95 64440001 1 IMM 1934 CPR R1 1 see if alpha 04B96 FE024B99 1935 JEQ GOTCHAR 04B97 6404002E 0 IMM 1936 CPR R0 "." see if period 04B98 FE0C4BAD 1937 JNE BADMONTH 00004B99 1938 GOTCHAR LABEL 04B99 608A9000 2 2 CBM 1939 LD R2 R2/BITS 8:7 shift word one char to left 04B9A FE0E4B8F 1940 JMP SRCHLOOP try again 1941 * --- 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 140 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 1943 1944 1945 ********************************************************************************** 1946 * * 1947 * MNTHFND is jumped to when MNTNAME has found a match for * 1948 * the alpha string in the input. R3 contains the position in * 1949 * the table this match was found at and is then used for an * 1950 * index into MNTHNUM to find the month number or A.M./P.M. * 1951 * code. * 1952 * * 1953 ********************************************************************************** 1954 00004B9B 1955 MNTHFND LABEL 04B9B 60264BD0 0 3 1956 LD R0 MNTHNUM(R3) get month number from table 04B9C 6404000D 0 IMM 1957 CPR R0 13 is string a month? 04B9D FE024BE5 1958 JEQ PMFND no, must pm 04B9E FE044BEE 1959 JGT AMFND must be am 04B9F F7C04BB3 7 1960 JBT R7/FNDMNTH EXMNTH oops, already have a month 04BA0 EDCBC010 7 CBM 1961 STW R7/FNDMNTH say month has been found 04BA1 E4003067 0 1962 ST R0 MONTH save it 00004BA2 1963 SKIPSTUF LABEL 04BA2 DC403729 1964 CALLNP GETCHAR pick up another character 04BA3 EC0BC410 7 CBM 1965 STZ R7/DELBIT say no delimiter found yet 04BA4 5CA24BA5 1 1966 LDPC SSJT(R1) type determines action 1967 * --- 1968 00004BA5 1969 SSJT LABEL 04BA5 00004C0B 1970 VFD ADR ENDSTRNG 0 - end of line 04BA6 00004BA2 1971 VFD ADR SKIPSTUF 1 - alpha 04BA7 00004B0B 1972 VFD ADR HAVECHAR 2 - delimiter 04BA8 00004B29 1973 VFD ADR GETNUM 3 - number 04BA9 00004B0B 1974 VFD ADR HAVECHAR 4 - blank 04BAA 00004B0B 1975 VFD ADR HAVECHAR 5 - minus sign 04BAB 00004B21 1976 VFD ADR BADSTUF 6 - special symbol char 04BAC 00004BA2 1977 VFD ADR SKIPSTUF 7 - filename punctuation 1978 00004BAD 1979 BADMONTH LABEL 04BAD FA284C1F 0 1980 JSR R0 ERROR go to error handling routine 04BAE 20426164 1981 TEXTZ " Bad month name." 1982 * --- 1983 00004BB3 1984 EXMNTH LABEL 04BB3 FA284C1F 0 1985 JSR R0 ERROR go to error handling routine 04BB4 20457874 1986 TEXTZ " Extra month name in input." 1987 * --- 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 141 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 1989 00004BBB 1990 MONTHTAB LABEL 04BBB 0000502E 1991 VFD "P." P.M. 04BBC 0000504D 1992 VFD "PM" P.M. 04BBD 0000412E 1993 VFD "A." A.M. 04BBE 0000414D 1994 VFD "AM" A.M. 04BBF 00004A41 1995 VFD "JA" January 04BC0 00000046 1996 VFD "F" February 04BC1 00004D52 1997 VFD "MR" March 04BC2 004D4152 1998 VFD "MAR" " 04BC3 00004150 1999 VFD "AP" April 04BC4 00004D59 2000 VFD "MY" May 04BC5 004D4159 2001 VFD "MAY" " 04BC6 00004A4E 2002 VFD "JN" June 04BC7 004A554E 2003 VFD "JUN" " 04BC8 00004A4C 2004 VFD "JL" July 04BC9 004A554C 2005 VFD "JUL" " 04BCA 00004147 2006 VFD "AG" August 04BCB 00004155 2007 VFD "AU" " 04BCC 00000053 2008 VFD "S" September 04BCD 0000004F 2009 VFD "O" October 04BCE 0000004E 2010 VFD "N" November 04BCF 00000044 2011 VFD "D" December 00000015 ABS 2012 MNTHCNT EQU DISPW MONTHTAB size of this here table 2013 00004BD0 2014 MNTHNUM LABEL 04BD3 0000000E 2015 VFD 13,13,14,14 pm,am numbers 04BDC 00000006 2016 VFD 1,2,3,3,4,5,5,6,6 month numbers 04BE4 0000000C 2017 VFD 7,7,8,8,9,10,11,12 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 142 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 2019 2020 ********************************************************************************** 2021 * * 2022 * PMFND and AMFND are jumped to when a character string is * 2023 * either a P.M. or A.M. HOURS is checked to see if they need to * 2024 * be adjusted for the A.M. or P.M. If so the adjustment is done * 2025 * to TIME. * 2026 * * 2027 ********************************************************************************** 2028 00004BE5 2029 PMFND LABEL 04BE5 F7C24BF6 7 2030 JBT R7/FNDPM EXPM already have a pm or am 04BE6 F3CA4C00 7 2031 JBF R7/FNDTM B4DATE date has not been found 04BE7 EDCBC210 7 CBM 2032 STW R7/FNDPM save we have found one 2033 * \ / 04BE8 6004000C 0 IMM 2034 LD R0 12 to add to hours 04BE9 64003065 0 2035 CPR R0 HOURS does hour need to be changed? 04BEA FE0A4BA2 2036 JLE SKIPSTUF nope 04BEB 1C004AEC 0 2037 MUL R0 MSHOUR convert to msecs 04BEC 98003064 0 2038 ADDM R0 TIME makes it pm 04BED FE0E4BA2 2039 JMP SKIPSTUF 2040 * --- 2041 00004BEE 2042 AMFND LABEL 04BEE F7C24BF6 7 2043 JBT R7/FNDPM EXPM already have a pm or am 04BEF F3CA4C00 7 2044 JBF R7/FNDTM B4DATE date has not been found 2045 * \ / 04BF0 6004000C 0 IMM 2046 LD R0 12 to see if hours need subtracting 04BF1 64003065 0 2047 CPR R0 HOURS 04BF2 FE044BA2 2048 JGT SKIPSTUF they are in proper range 04BF3 1C004AEC 0 2049 MUL R0 MSHOUR convert to msecs 04BF4 B0003064 0 2050 RSBM R0 TIME adjust time 04BF5 FE0E4BA2 2051 JMP SKIPSTUF 2052 * --- 2053 00004BF6 2054 EXPM LABEL 04BF6 FA284C1F 0 2055 JSR R0 ERROR go to error handling routine 04BF7 20457874 2056 TEXTZ " Extra AM, PM indicator in input." 2057 * --- 2058 00004C00 2059 B4DATE LABEL 04C00 FA284C1F 0 2060 JSR R0 ERROR go to error handling routine 04C01 20414D2C 2061 TEXTZ " AM, PM indicator appears before time." 2062 * --- 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 143 (P&PCMD1) F 15 Commands: DISPLAY, D, and DL 2064 00004C0B 2065 ENDSTRNG LABEL 04C0B 600BC060 0 7 CBM 2066 LD R0 R7/FLAGFLD get changed data flag bits 04C0C FA024A7C 0 2067 JEQZ R0 JUSTMOVEON no changes to put back 04C0D DC003AFF 2068 CALL PACKDATE 04C0E 430030CE 2069 PAR2 DOUBTIME put raw time here 04C0F 41403064 2070 PARV TIME msecs in today 04C10 41403066 2071 PARV DATE 04C11 41403067 2072 PARV MONTH 04C12 40403068 2073 PARVL YEAR 2074 * \ / 2075 2076 * remove local time zone conversion 04C13 604030D0 1 2077 LD R1 TIMEZONE get timezone word 04C14 700A7010 0 1 CBM 2078 LDN R0 R1/BIT 24 sign extend across next reg 04C15 E40A4180 0 1 CBM 2079 ST R0 R1/BITS 0:23 and sign extend across this reg 04C16 1E004AEB 01 2080 MUL2 R0 ONEHOUR2 convert to millisecs per hour 04C17 B20030CE 01 2081 RSB2M R0 DOUBTIME adjust the raw time accoringly 2082 * \ / 2083 04C18 F7CC4C1B 7 2084 JBT R7/SINGLE SNDSINGL single word needs special handling 04C19 628030CE 23 2085 LD2 R2 DOUBTIME get the time 04C1A FE0E4A92 2086 JMP DGOTINPUT and go off to store it 2087 * --- 2088 00004C1B 2089 SNDSINGL LABEL 04C1B 62040800 01 IMM 2090 LD2 R0 0800 rounding factor for single word 04C1C 1A0030CE 01 2091 ADD2 R0 DOUBTIME add in rounding factor 04C1D 609030D1 2 @ 2092 LD R2 @MIDTIME get single word time 04C1E FE0E4A7A 2093 JMP GOTINPUT 2094 * --- 2095 00004C1F 2096 ERROR LABEL 04C1F DC1013F9 @ 2097 CALL @VPREPOUT send error message 04C20 40160400 0 @R 2098 PARL @R0 address of output string in R0 04C21 FE0E3453 2099 JMP MC continue on our merry way 2100 * --- 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 144 (P&PCMD2) F 16 Commands: DISPLAY, D, and DL 653 INPUT P&PCMD2 there's a lot of commands! 1 2 ********************************************************************************** 3 * * 4 * Address Translation Routine * 5 * This routine will translate the logical address in * 6 * OPENLOC into the actual memory address within the currently * 7 * mapped memory. This may involve reading a block from the disk * 8 * if there currently is a file mapped in. In the case of a * 9 * block mapped in, we must merely generate the address. * 10 * Call: * 11 * CALLNP TRANSLATE * 12 * * 13 * * 14 * * 15 * * 16 ********************************************************************************** 17 18 BLOCK 19 ENTRY TRANSLATE 20 21 BEGFRAME 22 ENDFRAME 23 04C22 DD5F8001 6 STAK 24 TRANSLATE ENTRNP PUSH 04C23 6080305D 2 25 LD R2 OPENLOC get the address that we are to display 04C24 5C00303A 26 CMZ FILEFLAG are we patching a file? 04C25 FE0C4C34 27 JNE DISPFILE do range checking for file 04C26 6000303B 0 28 LD R0 INBLOCK get the type of block in 04C27 FA2C4E49 0 29 JEQMW R0 NONEIN jump if no block in to look at 04C28 64840400 2 IMM 30 CPR R2 WPP are we still within the page? 04C29 FE064C2F 31 JGE FBIWRAP jump if beyond page data 32 * \ / 04C2A FA884C31 2 33 JLTZ R2 OPENFBI opening an FBI location 04C2B 18845400 2 IMM 34 ADD R2 ADR DATABLK make the real location 04C2C E480305E 2 35 ST R2 THEPLACE remember the location 04C2D 19C40002 7 IMM 36 ADD R7 2 double skip for block data 04C2E 5D1F8001 6 STAK 37 LEAVE POP return with THEPLACE set 38 * --- 39 00004C2F 40 FBIWRAP LABEL 04C2F 6087FFF5 2 IMM 41 LD R2 -FBILNTH wrap to the first of the FBI 04C30 E480305D 2 42 ST R2 OPENLOC and set current display address 00004C31 43 OPENFBI LABEL 04C31 382430DD 0 2 44 LEA R0 FBIBUFF(FBILNTH)(R2) get the address of the location 04C32 E400305E 0 45 ST R0 THEPLACE save the location 04C33 5D1F8001 6 STAK 46 LEAVE POP return with THEPLACE set 47 * --- 48 49 ********************************************************************************** 50 * * 51 * We are opening a location in a loaded code file. We * 52 * take the specified addr and see if it is within the block * 53 * that is present. If not, we write out the last block if * 54 * modified and read in the new one. * 55 * * 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 145 (P&PCMD2) F 16 Commands: DISPLAY, D, and DL 56 ********************************************************************************** 57 00004C34 58 DISPFILE LABEL 04C34 FA884C65 2 59 JLTZ R2 CANTFBI code for FBI looking at 04C35 600A8160 0 2 CBM 60 LD R0 R2/PAGEINDX get the page number 04C36 640403E8 0 IMM 61 CPR R0 CCBMAXPAGE beyond a code file? 04C37 FE063451 62 JGE BADFORM error if it is 04C38 61205800 4 0 63 LD R4 CCBBLK(R0) get the disk pointer for him 04C39 790030FE 4 64 AND R4 MSBLKMASK remove the volume number 04C3A FB024C52 4 65 JEQZ R4 NOTHERE jump if a hole 04C3B 6500303B 4 66 CPR R4 INBLOCK is this the block in? 04C3C FE024C49 67 JEQ ITSIN jump if in -- easy 68 * \ / 04C3D DC4034DE 69 CALLNP MODCHECK write out the last block 04C3E E500303B 4 70 ST R4 INBLOCK this is now the block in 04C3F 60845400 2 IMM 71 LD R2 ADR DATABLK zero fill the page before attempting read 04C40 60441000 1 IMM 72 LD R1 CPP how much to fill 04C41 FE580000 73 CFILL 00 74 * \ / 04C42 61003031 4 75 LD R4 DISKCBP 04C43 DC1013E0 @ 76 CALL @VREAD read in the data block 04C44 4140303B 77 PARV INBLOCK 04C45 41403017 78 PARV PFDATABLK 04C46 410030D2 79 PAR FBIBUFF 04C47 41440014 IMM 80 PARV FBITCODED 04C48 40004C4F 81 PARL LOADERR 82 * \ / 83 00004C49 84 ITSIN LABEL 04C49 6000305D 0 85 LD R0 OPENLOC pick up logical address 04C4A 600A2CA0 0 0 CBM 86 LD R0 R0/PAGEDISP get displacement in the page 04C4B 38205400 0 0 87 LEA R0 DATABLK(R0) get pointer to the item 04C4C E400305E 0 88 ST R0 THEPLACE remember the memory location 04C4D 19C40001 7 IMM 89 ADD R7 1 single skip for file data 04C4E 5D1F8001 6 STAK 90 LEAVE POP return with THEPLACE set 91 * --- 92 00004C4F 93 LOADERR LABEL the dam' block wouldn't read 04C4F 6040303B 1 94 LD R1 INBLOCK load the block number 04C50 DC40350E 95 CALLNP DISKERROUT tell him why it failed 04C51 FE0E4C49 96 JMP ITSIN 97 * --- 98 99 * There is nothing here to look at. Tell him so and don't open." 00004C52 100 NOTHERE LABEL 04C52 DC1013F9 @ 101 CALL @VPREPOUT 04C53 4100305D 102 PAR OPENLOC 04C54 40004C56 103 PARL NOTHEREM 04C55 FE0E3453 104 JMP MC 105 * --- 106 04C56 204E6F20 107 NOTHEREM TEXTZ " No block in code file corresponding to location \H1,6\." 108 109 * He has a file loaded. He can't look at the FBI stuff, since 110 * there is no single FBI. 00004C65 111 CANTFBI LABEL 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 146 (P&PCMD2) F 16 Commands: DISPLAY, D, and DL 04C65 DC1013F9 @ 112 CALL @VPREPOUT call for output 04C66 40004C68 113 PARL CANTFBIMSG of the warning message 04C67 FE0E3453 114 JMP MC and back to main control 115 * --- 116 04C68 20436F64 117 CANTFBIMSG TEXTZ " Code file currently selected. Can't display FBI." 118 +BADFORM 00003451 F 16 62j CANTFBI 00004C65 F 16 59j 111= CANTFBIMSG 00004C68 F 16 113a 117= +CCBBLK UUUUUUUU F 16 63 +CCBMAXPAGE 000003E8 F 16 61 +CPP 00001000 F 16 72 +DATABLK UUUUUUUU F 16 34a 71a 87a +DISKCBP 00003031 F 16 75 +DISKERROUT 0000350E F 16 95 DISPFILE 00004C34 F 16 27j 58= +FBIBUFF 000030D2 F 16 44a 79a +FBILNTH 0000000B F 16 41 44a +FBITCODED 00000014 F 16 80 FBIWRAP 00004C2F F 16 31j 40= +FILEFLAG 0000303A F 16 26 +INBLOCK 0000303B F 16 28 66 70s 77 94 ITSIN 00004C49 F 16 67j 84= 96j LOADERR 00004C4F F 16 81a 93= +MC 00003453 F 16 104j 114j +MODCHECK 000034DE F 16 69 +MSBLKMASK 000030FE F 16 64 +NONEIN UUUUUUUU F 16 29j NOTHERE 00004C52 F 16 65j 100= NOTHEREM 00004C56 F 16 103a 107= OPENFBI 00004C31 F 16 33j 43= +OPENLOC 0000305D F 16 25 42s 85 102a +PAGEDISP 00002CA0 F 16 86 +PAGEINDX 00000160 F 16 60 +PFDATABLK 00003017 F 16 78 +THEPLACE 0000305E F 16 35s 45s 88s +TRANSLATE 00004C22 F 16 19 24= +VPREPOUT 000013F9 F 16 101 112 +VREAD 000013E0 F 16 76 +WPP 00000400 F 16 30 119 END Translate 120 ALLFLAG 00000070 F 15 1681= 1700s ALPHA 00004B83 F 15 1735a 1914= AMFND 00004BEE F 15 1959j 2042= ATIME 00004B5F F 15 1777j 1855= AYEAR 00004B45 F 15 1779j 1815= B4DATE 00004C00 F 15 2031j 2044j 2059= BADDATE 00004B37 F 15 1784j 1785j 1795= +BADFORM 00003451 F 15 1270j 1273j 1276j 1282j 1289j 1469j 1471j 1502j 1504j 1559j 1562j 1565j 1580j 1593j F 16 62j BADMONTH 00004BAD F 15 1937j 1979= BADSTUF 00004B21 F 15 1740a 1741a 1760= 1976a BADTIME 00004B75 F 15 1858j 1866j 1876j 1882= BADYEAR 00004B51 F 15 1825j 1827j 1834= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 147 (P&PCMD2) F 16 Commands: DISPLAY, D, and DL +BUF 0000301B F 15 1454a +BUFL 00000050 F 15 1453 1461 +BUFP 0000302F F 15 1462s 1463 +CCBBLK UUUUUUUU F 16 63 +CCBMAXPAGE 000003E8 F 16 61 +CDISPLAY 000049F0 F 15 1247 1266= +CDISPLONG 00004AB2 F 15 1248 1554= +CH2 00002080 F 15 1314a +CODES 00003744 F 15 1790 +COLON 0000003A F 15 1470 1503 1724 +CONTENTS 000030CE F 15 1254 1379s 1382a +CPP 00001000 F 16 72 +CR 0000000D F 15 1480 1637 CROSSERR 00004AA8 F 15 1423j 1427j 1535= CROSSMSG 00004AAB F 15 1537a 1541= +DATABLK UUUUUUUU F 16 34a 71a 87a DATE 00003066 F 15 1671= 1716a 1787s 2071 DBLCLEAN 00004A61 F 15 1425j 1439= DBLDSPLY 00004A63 F 15 1437j 1442= DBLWRD 00004A50 F 15 1376j 1420= DDSTORE 00004AA5 F 15 1512j 1529= DEFAULTS 00004AF8 F 15 1696j 1705= DELBIT 00000410 F 15 1684= 1722s 1753s 1791s 1965s DELIM 00004B14 F 15 1736a 1739a 1752= DGOTINPUT 00004A92 F 15 1501j 1508= 2086j +DISBLKM 00004A20 F 15 1249 1332a 1335= DISDATA 00004A12 F 15 1313= 1314a 1383a 1411a 1445a +DISFBIM 00004A2A F 15 1250 1346= 1354a +DISFILEM 00004A27 F 15 1251 1340a 1344= +DISKCBP 00003031 F 16 75 +DISKERROUT 0000350E F 16 95 DISPCODE 00004A14 F 15 1314= 1322s DISPIN 00004A81 F 15 1466 1486= DISPOK 00004A16 F 15 1286j 1319= 1629j DISPTAB 00004A0A F 15 1304= 1321 DISPTYPE 0000305C F 15 1257= 1320s 1373 1465 DLASC 00004AD4 F 15 1585j 1608= DLDEC 00004AD1 F 15 1583j 1602= DLFLAG 00003062 F 15 1263= 1267s 1456 1555s DLGETCHNG 00004AE0 F 15 1457j 1636= DLGOTADR 00004AE7 F 15 1642j 1645= DLHEX 00004ACE F 15 1579j 1596= DLOK 00004ADC F 15 1599j 1605j 1611j 1617j 1625= DLPAK 00004ADA F 15 1587j 1589j 1620= DLPAK12 00004AD7 F 15 1591j 1614= +DOUBTIME 000030CE F 15 1429s 1434s 1441s 1444a 1500s 1518 1526 1694s 1702s 1711s 1714 2069a 2081s 2085 2091 +DPACKER 00003720 F 15 1498 DSPA 00000004 F 15 1297= 1584 1610 DSPD 00000001 F 15 1294= 1582 1604 DSPH 00000000 F 15 1293= 1317 1592 1598 DSPLYDATA 00004A32 F 15 1333j 1341j 1372= 1393j 1400j DSPLYDONE 00004A3C F 15 1384= 1412j DSPLYDONE2 00004A3D F 15 1386= 1447j DSPP 00000002 F 15 1295= 1586 1622 DSPP12 00000007 F 15 1300= 1590 1616 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 148 (P&PCMD2) F 16 Commands: DISPLAY, D, and DL DSPP6 00000003 F 15 1296= 1588 DSPTIME 00000005 F 15 1298= 1374 ENDSTRNG 00004C0B F 15 1734a 1970a 2065= ERROR 00004C1F F 15 1756j 1761j 1796j 1801j 1835j 1840j 1883j 1888j 1917j 1980j 1985j 2055j 2060j 2096= EXDATE 00004B3E F 15 1782j 1800= EXMNTH 00004BB3 F 15 1960j 1984= EXPM 00004BF6 F 15 2030j 2043j 2054= EXTIME 00004B7C F 15 1856j 1887= EXYEAR 00004B58 F 15 1816j 1839= +FBIBUFF 000030D2 F 16 44a 79a +FBILNTH 0000000B F 16 41 44a +FBINAMET 00003750 F 15 1350 +FBITCODED 00000014 F 16 80 +FILEFLAG 0000303A F 15 1395 1426 F 16 26 FLAGFLD 00000060 F 15 1680= 1691s 2066 FNDAT 00000610 F 15 1685= 1782j 1786s FNDMNTH 00000010 F 15 1682= 1915j 1960j 1961s FNDPM 00000210 F 15 1683= 1916j 2030j 2032s 2043j FNDTM 00000A10 F 15 1687= 1856j 1869s 2031j 2044j FNDYR 00000810 F 15 1686= 1816j 1829s FROMNUM 00004B34 F 15 1789= 1831j 1871j 1879j GET1TIME 00004AEF F 15 1492j 1690= GET2TIME 00004AF5 F 15 1493j 1699= +GETASCII 00003705 F 15 1491 +GETCHAR 00003729 F 15 1723 1728 1933 1964 GETCHNG 00004A68 F 15 1389j 1396j 1452= GETDISPTYP 000049FA F 15 1272j 1279= +GETFBIINDX 00003745 F 15 1275 1564 GETLDSPTYP 00004ABF F 15 1561j 1577= GETNUM 00004B29 F 15 1737a 1774= 1973a GETPAK12 00004A89 F 15 1494j 1497= GETTYPLOOP 000049FE F 15 1284= 1287j GOTCHAR 00004B99 F 15 1935j 1938= GOTINPUT 00004A7A F 15 1468j 1475= 1527j 2093j HAVECHAR 00004B0B F 15 1725j 1729= 1792j 1972a 1974a 1975a HOURS 00003065 F 15 1670= 1719a 1720s 1859s 2035 2047 +INBLOCK 0000303B F 16 28 66 70s 77 94 ITEMAGAIN 00004A71 F 15 1464= 1473j 1506j JUSTMOVEON 00004A7C F 15 1467j 1478= 1499j 1532j 2067j MAXDATE 00004AED F 15 1677= 1783 +MC 00003453 F 15 1481j 1538j 1638j 2099j F 16 104j 114j +MIDTIME 000030D1 F 15 1695s 2092 MNTHCNT 00000015 F 15 1925 2012= MNTHFND 00004B9B F 15 1929j 1955= MNTHNUM 00004BD0 F 15 1956 2014= MNTNAME 00004B8E F 15 1915j 1916j 1921= +MODCHECK 000034DE F 16 69 +MODFLAG 00003075 F 15 1477s 1520s 1531s MONTH 00003067 F 15 1672= 1717a 1962s 2072 MONTHTAB 00004BBB F 15 1928 1990= 2012e +MSBLKMASK 000030FE F 16 64 +MSECSH 0036EE80 F 15 1675x +MSECSM 0000EA60 F 15 1867 +MSECSS 000003E8 F 15 1877 MSHOUR 00004AEC F 15 1676= 1860 2037 2049 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 149 (P&PCMD2) F 16 Commands: DISPLAY, D, and DL +NAMEOFFBI 00003060 F 15 1253 1261= 1351s 1353a NEXTLOOP 00004B0A F 15 1727= 1738a 1754j NIJT 00004B0C F 15 1730 1733= NODISP 00004A15 F 15 1281j 1316= +NONEIN UUUUUUUU F 16 29j ONEHOUR2 00004AEB F 15 1675= 1676e 1710 2080 +OPENLOC 0000305D F 15 1252 1258= 1271s 1277s 1331a 1339a 1349 1387s 1391 1422s 1509 1514s 1521s 1525s 1560s 1566s 1641 F 16 25 42s 85 102a OPENNEXT 00004A19 F 15 1325= 1483j 1649j OVER100 00004B4A F 15 1818j 1823= +PACKDATE 00003AFF F 15 2068 +PACKER 00003716 F 15 1489 1490 +PAGEDISP 00002CA0 F 16 86 +PAGEINDX 00000160 F 16 60 +PFDATABLK 00003017 F 16 78 PMFND 00004BE5 F 15 1958j 2029= +PREBUF 00003030 F 15 1721 PRINTFBIA 00004A2C F 15 1327j 1348= PRINTFILEA 00004A23 F 15 1328j 1337= SINGLE 00000C10 F 15 1688= 1692s 2084j +SINGTIME 000030CF F 15 1380s 1408s 1410a 1693 SINGWRD 00004A4A F 15 1375j 1406= SKIPSTUF 00004BA2 F 15 1963= 1971a 1977a 2036j 2039j 2048j 2051j SNDSINGL 00004C1B F 15 2084j 2089= SRCHLOOP 00004B8F F 15 1923= 1940j SRCHTAB 00004B91 F 15 1927= 1930j SSJT 00004BA5 F 15 1966 1969= STOREY 00004B4E F 15 1820j 1828= +TALPH 00003C10 F 15 1273j 1282j 1562j 1580j +TEOL 00003810 F 15 1281j 1467j 1499j 1579j TERMCHAR 0000305F F 15 1260= 1460s 1479 THEPLACE 0000305E F 15 1259= 1378 1390s 1407 1428 1433 1436s 1440 1476s 1519s 1530s F 16 35s 45s 88s TIME 00003064 F 15 1669= 1715a 1861s 1868s 1878s 2038s 2050s 2070 +TIMEZONE 000030D0 F 15 1255 1707 2077 TMMASK 00004AEE F 15 1678= 1701 +TNUM 00003E10 F 15 1272j 1468j 1501j 1561j TRANSLATE 00004C22 F 15 1326 1397 1430 1515 1522 F 16 19 24= TYPETAB 00004A02 F 15 1285 1292= 1302e 1582 1584 1586 1588 1590 1592 TYPETABL 00000008 F 15 1283 1302= +UNPACKDATE 00003ACC F 15 1713 +VARS 0000305C F 15 1257e 1258e 1259e 1260e 1261e 1262e 1263e 1264e 1669e 1670e 1671e 1672e 1673e +VFETCHITEM 000013F5 F 15 1280 1488 1578 1775 1864 1874 +VFETCHITMH 000013F8 F 15 1269 1487 1558 +VPREPOUT 000013F9 F 15 1330 1338 1352 1381 1409 1443 1536 2097 F 16 101 112 +VREAD 000013E0 F 16 76 +VREADLINE 000013F3 F 15 1455 WORDCOUNT 00003061 F 15 1262= 1268s 1388s 1421s 1482s 1557s 1574s 1627 1628s 1640s 1643s 1647 1648s WORDPERLN 00003063 F 15 1264= 1626s 1646 +WPP 00000400 F 16 30 YEAR 00003068 F 15 1673= 1718a 1830s 2073 121 END D/DL command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 150 (P&PCMD2) F 16 Command: SCAN 124 125 ********************************************************************************** 126 * * 127 * SCAN is the command which one uses to search for a word * 128 * within the currently loaded block or file. Valid addresses * 129 * are those appropriate to the item loaded (i.e. if a block, * 130 * then addresses within that block., if a file, then addresses * 131 * within that file). The default final address is the last * 132 * word in the block or file. If a mask is specified, then the * 133 * word is masked and (a copy of) each word checked is masked * 134 * before making the comparison. The scan is terminated when * 135 * the first match is found or the entire area has been * 136 * searched. If found, the address and (unmasked) value of the * 137 * matching word are printed. If a file is loaded then the * 138 * block number is also printed. Control returns to the command * 139 * processor. A subsequent input of SCAN with no arguments * 140 * specified will continue the search from just after the * 141 * previous stopping point. * 142 * * 143 ********************************************************************************** 144 145 BLOCK SCAN command 146 ENTRY CNSCAN 147 ENTRY CSCAN 148 04C75 000F9FFF 149 MAXLOC VFD (CCBMAXPAGE-1)*PAGEINDX+(WPP-1)*PAGEDISP 150 00004C76 151 CNSCAN LABEL 04C76 EDC030C9 152 STW NEGATE indicate no match desired end point 04C77 FE0E4C79 153 JMP SHARESCAN 154 * --- 155 00004C78 156 CSCAN LABEL 04C78 EC0030C9 157 STZ NEGATE indicate equals is desired end point 00004C79 158 SHARESCAN LABEL 04C79 DC00375B 159 CALL GETRANGEF get the search area 04C7A 410030C2 160 PAR FIRSTLOC ... base 04C7B 410030C3 161 PAR LASTLOC ... last loc 04C7C 60040000 0 IMM 162 LD R0 0 set limits 04C7D 6044040A 1 IMM 163 LD R1 WPP+FBILNTH-1 on the range 04C7E 5C00303A 164 CMZ FILEFLAG what's loaded? 04C7F FE024C81 165 JEQ NOTFILE jump if it might be a block 04C80 60404C75 1 166 LD R1 MAXLOC biggest possible in a code file 167 * \ / 168 00004C81 169 NOTFILE LABEL we've got our limits 04C81 42540000 01 PAIR 170 PARV2L PAIR R0 give them to the routine 04C82 FE0E4C9C 171 JMP BADLEAVE jump if line error 04C83 F6784C8F 1 172 JBT R1/TEOL PARMSDONE jump if we're resuming an old search 173 * \ / 04C84 DC5013F8 @ 174 CALLNP @VFETCHITMH get the unmasked pattern 04C85 F6784C8F 1 175 JBT R1/TEOL PARMSDONE jump to search using old parms 04C86 F27E4C9E 1 176 JBF R1/TNUM LOOKSBAD2 format error if not a number 04C87 E48030CA 2 177 ST R2 SPATTERN save pattern away 178 * \ / 04C88 D14030CB 179 STMW SMASK load default value and try to ... 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 151 (P&PCMD2) F 16 Command: SCAN 04C89 DC5013F8 @ 180 CALLNP @VFETCHITMH ... get the word mask 04C8A F6784C8F 1 181 JBT R1/TEOL PARMSDONE jump if not specified 04C8B F27E4C9E 1 182 JBF R1/TNUM LOOKSBAD2 format error if it wasn't a number 04C8C E48030CB 2 183 ST R2 SMASK we got it, so remember it 184 * \ / 04C8D DC5013F8 @ 185 CALLNP @VFETCHITMH check for junk at end of line 04C8E F2784C9E 1 186 JBF R1/TEOL LOOKSBAD2 format error if we find anything 187 188 * Are we looking at a file? 189 00004C8F 190 PARMSDONE LABEL 04C8F 600030C2 0 191 LD R0 FIRSTLOC must check this if we had no params 04C90 FA2C4D5D 0 192 JEQMW R0 BADMORALS jump if we can't resume previous scan 04C91 5C00303A 193 CMZ FILEFLAG 0 = no file loaded 04C92 FE0C4CA2 194 JNE SCANFILE jump to scan a file 195 * \ / 196 197 * is a block loaded? 04C93 6000303B 0 198 LD R0 INBLOCK loaded block number or -1 04C94 FA2C4CA0 0 199 JEQMW R0 NOBLOCK no file or block! 200 * \ / 201 202 ********************************************************************************** 203 * * 204 * A block is loaded, and all the parameters are in place. * 205 * * 206 ********************************************************************************** 207 208 * time to scan ... 00004C95 209 SINGLE LABEL 04C95 DC0037EC 210 CALL SCANBLOCK do the scan 04C96 414030C2 211 PARV FIRSTLOC 04C97 414030C3 212 PARV LASTLOC 04C98 424030CA 213 PARV2L SPATTERN 04C99 FE0E4CBB 214 JMP DISPLAYIT 215 * \ / 216 00004C9A 217 NOMORETODO LABEL nothing matched anywhere 04C9A DC1013F9 @ 218 CALL @VPREPOUT print bad message 04C9B 40003119 219 PARL SORRYMESS 00004C9C 220 BADLEAVE LABEL 04C9C D14030C2 221 STMW FIRSTLOC no need to MORE process 04C9D FE0E3453 222 JMP MC return 'em 223 * --- 224 00004C9E 225 LOOKSBAD2 LABEL format error occurred 04C9E D14030C2 226 STMW FIRSTLOC obviously can't MORE with them 04C9F FE0E4D44 227 JMP LOOKSBAD "Bad format" and JMP MC 228 * --- 229 00004CA0 230 NOBLOCK LABEL neither file nor block was loaded 04CA0 D14030C2 231 STMW FIRSTLOC say that MORE values are bad 04CA1 FE0E4E49 232 JMP NONEIN "No block loaded" and JMP MC 233 * --- 234 235 ********************************************************************************** 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 152 (P&PCMD2) F 16 Command: SCAN 236 * * 237 * A file is loaded so we must extract the block numbers and * 238 * displacements out of FIRSTLOC and LASTLOC. Note that the * 239 * displacement FIRSTLOC must be altered if the first block * 240 * is a hole, since that block will not be searched. * 241 * * 242 ********************************************************************************** 243 00004CA2 244 SCANFILE LABEL 04CA2 600030C2 0 245 LD R0 FIRSTLOC R0 = block + disp 04CA3 614A0160 5 0 CBM 246 LD R5 R0/PAGEINDX R5 = block 04CA4 EC0A0160 0 CBM 247 STZ R0/PAGEINDX R0 = disp 248 249 * If the first block is a hole, we have to reset FIRSTLOC to 250 * start at the beginning of that block 251 04CA5 606A5800 1 5 252 LD R1 CCBBLK(R5) is firstblock ... 04CA6 784030FE 1 253 AND R1 MSBLKMASK ... a hole? 04CA7 FA4C4CA9 1 254 JNEZ R1 NORM jump if it isn't 04CA8 60040000 0 IMM 255 LD R0 0 if it is, start at first word 256 * \ / 257 00004CA9 258 NORM LABEL things are normal 04CA9 E40030C2 0 259 ST R0 FIRSTLOC where we start in first real block 04CAA 600030C3 0 260 LD R0 LASTLOC pick up end spot 04CAB 604A0160 1 0 CBM 261 LD R1 R0/PAGEINDX extract the page number 04CAC E44030C4 1 262 ST R1 LASTBLOCK and save for searcher 04CAD EC0A0160 0 CBM 263 STZ R0/PAGEINDX clean out this page number 04CAE E40030C3 0 264 ST R0 LASTLOC and save plain displacement 265 * \ / 266 267 ********************************************************************************** 268 * * 269 * This loop will search through the blocks of the file. In * 270 * general it will search the entire block, but the first and * 271 * last blocks are only checked as required for FIRSTLOC and * 272 * LASTLOC (i.e. it handles single block scans). * 273 * * 274 ********************************************************************************** 275 276 * \ / 00004CAF 277 FLOOP LABEL 04CAF DC0037A0 278 CALL FINDBLOCK R5 = next non-hole or -1 04CB0 404030C4 279 PARVL LASTBLOCK 04CB1 FB484C9A 5 280 JLTZ R5 NOMORETODO jump if no more pages 281 * \ / 04CB2 654030C4 5 282 CPR R5 LASTBLOCK are we in the final leg? 04CB3 FE024C95 283 JEQ SINGLE if so, check the last block 284 * \ / 04CB4 DC0037EC 285 CALL SCANBLOCK check current non-final block 04CB5 414030C2 286 PARV FIRSTLOC 04CB6 414403FF IMM 287 PARV WPP-1 04CB7 424030CA 288 PARV2L SPATTERN 04CB8 FE0E4CBB 289 JMP DISPLAYIT 290 * \ / 291 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 153 (P&PCMD2) F 16 Command: SCAN 04CB9 EC0030C2 292 STZ FIRSTLOC no match, FIRSTLOC = usual start offset 04CBA FB604CAF 5 293 IRJ R5 FLOOP keep scanning 294 * --- 295 296 ********************************************************************************** 297 * * 298 * Display value and set MORE processing * 299 * * 300 ********************************************************************************** 301 00004CBB 302 DISPLAYIT LABEL 04CBB E44030CE 1 303 ST R1 CONTENTS remember what we found 04CBC 5C00303A 304 CMZ FILEFLAG file or block? 04CBD FE0C4CC1 305 JNE FILEIT jump if were displaying from file 306 * \ / 307 308 * Block is loaded 04CBE E40030C2 0 309 ST R0 FIRSTLOC remember position for restart 04CBF DC403811 310 CALLNP DISPBLKLOC and print info for operator 04CC0 FE0E4CCD 311 JMP LLOK go to resume 312 * --- 313 00004CC1 314 FILEIT LABEL 04CC1 E54A0160 5 0 CBM 315 ST R5 R0/PAGEINDX remember block we're looking at 04CC2 E40030C2 0 316 ST R0 FIRSTLOC and save in start location 04CC3 DC1013F9 @ 317 CALL @VPREPOUT print the location 04CC4 410030C2 318 PAR FIRSTLOC 04CC5 40004A27 319 PARL DISFILEM format for file location 320 * \ / 04CC6 DC1013F9 @ 321 CALL @VPREPOUT time for the contents 04CC7 410030CE 322 PAR CONTENTS this is what we want! 04CC8 4000310A 323 PARL DISDATA2 must include CR-LF 324 * \ / 04CC9 600030C3 0 325 LD R0 LASTLOC pick up end displacement 04CCA 604030C4 1 326 LD R1 LASTBLOCK pick up end block 04CCB E44A0160 1 0 CBM 327 ST R1 R0/PAGEINDX do the combination operation 04CCC E40030C3 0 328 ST R0 LASTLOC and save for the restart 329 * \ / 330 00004CCD 331 LLOK LABEL 04CCD 600030C2 0 332 LD R0 FIRSTLOC prepare FIRSTLOC to resume scan 04CCE 18040001 0 IMM 333 ADD R0 1 from the next location 04CCF 640030C3 0 334 CPR R0 LASTLOC was the match at LASTLOC? 04CD0 FE044C9C 335 JGT BADLEAVE jump if can't search any more 04CD1 E40030C2 0 336 ST R0 FIRSTLOC remember the spot 04CD2 FE0E3453 337 JMP MC make a next time 338 * --- 339 BADLEAVE 00004C9C F 16 171j 220= 335j +BADMORALS UUUUUUUU F 16 192j +CCBBLK UUUUUUUU F 16 252 +CCBMAXPAGE 000003E8 F 16 149x +CNSCAN 00004C76 F 16 146 151= +CONTENTS 000030CE F 16 303s 322a +CSCAN 00004C78 F 16 147 156= +DISDATA2 0000310A F 16 323a 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 154 (P&PCMD2) F 16 Command: SCAN +DISFILEM 00004A27 F 16 319a +DISPBLKLOC 00003811 F 16 310 DISPLAYIT 00004CBB F 16 214j 289j 302= +FBILNTH 0000000B F 16 163 +FILEFLAG 0000303A F 16 164 193 304 FILEIT 00004CC1 F 16 305j 314= +FINDBLOCK 000037A0 F 16 278 +FIRSTLOC 000030C2 F 16 160a 191 211 221s 226s 231s 245 259s 286 292s 309s 316s 318a 332 336s FLOOP 00004CAF F 16 277= 293j +GETRANGEF 0000375B F 16 159 +INBLOCK 0000303B F 16 198 +LASTBLOCK 000030C4 F 16 262s 279 282 326 +LASTLOC 000030C3 F 16 161a 212 260 264s 325 328s 334 LLOK 00004CCD F 16 311j 331= +LOOKSBAD UUUUUUUU F 16 227j LOOKSBAD2 00004C9E F 16 176j 182j 186j 225= MAXLOC 00004C75 F 16 149= 166 +MC 00003453 F 16 222j 337j +MSBLKMASK 000030FE F 16 253 +NEGATE 000030C9 F 16 152s 157s NOBLOCK 00004CA0 F 16 199j 230= NOMORETODO 00004C9A F 16 217= 280j +NONEIN UUUUUUUU F 16 232j NORM 00004CA9 F 16 254j 258= NOTFILE 00004C81 F 16 165j 169= +PAGEDISP 00002CA0 F 16 149x +PAGEINDX 00000160 F 16 149x 246 247s 261 263s 315s 327s PARMSDONE 00004C8F F 16 172j 175j 181j 190= +SCANBLOCK 000037EC F 16 210 285 SCANFILE 00004CA2 F 16 194j 244= SHARESCAN 00004C79 F 16 153j 158= SINGLE 00004C95 F 16 209= 283j +SMASK 000030CB F 16 179s 183s +SORRYMESS 00003119 F 16 219a +SPATTERN 000030CA F 16 177s 213 288 +TEOL 00003810 F 16 172j 175j 181j 186j +TNUM 00003E10 F 16 176j 182j +VFETCHITMH 000013F8 F 16 174 180 185 +VPREPOUT 000013F9 F 16 218 317 321 +WPP 00000400 F 16 149x 163 287 340 END SCAN command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 155 (P&PCMD2) F 16 Command: ACCOUNT 343 344 ********************************************************************************** 345 * * 346 * This command restricts DSCAN finds to the specified account. * 347 * * 348 ********************************************************************************** 349 350 BLOCK ACCOUNT command 351 ENTRY CACCOUNT 352 353 BEGFRAME 354 ENDFRAME 355 00004CD3 356 CACCOUNT LABEL 04CD3 6144303C 5 IMM 357 LD R5 ADR FILENAME Where to parse the account name 04CD4 60C40000 3 IMM 358 LD R3 0 04CD5 DC5013F6 @ 359 CALLNP @VFETCHFNM 04CD6 F6784CDD 1 360 JBT R1/TEOL PARMSDONE jump if not specified 04CD7 FA083451 0 361 JLTZ R0 BADFORM 04CD8 60003046 0 362 LD R0 FILENAME(10) 04CD9 60403047 1 363 LD R1 FILENAME(11) Pick up account name and project 04CDA 60803048 2 364 LD R2 FILENAME(12) from file name and ext location 04CDB FA1C4CDF 01 365 JNEZ2 R0 ACCTGIVEN 04CDC FAAE4CDF 2 366 JNEMW R2 ACCTGIVEN 00004CDD 367 PARMSDONE LABEL 04CDD D14030BF 368 STMW SCANACCT 04CDE FE0E3453 369 JMP MC 370 * --- 00004CDF 371 ACCTGIVEN LABEL 04CDF E60030BF 01 372 ST2 R0 SCANACCT 04CE0 E48030C1 2 373 ST R2 SCANACCT(2) 04CE1 FE0E3453 374 JMP MC 375 * --- ACCTGIVEN 00004CDF F 16 365j 366j 371= +BADFORM 00003451 F 16 361j +CACCOUNT 00004CD3 F 16 351 356= +FILENAME 0000303C F 16 357a 362 363 364 +MC 00003453 F 16 369j 374j PARMSDONE 00004CDD F 16 360j 367= +SCANACCT 000030BF F 16 368s 372s 373s +TEOL 00003810 F 16 360j +VFETCHFNM 000013F6 F 16 359 376 END 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 156 (P&PCMD2) F 16 Command: DSCAN 379 380 ********************************************************************************** 381 * * 382 * DSCAN is the command which one uses to search for a * 383 * word within the currently loaded disk. The default final * 384 * address is the last word of the last block on the disk. * 385 * If a mask is specified, the pattern and each word checked * 386 * are masked prior the comparison. The scan is terminated * 387 * when the first match is made or the entire area has been * 388 * searched. The address and unmasked value of the first * 389 * matching word are printed. Control returns to the command * 390 * processor. A subsequent DSCAN with no arguments specified * 391 * continues the search from just after the previous * 392 * stopping point. * 393 * * 394 ********************************************************************************** 395 396 BLOCK DSCAN command 397 ENTRY CDNSCAN 398 ENTRY CDSCAN 399 ENTRY LOOKSBAD 400 ENTRY BADMORALS 401 00004CE2 402 CDNSCAN LABEL 04CE2 EDC030C9 403 STW NEGATE indicate no match desired end point 04CE3 FE0E4CE5 404 JMP SHAREDSCAN 405 * --- 406 00004CE4 407 CDSCAN LABEL 04CE4 EC0030C9 408 STZ NEGATE indicate equals is desired end point 00004CE5 409 SHAREDSCAN LABEL 410 411 ********************************************************************************** 412 * Check for command modifiers. * 413 * DSCAN,N says to not stop. * 414 * DSCAN,L says to list data as if LOAD command. * 415 ********************************************************************************** 416 04CE5 EC0030C5 417 STZ DOPTIONS set options for normal operation 04CE6 6404002C 0 IMM 418 CPR R0 "," check for comma 04CE7 FE0C4CF3 419 JNE NOCOMMA jump if normal command 04CE8 DC403729 420 CALLNP GETCHAR discard the comma, get action char 04CE9 64440001 1 IMM 421 CPR R1 1 see if alpha 04CEA FE0C3451 422 JNE BADFORM must be letter 04CEB 6404004E 0 IMM 423 CPR R0 "N" check for no stop 04CEC FE0C4CEF 424 JNE NOTNOSTOP jump if not 'N' 04CED EDC030C5 425 STW DOPTIONS set options for no stop 04CEE FE0E4CF2 426 JMP COMEX done with command options 427 * --- 00004CEF 428 NOTNOSTOP LABEL 04CEF 6404004C 0 IMM 429 CPR R0 "L" check for list 04CF0 FE0C3451 430 JNE BADFORM jump if neither N or L 04CF1 D14030C5 431 STMW DOPTIONS set options for list 00004CF2 432 COMEX LABEL 04CF2 DC403729 433 CALLNP GETCHAR discard the action character 00004CF3 434 NOCOMMA LABEL 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 157 (P&PCMD2) F 16 Command: DSCAN 435 * \ / 436 * get the block range, which must be between 0 and the number 437 * of blocks on the disk (GETRANGE does the checking). If no 438 * parameters are found, the values left over from the previous 439 * DSCAN are used. 440 * \ / 04CF3 DC003761 441 CALL GETRANGE get block range 04CF4 41003074 442 PAR FIRSTBLOCK 04CF5 410030C4 443 PAR LASTBLOCK 04CF6 60040000 0 IMM 444 LD R0 0 must be non-negative 04CF7 60403031 1 445 LD R1 DISKCBP must be ... 04CF8 60564805 1 1 BASE 446 LD R1 R1,DCBVOLSIZE ... within the ... 04CF9 D0524000 1 REG 447 DEC R1 ... size of the disk 04CFA 42540000 01 PAIR 448 PARV2L PAIR R0 04CFB FE0E4D6E 449 JMP BADLEAVE so soon? 04CFC F6784D1F 1 450 JBT R1/TEOL PARMSDONE no parameters, try previous values 451 * \ / 452 453 * check for user-specified subrange, default to block plus FBI 04CFD DC403795 454 CALLNP SKIPBLANKS elide filler 04CFE F6784D1F 1 455 JBT R1/TEOL PARMSDONE use previous values if only DA specified 04CFF 60840000 2 IMM 456 LD R2 0 set low default 04D00 E48030C6 2 457 ST R2 SUBRANGE1 remember it 04D01 60C4040A 3 IMM 458 LD R3 WPP+FBILNTH-1 set high default 04D02 E4C030C7 3 459 ST R3 SUBRANGE2 remember it 04D03 6404005B 0 IMM 460 CPR R0 "[" check for special character 04D04 FE0C4D12 461 JNE RANGEDONE jump out, use default values 462 * \ / 463 464 * fetch the user's values 04D05 D00B1F30 4 CBM 465 INC R4/FLDCHARS move past the funny symbol 04D06 DC00375B 466 CALL GETRANGEF get subrange, FBI symbols OK 04D07 410030C6 467 PAR SUBRANGE1 04D08 410030C7 468 PAR SUBRANGE2 04D09 42548000 23 PAIR 469 PARV2L PAIR R2 04D0A FE0E4D6E 470 JMP BADLEAVE 471 * \ / 04D0B F2764D0E 1 472 JBF R1/DEFBIT CHECKALL jump if default last address wasn't used 04D0C 600030C6 0 473 LD R0 SUBRANGE1 otherwise, make it so only one 04D0D E40030C7 0 474 ST R0 SUBRANGE2 is checked 00004D0E 475 CHECKALL LABEL 04D0E DC403795 476 CALLNP SKIPBLANKS elide filler 04D0F 6404005D 0 IMM 477 CPR R0 "]" must get trailing character 04D10 FE0C4D44 478 JNE LOOKSBAD jump if no got it 04D11 D00B1F30 4 CBM 479 INC R4/FLDCHARS press onward 480 * \ / 481 00004D12 482 RANGEDONE LABEL 04D12 600030C6 0 483 LD R0 SUBRANGE1 get first loc and 04D13 E40030C8 0 484 ST R0 RESUMELOC reset the beginning position 485 * \ / 04D14 DC5013F8 @ 486 CALLNP @VFETCHITMH get the pattern 04D15 F6784D1F 1 487 JBT R1/TEOL PARMSDONE jump to search using old parms 04D16 F27E4D44 1 488 JBF R1/TNUM LOOKSBAD it's got to be an integer 04D17 E48030CC 2 489 ST R2 DPATTERN other than that, anything 490 * \ / 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 158 (P&PCMD2) F 16 Command: DSCAN 04D18 D14030CD 491 STMW DMASK give default mask 04D19 DC5013F8 @ 492 CALLNP @VFETCHITMH try for user-specified 04D1A F6784D1F 1 493 JBT R1/TEOL PARMSDONE nada 04D1B F27E4D44 1 494 JBF R1/TNUM LOOKSBAD jump if mask is not a number 04D1C E48030CD 2 495 ST R2 DMASK if number, save for use 496 * \ / 04D1D DC5013F8 @ 497 CALLNP @VFETCHITMH check for trailing garbage 04D1E F2784D44 1 498 JBF R1/TEOL LOOKSBAD extra junk at the end of the line 499 * \ / 500 501 * parameter fetching is complete, FIRSTBLOCK <> -1 if the 502 * previous DSCAN left valid parameters 503 00004D1F 504 PARMSDONE LABEL time to do the scan 04D1F 61403074 5 505 LD R5 FIRSTBLOCK get our first candidate 04D20 FB6C4D5D 5 506 JEQMW R5 BADMORALS bad message if params invalid 00004D21 507 RELOOP LABEL 04D21 EC00303A 508 STZ FILEFLAG this isn't file patching 04D22 DC0037D5 509 CALL LOADBLOCK load a block 04D23 40534000 5 REG 510 PARVL R5 R5 has disk block number 04D24 FE0E4D6E 511 JMP BADLEAVE jump out if bad load 04D25 600030C8 0 512 LD R0 RESUMELOC get very first place to check 513 * \ / 514 00004D26 515 LOOP LABEL 04D26 DC403AB9 516 CALLNP TESTFORBRK check if break hit 04D27 FE0E4D35 517 JMP HITBREAK jump if guy did 04D28 DC0037EC 518 CALL SCANBLOCK try this one 04D29 41520000 0 REG 519 PARV R0 base of scan 04D2A 414030C7 520 PARV SUBRANGE2 last location to check 04D2B 424030CC 521 PARV2L DPATTERN say what to look for 04D2C FE0E4D46 522 JMP SUCCESS exit if there was a match 523 * \ / 04D2D 654030C4 5 524 CPR R5 LASTBLOCK did we just do the last one? 04D2E FE064D60 525 JGE SORRYCHAR jump if so, unsuccessful search 526 * \ / 04D2F D0134000 5 REG 527 INC R5 new block number 04D30 DC0037D5 528 CALL LOADBLOCK load a block 04D31 40534000 5 REG 529 PARVL R5 R5 has disk block number 04D32 FE0E4D6E 530 JMP BADLEAVE jump out if bad load 04D33 600030C6 0 531 LD R0 SUBRANGE1 reset start offset 04D34 FE0E4D26 532 JMP LOOP otherwise, get next block 533 * --- 534 00004D35 535 HITBREAK LABEL 04D35 6000303B 0 536 LD R0 INBLOCK Save current disk address as next 04D36 E4003074 0 537 ST R0 FIRSTBLOCK default starting position 04D37 DC1013F9 @ 538 CALL @VPREPOUT output message 04D38 4100303B 539 PAR INBLOCK current block number 04D39 40004D3B 540 PARL BRKMSG message prototype 04D3A FE0E3453 541 JMP MC back for another command 542 * --- 543 04D3B 20425245 544 BRKMSG TEXTZ " BREAK detected. Block = \H1,6\" 545 546 * format error occurred 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 159 (P&PCMD2) F 16 Command: DSCAN 00004D44 547 LOOKSBAD LABEL 04D44 D1403074 548 STMW FIRSTBLOCK parameters are invalid 04D45 FE0E3451 549 JMP BADFORM 'Bad Format' and JMP MC 550 * --- 551 552 ********************************************************************************** 553 * * 554 * Prepare MORE values, display successful results, and * 555 * return to main loop * 556 * * 557 ********************************************************************************** 558 00004D46 559 SUCCESS LABEL 04D46 5C0030C5 560 CMZ DOPTIONS check options 04D47 FE0C4D4B 561 JNE SUCNEXT if continuing, skip to next block 04D48 60961001 2 0 REG 562 LD R2 R0+1 R2 = last spot checked + 1 04D49 648030C7 2 563 CPR R2 SUBRANGE2 jump if incremented value 04D4A FE0A4D50 564 JLE AHEAD is in the same block 565 * \ / 00004D4B 566 SUCNEXT LABEL 04D4B 608030C6 2 567 LD R2 SUBRANGE1 R2 = first spot in next subrange 04D4C 654030C4 5 568 CPR R5 LASTBLOCK but make sure we didn't exhaust search 04D4D FE084D4F 569 JLT ALLOWMORE jump if more area available 04D4E 6147FFFE 5 IMM 570 LD R5 -2 R5 = -2 so that FIRSTBLOCK = -1 571 * \ / 572 00004D4F 573 ALLOWMORE LABEL 04D4F 19440001 5 IMM 574 ADD R5 1 increment block counter 575 * \ / 576 00004D50 577 AHEAD LABEL 04D50 E5403074 5 578 ST R5 FIRSTBLOCK and remember first block and ... 04D51 E48030C8 2 579 ST R2 RESUMELOC ... offset for next time 04D52 DC403811 580 CALLNP DISPBLKLOC display the location of match 04D53 5C0030C5 581 CMZ DOPTIONS check options 04D54 FE0C4D59 582 JNE SUCONT if continuing, print different 583 * \ / 584 00004D55 585 PLACEUS LABEL 04D55 DC1013F9 @ 586 CALL @VPREPOUT display the current block 04D56 4100303B 587 PAR INBLOCK 04D57 40004D70 588 PARL IDBLOCK 04D58 FE0E3453 589 JMP MC 590 * --- 591 00004D59 592 SUCONT LABEL 04D59 DC403824 593 CALLNP DESCRBLK describe the block 04D5A 61403074 5 594 LD R5 FIRSTBLOCK get our first candidate 04D5B FB6C4D66 5 595 JEQMW R5 CONMESS indicate search done if used up 04D5C FE0E4D21 596 JMP RELOOP 597 * --- 598 599 * print disheartening message 00004D5D 600 BADMORALS LABEL 04D5D DC1013F9 @ 601 CALL @VPREPOUT 04D5E 40003105 602 PARL BRMESS "Invalid parameters." 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 160 (P&PCMD2) F 16 Command: DSCAN 04D5F FE0E3453 603 JMP MC return to main control looop 604 * --- 605 606 * print unhappy but suitably polite message 00004D60 607 SORRYCHAR LABEL 04D60 5C0030C5 608 CMZ DOPTIONS check options 04D61 FE0C4D66 609 JNE CONMESS if multiple options possible, skip msg 04D62 DC1013F9 @ 610 CALL @VPREPOUT 04D63 40003119 611 PARL SORRYMESS "Pattern not found." 04D64 D1403074 612 STMW FIRSTBLOCK parameters are invalid 04D65 FE0E4D55 613 JMP PLACEUS 614 * --- 615 00004D66 616 CONMESS LABEL 04D66 DC1013F9 @ 617 CALL @VPREPOUT 04D67 40004D6A 618 PARL ENDMESS "Search end." 04D68 D1403074 619 STMW FIRSTBLOCK parameters are invalid 04D69 FE0E4D55 620 JMP PLACEUS 621 * --- 622 04D6A 20536561 623 ENDMESS TEXTZ " Search end." 624 625 * back to square one 00004D6E 626 BADLEAVE LABEL 04D6E D1403074 627 STMW FIRSTBLOCK parameters are invalid 04D6F FE0E3453 628 JMP MC 629 * --- 630 04D70 20426C6F 631 IDBLOCK TEXTZ " Block = \H1,6\" 632 AHEAD 00004D50 F 16 564j 577= ALLOWMORE 00004D4F F 16 569j 573= +BADFORM 00003451 F 16 422j 430j 549j BADLEAVE 00004D6E F 16 449j 470j 511j 530j 626= +BADMORALS 00004D5D F 16 400 506j 600= BRKMSG 00004D3B F 16 540a 544= +BRMESS 00003105 F 16 602a +CDNSCAN 00004CE2 F 16 397 402= +CDSCAN 00004CE4 F 16 398 407= CHECKALL 00004D0E F 16 472j 475= COMEX 00004CF2 F 16 426j 432= CONMESS 00004D66 F 16 595j 609j 616= +DCBVOLSIZE 00160805 F 16 446 +DEFBIT 00003610 F 16 472j +DESCRBLK 00003824 F 16 593 +DISKCBP 00003031 F 16 445 +DISPBLKLOC 00003811 F 16 580 +DMASK 000030CD F 16 491s 495s +DOPTIONS 000030C5 F 16 417s 425s 431s 560 581 608 +DPATTERN 000030CC F 16 489s 521 ENDMESS 00004D6A F 16 618a 623= +FBILNTH 0000000B F 16 458 +FILEFLAG 0000303A F 16 508s +FIRSTBLOCK 00003074 F 16 442a 505 537s 548s 578s 594 612s 619s 627s +FLDCHARS 00001F30 F 16 465s 479s +GETCHAR 00003729 F 16 420 433 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 161 (P&PCMD2) F 16 Command: DSCAN +GETRANGE 00003761 F 16 441 +GETRANGEF 0000375B F 16 466 HITBREAK 00004D35 F 16 517j 535= IDBLOCK 00004D70 F 16 588a 631= +INBLOCK 0000303B F 16 536 539a 587a +LASTBLOCK 000030C4 F 16 443a 524 568 +LOADBLOCK 000037D5 F 16 509 528 +LOOKSBAD 00004D44 F 16 399 478j 488j 494j 498j 547= LOOP 00004D26 F 16 515= 532j +MC 00003453 F 16 541j 589j 603j 628j +NEGATE 000030C9 F 16 403s 408s NOCOMMA 00004CF3 F 16 419j 434= NOTNOSTOP 00004CEF F 16 424j 428= PARMSDONE 00004D1F F 16 450j 455j 487j 493j 504= PLACEUS 00004D55 F 16 585= 613j 620j RANGEDONE 00004D12 F 16 461j 482= RELOOP 00004D21 F 16 507= 596j +RESUMELOC 000030C8 F 16 484s 512 579s +SCANBLOCK 000037EC F 16 518 SHAREDSCAN 00004CE5 F 16 404j 409= +SKIPBLANKS 00003795 F 16 454 476 SORRYCHAR 00004D60 F 16 525j 607= +SORRYMESS 00003119 F 16 611a +SUBRANGE1 000030C6 F 16 457s 467a 473 483 531 567 +SUBRANGE2 000030C7 F 16 459s 468a 474s 520 563 SUCCESS 00004D46 F 16 522j 559= SUCNEXT 00004D4B F 16 561j 566= SUCONT 00004D59 F 16 582j 592= +TEOL 00003810 F 16 450j 455j 487j 493j 498j +TESTFORBRK 00003AB9 F 16 516 +TNUM 00003E10 F 16 488j 494j +VFETCHITMH 000013F8 F 16 486 492 497 +VPREPOUT 000013F9 F 16 538 586 601 610 617 +WPP 00000400 F 16 458 633 END DSCAN command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 162 (P&PCMD2) F 16 Command: SSCAN 636 637 ********************************************************************************** 638 * * 639 * SAFCHECKER * 640 * * 641 * SSCAN will follow a SAF structure on a disk for * 642 * incorrect forward or backward links. SSCAN will scan the * 643 * file specified and if requested (see command format) will * 644 * print out all the blocks loaded and checked. This command * 645 * will always print out a message if a bad record link is * 646 * found. One may have each record location printed out as it * 647 * is checked regardless of the record's validity if one * 648 * specifies the RECORD option (see the command options). SSCAN * 649 * also has the ability to print out the text of a file if one * 650 * uses the L option, however, no other option may be specified. * 651 * As the command finishes the SAF end block and end record * 652 * pointers in the file's FDE are checked to make sure that they * 653 * match what SSCAN has found. In case of an error an * 654 * appropriate message is printed out. * 655 * * 656 * Command Format: * 657 * * 658 * SSCAN [,BLOCKS[=B]] [,RECORDS[=R]] [,L[=L]] * 659 * * 660 * When one specifies "BLOCKS" a message is printed for * 661 * each block that has been loaded. The B option allows one * 662 * to have the messages start at a particular block. If no B * 663 * is given then the default is the first file block. If one * 664 * specifies RECORDS, then as each record header is encountered * 665 * a message will be printed out stating that a record start * 666 * has been discovered. The R option allows one to have the * 667 * messages start at a particular block. If no R is given then * 668 * the default is the first file block. * 669 * If one specifies the L option then no other option can * 670 * be specified. The =L option allows one to have the text * 671 * start at a particular block. If no block number is given * 672 * then the listing starts at the beginning of the file. * 673 * * 674 ********************************************************************************** 675 676 BLOCK SSCAN command 677 ENTRY CSSCAN 678 00900000 ABS 679 EOD EQU 0900000 end of data value 00800000 ABS 680 FILEMARK EQU 0800000 filemark value 00001010 BYTE 681 BADFILETYP EQU BIT 8 should not be set if not EOF/EOD 682 00000006 ABS 683 ITMSPERLINE EQU 6 684 00004D74 685 CSSCAN LABEL 04D74 DC403912 686 CALLNP INITIALIZE do the set up 04D75 DC40399E 687 CALLNP NEXTPARM start processing the user's input 04D76 DC403907 688 CALLNP HEADERCK see what kind of output header to use 04D77 6000303B 0 689 LD R0 INBLOCK get the starting block number 04D78 FA023453 0 690 JEQZ R0 MC return if the file was not found 04D79 DC4039DB 691 CALLNP READIN go read in first block of file 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 163 (P&PCMD2) F 16 Command: SSCAN 692 * \ / 693 00004D7A 694 AGAIN LABEL 04D7A EC128000 2 REG 695 STZ R2 clear out R2 04D7B DC4038F8 696 CALLNP GETABYTE go get a byte for the header 04D7C E40A9080 0 2 CBM 697 ST R0 R2/CH1 put it in the appropiate place 04D7D 64820120 2 IMM 698 CPR R2 EOD 04D7E FE024DB2 699 JEQ DONE found the end of the file 700 * \ / 04D7F 60403090 1 701 LD R1 CHARDISP save the displacement 04D80 E4403095 1 702 ST R1 HDRDISP 04D81 6040303B 1 703 LD R1 INBLOCK save the block # 04D82 E4403094 1 704 ST R1 HDRBLOCK 04D83 DC4038F8 705 CALLNP GETABYTE go get a byte for the header 04D84 E40AA080 0 2 CBM 706 ST R0 R2/CH2 04D85 DC4038F8 707 CALLNP GETABYTE go get a byte for the header 04D86 E40AB080 0 2 CBM 708 ST R0 R2/CH3 04D87 64820100 2 IMM 709 CPR R2 FILEMARK 04D88 FE024DA1 710 JEQ PRTFILEMRK found a file mark, print message 04D89 F6904D9F 2 711 JBT R2/BADFILETYP ERROR bad record type 04D8A E480309B 2 712 ST R2 RECORDSIZE save the record length 713 * \ / 04D8B 6000309E 0 714 LD R0 STARTLIST does user want the file listed? 04D8C FA024D93 0 715 JEQZ R0 GETTRAILER no, therefore skip CALLNP LISTREC 04D8D FA2C4D91 0 716 JEQMW R0 LISTEM if STARTLIST is -1 then list the file out 04D8E 6400303B 0 717 CPR R0 INBLOCK is it time to start listing the file out? 04D8F FE0C4D93 718 JNE GETTRAILER no, therefore skip CALLNP LISTREC 04D90 D140309E 719 STMW STARTLIST yes, therefore set up to list out from now to the end. 720 * \ / 00004D91 721 LISTEM LABEL 04D91 DC40392C 722 CALLNP LISTREC list out the file 04D92 FE0E4D96 723 JMP GETIT miss the masking and shit 724 * --- 725 00004D93 726 GETTRAILER LABEL 04D93 DC403A49 727 CALLNP RECORDMES are we printing out record starts? 04D94 7880308C 2 728 AND R2 RLMASK mask off unwanted bits 04D95 98803090 2 729 ADDM R2 CHARDISP point to next record header 730 * \ / 00004D96 731 GETIT LABEL 04D96 EC128000 2 REG 732 STZ R2 clear out R2 04D97 DC4038F8 733 CALLNP GETABYTE go get a byte for the trailer 04D98 E40A9080 0 2 CBM 734 ST R0 R2/CH1 put it in the appropiate place 04D99 DC4038F8 735 CALLNP GETABYTE go get a byte for the trailer 04D9A E40AA080 0 2 CBM 736 ST R0 R2/CH2 04D9B DC4038F8 737 CALLNP GETABYTE go get a byte for the trailer 04D9C E40AB080 0 2 CBM 738 ST R0 R2/CH3 04D9D 6480309B 2 739 CPR R2 RECORDSIZE 04D9E FE024D7A 740 JEQ AGAIN get next record 741 * \ / 00004D9F 742 ERROR LABEL 04D9F DC403A5A 743 CALLNP RECERROR output the fact that a error has been found 04DA0 FE0E3453 744 JMP MC a error has occurred stop processing this file 745 * --- 746 747 * Output a file mark found message 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 164 (P&PCMD2) F 16 Command: SSCAN 748 00004DA1 749 PRTFILEMRK LABEL 04DA1 5C00309A 750 CMZ RECMSGON get the record message flag 04DA2 FE0C4DA9 751 JNE PRTFMKNOW if set print filemark message 04DA3 6000309E 0 752 LD R0 STARTLIST get the LIST option 04DA4 FA024D7A 0 753 JEQZ R0 AGAIN jump if LIST option not selected 04DA5 FA2C4DA9 0 754 JEQMW R0 PRTFMKNOW jump if LIST option always selected 04DA6 6400303B 0 755 CPR R0 INBLOCK should we start at this block 04DA7 FE0C4D7A 756 JNE AGAIN wait for the block to come 04DA8 D140309E 757 STMW STARTLIST and indicate to list from now on 758 * \ / 00004DA9 759 PRTFMKNOW LABEL 04DA9 DC0039CA 760 CALL NUMMESCHK see if the message will fit 04DAA 40440006 IMM 761 PARVL ITMSPERLINE 04DAB DC1013F9 @ 762 CALL @VPREPOUT print a file mark found message 04DAC 40004DAE 763 PARL FILEMRKMES 04DAD FE0E4D7A 764 JMP AGAIN continue processing file 765 * --- 766 04DAE 2A2A2046 767 FILEMRKMES TEXTZ "** FileMark * " 768 769 * Final checking of the SAF end pointers 770 00004DB2 771 DONE LABEL 04DB2 60003093 0 772 LD R0 ENDBLK get the SAF block end pointer 04DB3 FA024DC6 0 773 JEQZ R0 ENDPTRZR write out special error message 774 * \ / 04DB4 6400303B 0 775 CPR R0 INBLOCK do they match? 04DB5 FE0C4DD0 776 JNE BADENDPTR SAF block end pointer is bad 777 * \ / 04DB6 60003090 0 778 LD R0 CHARDISP get the byte offset pointer 04DB7 6040308F 1 779 LD R1 BLOCKCNT get the relative block number 04DB8 E44A0140 1 0 CBM 780 ST R1 R0/BITS 0:19 merge the two together 04DB9 64003092 0 781 CPR R0 ENDBYTE do they match? 04DBA FE0C4DD0 782 JNE BADENDPTR no, therefore bad byte offset pointer 783 * \ / 04DBB 6000308E 0 784 LD R0 BLKMSGON block listing flag 04DBC 7C00309A 0 785 IOR R0 RECMSGON record listing flag 04DBD FA024DBF 0 786 JEQZ R0 JUSTEXIT exit if neither specified 04DBE DC4038F3 787 CALLNP CRLINFEED tidy up a bit 788 * \ / 00004DBF 789 JUSTEXIT LABEL 04DBF DC1013F9 @ 790 CALL @VPREPOUT all is clear 04DC0 40004DC2 791 PARL DONEMES 04DC1 FE0E3453 792 JMP MC return to PEEK&POKE's main control 793 * --- 794 04DC2 2046696C 795 DONEMES TEXTZ " File is Clean" 796 797 * Output that the SAF's end of block pointer is not set 798 00004DC6 799 ENDPTRZR LABEL 04DC6 DC1013F9 @ 800 CALL @VPREPOUT 04DC7 40004DC9 801 PARL ZEROSAFPTR 04DC8 FE0E3453 802 JMP MC return to PEEK&POKE's main control 803 * --- 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 165 (P&PCMD2) F 16 Command: SSCAN 804 04DC9 20534146 805 ZEROSAFPTR TEXTZ " SAF end pointer is Zero." 806 807 * Output that we found a bad end of SAF pointer 808 00004DD0 809 BADENDPTR LABEL 04DD0 DC1013F9 @ 810 CALL @VPREPOUT 04DD1 40004DD3 811 PARL BADPTR 04DD2 FE0E3453 812 JMP MC return to PEEK&POKE's main control 813 * --- 814 04DD3 20534146 815 BADPTR TEXTZ " SAF end pointer is incorrect." 816 AGAIN 00004D7A F 16 694= 740j 753j 756j 764j BADENDPTR 00004DD0 F 16 776j 782j 809= BADFILETYP 00001010 F 16 681= 711j BADPTR 00004DD3 F 16 811a 815= +BLKMSGON 0000308E F 16 784 +BLOCKCNT 0000308F F 16 779 +CH1 00001080 F 16 697s 734s +CH2 00002080 F 16 706s 736s +CH3 00003080 F 16 708s 738s +CHARDISP 00003090 F 16 701 729s 778 +CRLINFEED 000038F3 F 16 787 +CSSCAN 00004D74 F 16 677 685= DONE 00004DB2 F 16 699j 771= DONEMES 00004DC2 F 16 791a 795= +ENDBLK 00003093 F 16 772 +ENDBYTE 00003092 F 16 781 ENDPTRZR 00004DC6 F 16 773j 799= EOD 00900000 F 16 679= 698 ERROR 00004D9F F 16 711j 742= FILEMARK 00800000 F 16 680= 709 FILEMRKMES 00004DAE F 16 763a 767= +GETABYTE 000038F8 F 16 696 705 707 733 735 737 GETIT 00004D96 F 16 723j 731= GETTRAILER 00004D93 F 16 715j 718j 726= +HDRBLOCK 00003094 F 16 704s +HDRDISP 00003095 F 16 702s +HEADERCK 00003907 F 16 688 +INBLOCK 0000303B F 16 689 703 717 755 775 +INITIALIZE 00003912 F 16 686 ITMSPERLINE 00000006 F 16 683= 761 JUSTEXIT 00004DBF F 16 786j 789= LISTEM 00004D91 F 16 716j 721= +LISTREC 0000392C F 16 722 +MC 00003453 F 16 690j 744j 792j 802j 812j +NEXTPARM 0000399E F 16 687 +NUMMESCHK 000039CA F 16 760 PRTFILEMRK 00004DA1 F 16 710j 749= PRTFMKNOW 00004DA9 F 16 751j 754j 759= +READIN 000039DB F 16 691 +RECERROR 00003A5A F 16 743 +RECMSGON 0000309A F 16 750 785 +RECORDMES 00003A49 F 16 727 +RECORDSIZE 0000309B F 16 712s 739 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 166 (P&PCMD2) F 16 Command: SSCAN +RLMASK 0000308C F 16 728 +STARTLIST 0000309E F 16 714 719s 752 757s +VPREPOUT 000013F9 F 16 762 790 800 810 ZEROSAFPTR 00004DC9 F 16 801a 805= 817 END SSCAN command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 167 (P&PCMD2) F 16 Command: OPENGAP 820 821 ********************************************************************************** 822 * * 823 * OPENGAP is the command to allocate a group of words in * 824 * DATABLK. Specified as a start address (offset into DATABLK) * 825 * and a group-size (in words), the group is provided by moving * 826 * the STARTADR and the words following it to the (high) end of * 827 * the block. The "new" words are then zeroed. * 828 * OPENGAPB is similar but is byte-based. * 829 * * 830 * The command format is: OPENGAP * 831 * * 832 ********************************************************************************** 833 834 BLOCK OPENGAP command 835 ENTRY COPENGAP 836 ENTRY COPENGAPB 837 0000305C 838 STARTADR EQU VARS(0) lowest word to move (also 839 * the first word in the new group) 0000305D 840 GAPSIZE EQU VARS(1) no. of words to provide 0000305E 841 MULTIPLIER EQU VARS(2) scale factor for start and gapsize 842 00004DDB 843 COPENGAP LABEL 04DDB 60040004 0 IMM 844 LD R0 CPW Word arguments will be changed to bytes 04DDC E400305E 0 845 ST R0 MULTIPLIER 04DDD FE0E4DDF 846 JMP GAPCOMMON 847 * --- 00004DDE 848 COPENGAPB LABEL 04DDE EDC0305E 849 STW MULTIPLIER 00004DDF 850 GAPCOMMON LABEL 04DDF 5C00303A 851 CMZ FILEFLAG can't be patching 04DE0 FE0C4E49 852 JNE NONEIN 'No block read in', and JMP MC 853 * \ / 04DE1 6000303B 0 854 LD R0 INBLOCK must have a block 04DE2 FA2C4E49 0 855 JEQMW R0 NONEIN 'No block read in', and JMP MC 856 * \ / 04DE3 DC5013F8 @ 857 CALLNP @VFETCHITMH get first loc to move 04DE4 F27E3451 1 858 JBF R1/TNUM BADFORM must be a number 04DE5 FA883451 2 859 JLTZ R2 BADFORM no negatives! 04DE6 1C80305E 2 860 MUL R2 MULTIPLIER change to byte offset 04DE7 E480305C 2 861 ST R2 STARTADR save first loc 862 * \ / 04DE8 DC5013F5 @ 863 CALLNP @VFETCHITEM get no. of words to provide 04DE9 F27E3451 1 864 JBF R1/TNUM BADFORM must be a number 04DEA FA883451 2 865 JLTZ R2 BADFORM no negatives! 04DEB 1C80305E 2 866 MUL R2 MULTIPLIER change to byte count 04DEC E480305D 2 867 ST R2 GAPSIZE save magnitude of gap 868 869 * Because character moving instructions cannot tolerate the 870 * source and destination buffers being too close, we avoid 871 * the problem by first moving the group of characters to CMPRBLK 872 * and then moving them back. 873 874 * Make sure the parameters are reasonable 04DED 60441000 1 IMM 875 LD R1 CPP R1 <- #bytes in DATABLK 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 168 (P&PCMD2) F 16 Command: OPENGAP 04DEE 1040305D 1 876 SUB R1 GAPSIZE minus GAPSIZE 04DEF 1040305C 1 877 SUB R1 STARTADR minus #bytes before gap 04DF0 FA484E04 1 878 JLTZ R1 NOMOVE error if gap passes block end 04DF1 E452C000 1 3 REG 879 ST R1 R3 880 881 * Move the chars to CMPRBLK 04DF2 60045400 0 IMM 882 LD R0 ADR DATABLK 04DF3 6080305C 2 883 LD R2 STARTADR 04DF4 381A1000 0 02 CACH 884 LEA R0 CACH R0,0(R2) 04DF5 60845C00 2 IMM 885 LD R2 ADR CMPRBLK 04DF6 DA880800 2 01 886 MOVE R2 R0 R1 887 888 * Now move them where we want them 04DF7 60045C00 0 IMM 889 LD R0 ADR CMPRBLK 04DF8 60845400 2 IMM 890 LD R2 ADR DATABLK 04DF9 6040305C 1 891 LD R1 STARTADR 04DFA 1840305D 1 892 ADD R1 GAPSIZE 04DFB 389A8800 2 21 CACH 893 LEA R2 CACH R2,0(R1) 04DFC DA881800 2 03 894 MOVE R2 R0 R3 895 896 * Now clear out the gap 04DFD 60045400 0 IMM 897 LD R0 ADR DATABLK 04DFE 6040305C 1 898 LD R1 STARTADR 04DFF 381A0800 0 01 CACH 899 LEA R0 CACH R0,0(R1) 04E00 6040305D 1 900 LD R1 GAPSIZE 04E01 DA000800 0 1 901 FILLI R0 R1 0 902 * \ / 04E02 EDC03075 903 STW MODFLAG say block is dirty 04E03 FE0E3453 904 JMP MC 905 * --- 906 907 * Gap would have overlapped... 00004E04 908 NOMOVE LABEL 04E04 DC1013F9 @ 909 CALL @VPREPOUT tell user... 04E05 4000310C 910 PARL OVERFLOWM ...what went wrong... 04E06 FE0E3453 911 JMP MC ...and do next command 912 * --- 913 +BADFORM 00003451 F 16 858j 859j 864j 865j +CMPRBLK UUUUUUUU F 16 885a 889a +COPENGAP 00004DDB F 16 835 843= +COPENGAPB 00004DDE F 16 836 848= +CPP 00001000 F 16 875 +CPW 00000004 F 16 844 +DATABLK UUUUUUUU F 16 882a 890a 897a +FILEFLAG 0000303A F 16 851 GAPCOMMON 00004DDF F 16 846j 850= GAPSIZE 0000305D F 16 840= 867s 876 892 900 +INBLOCK 0000303B F 16 854 +MC 00003453 F 16 904j 911j +MODFLAG 00003075 F 16 903s MULTIPLIER 0000305E F 16 841= 845s 849s 860 866 NOMOVE 00004E04 F 16 878j 908= +NONEIN UUUUUUUU F 16 852j 855j +OVERFLOWM 0000310C F 16 910a STARTADR 0000305C F 16 838= 861s 877 883 891 898 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 169 (P&PCMD2) F 16 Command: OPENGAP +TNUM 00003E10 F 16 858j 864j +VARS 0000305C F 16 838e 840e 841e +VFETCHITEM 000013F5 F 16 863 +VFETCHITMH 000013F8 F 16 857 +VPREPOUT 000013F9 F 16 909 914 END OPENGAP routine 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 170 (P&PCMD2) F 16 Command: CLOSEGAP 917 918 ********************************************************************************** 919 * * 920 * CLOSEGAP is the command to delete a group of words from * 921 * DATABLK. Specified as a start address and a group-size * 922 * (in words), the group is removed and its space is reclaimed * 923 * by concatenating the remainder (higher in DATABLK) to the * 924 * words preceeding, and then zeroing the now unused words at * 925 * end of the block. * 926 * CLOSEGAPB is the same, but is byte-based. * 927 * * 928 * The command format is: CLOSEGAP * 929 * * 930 ********************************************************************************** 931 932 BLOCK CLOSEGAP command 933 ENTRY CCLOSEGAP 934 ENTRY CCLOSEGAPB 935 0000305C 936 STARTADR EQU VARS(0) first word in deleted group 0000305D 937 GAPSIZE EQU VARS(1) no. of words to delete 0000305E 938 MULTIPLIER EQU VARS(2) 939 00004E07 940 CCLOSEGAPB LABEL 04E07 EDC0305E 941 STW MULTIPLIER 04E08 FE0E4E0B 942 JMP GAPCOMMON 943 * --- 00004E09 944 CCLOSEGAP LABEL 04E09 60040004 0 IMM 945 LD R0 CPW 04E0A E400305E 0 946 ST R0 MULTIPLIER 947 * \ / 00004E0B 948 GAPCOMMON LABEL 04E0B 5C00303A 949 CMZ FILEFLAG can't be patching 04E0C FE0C4E49 950 JNE NONEIN 'No block read in', and JMP MC 951 * \ / 04E0D 6000303B 0 952 LD R0 INBLOCK must have a block 04E0E FA2C4E49 0 953 JEQMW R0 NONEIN 'No block read in', and JMP MC 954 * \ / 04E0F DC5013F8 @ 955 CALLNP @VFETCHITMH get first loc to delete 04E10 F27E3451 1 956 JBF R1/TNUM BADFORM must be a number 04E11 FA883451 2 957 JLTZ R2 BADFORM no negatives! 04E12 1C80305E 2 958 MUL R2 MULTIPLIER change to byte offset, if needed 04E13 E480305C 2 959 ST R2 STARTADR save first loc 960 * \ / 04E14 DC5013F5 @ 961 CALLNP @VFETCHITEM get no. of words to delete 04E15 F27E3451 1 962 JBF R1/TNUM BADFORM must be a number 04E16 FA883451 2 963 JLTZ R2 BADFORM no negatives! 04E17 1C80305E 2 964 MUL R2 MULTIPLIER change to byte count, if needed 04E18 E480305D 2 965 ST R2 GAPSIZE save magnitude of gap 966 967 * Because character moving instructions cannot tolerate the 968 * source and destination buffers being too close, we avoid 969 * the problem by first moving the group of characters to CMPRBLK 970 * and then moving them back. 971 04E19 60441000 1 IMM 972 LD R1 CPP R1 <- #bytes in DATABLK 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 171 (P&PCMD2) F 16 Command: CLOSEGAP 04E1A 1040305D 1 973 SUB R1 GAPSIZE minus GAPSIZE 04E1B 1040305C 1 974 SUB R1 STARTADR minus #bytes before gap 04E1C FA484E2E 1 975 JLTZ R1 NOMOVE jump if count is negative 04E1C FA484E2E 1 976 (gap would overlap end of DATABLK) 04E1D E452C000 1 3 REG 977 ST R1 R3 978 979 * Move the chars to CMPRBLK 04E1E 60045400 0 IMM 980 LD R0 ADR DATABLK 04E1F 6080305C 2 981 LD R2 STARTADR 04E20 1880305D 2 982 ADD R2 GAPSIZE 04E21 381A1000 0 02 CACH 983 LEA R0 CACH R0,0(R2) 04E22 60845C00 2 IMM 984 LD R2 ADR CMPRBLK 04E23 DA880800 2 01 985 MOVE R2 R0 R1 986 987 * Now move them where we want them 04E24 60045C00 0 IMM 988 LD R0 ADR CMPRBLK 04E25 60845400 2 IMM 989 LD R2 ADR DATABLK 04E26 6040305C 1 990 LD R1 STARTADR 04E27 389A8800 2 21 CACH 991 LEA R2 CACH R2,0(R1) 04E28 DA881800 2 03 992 MOVE R2 R0 R3 993 994 * Now clear out the gap 04E29 60045800 0 IMM 995 LD R0 ADR DATABLK(WPP) 04E2A 7040305D 1 996 LDN R1 GAPSIZE 04E2B DA000800 0 1 997 FILLI R0 R1 0 998 04E2C EDC03075 999 STW MODFLAG say block is dirty 04E2D FE0E3453 1000 JMP MC 1001 * --- 00004E2E 1002 NOMOVE LABEL 04E2E DC1013F9 @ 1003 CALL @VPREPOUT tell the user... 04E2F 4000310C 1004 PARL OVERFLOWM ...what went wrong... 04E30 FE0E3453 1005 JMP MC ...and do next instruction 1006 * --- 1007 +BADFORM 00003451 F 16 956j 957j 962j 963j +CCLOSEGAP 00004E09 F 16 933 944= +CCLOSEGAPB 00004E07 F 16 934 940= +CMPRBLK UUUUUUUU F 16 984a 988a +CPP 00001000 F 16 972 +CPW 00000004 F 16 945 +DATABLK UUUUUUUU F 16 980a 989a 995a +FILEFLAG 0000303A F 16 949 GAPCOMMON 00004E0B F 16 942j 948= GAPSIZE 0000305D F 16 937= 965s 973 982 996 +INBLOCK 0000303B F 16 952 +MC 00003453 F 16 1000j 1005j +MODFLAG 00003075 F 16 999s MULTIPLIER 0000305E F 16 938= 941s 946s 958 964 NOMOVE 00004E2E F 16 975j 1002= +NONEIN UUUUUUUU F 16 950j 953j +OVERFLOWM 0000310C F 16 1004a STARTADR 0000305C F 16 936= 959s 974 981 990 +TNUM 00003E10 F 16 956j 962j +VARS 0000305C F 16 936e 937e 938e +VFETCHITEM 000013F5 F 16 961 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 172 (P&PCMD2) F 16 Command: CLOSEGAP +VFETCHITMH 000013F8 F 16 955 +VPREPOUT 000013F9 F 16 1003 +WPP 00000400 F 16 995a 1008 END CLOSEGAP command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 173 (P&PCMD2) F 16 Command: RETURN and WRITE 1011 1012 ********************************************************************************** 1013 * * 1014 * RETURN is the command that causes the resident disk * 1015 * block to be returned to its disk location. The block is * 1016 * written out even if it is not modified. This is for * 1017 * rewriting of marginally written disk blocks. * 1018 * * 1019 * The command form is: RETURN * 1020 * * 1021 ********************************************************************************** 1022 1023 BLOCK RETURN/WRITE command 1024 ENTRY CRETURN 1025 ENTRY CWRITE 1026 ENTRY NONEIN 1027 0000305C 1028 BLOCKNUM EQU VARS(0) what it sez (don't call subs) 1029 00004E31 1030 CRETURN LABEL 04E31 6000303B 0 1031 LD R0 INBLOCK current block resident 04E32 FA084E49 0 1032 JLTZ R0 NONEIN jump if no block to return 04E33 E400305C 0 1033 ST R0 BLOCKNUM save block number 04E34 61003031 4 1034 LD R4 DISKCBP R4 -> disk control block 04E35 FE0E4E3F 1035 JMP SHAREWRITE jump to write to original location 1036 * --- 1037 1038 ********************************************************************************** 1039 * * 1040 * WRITE is a command that will write the in-core block * 1041 * into the specied disk block. The write will be done even * 1042 * if the block has not been modified. * 1043 * * 1044 * The command format is: WRITE * 1045 * * 1046 ********************************************************************************** 1047 00004E36 1048 CWRITE LABEL 04E36 6000303B 0 1049 LD R0 INBLOCK get current block resident 04E37 FA2C4E49 0 1050 JEQMW R0 NONEIN jump if nothing to write 04E38 DC5013F8 @ 1051 CALLNP @VFETCHITMH get block number to write 04E39 F27E3451 1 1052 JBF R1/TNUM BADFORM jump if not a number 04E3A E480305C 2 1053 ST R2 BLOCKNUM save block number 04E3B 61003031 4 1054 LD R4 DISKCBP R4 -> the disk control block 04E3C DC003570 1055 CALL SUBCHECK see if special processing needed 04E3D 4040305C 1056 PARVL BLOCKNUM block number 04E3E E4090016 0 4 ZBM 1057 ST R0 R4,DCBNOSUBS 0 => allow subs, 1 => ignore subs 1058 * \ / 1059 00004E3F 1060 SHAREWRITE LABEL write the block 04E3F DC1013E1 @ 1061 CALL @VWRITE 04E40 4140305C 1062 PARV BLOCKNUM block number 04E41 41403017 1063 PARV PFDATABLK page file for buffer 04E42 410030D2 1064 PAR FBIBUFF FBI buffer 04E43 40004E46 1065 PARL WRITEERROR where to go if error 1066 * \ / 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 174 (P&PCMD2) F 16 Command: RETURN and WRITE 1067 00004E44 1068 WRITEXIT LABEL 04E44 EC003075 1069 STZ MODFLAG say block is no longer dirty 04E45 FE0E3453 1070 JMP MC process next command 1071 * --- 1072 00004E46 1073 WRITEERROR LABEL an I/O error occurred 04E46 6040305C 1 1074 LD R1 BLOCKNUM load the block number 04E47 DC40350E 1075 CALLNP DISKERROUT tell him why it failed 04E48 FE0E4E44 1076 JMP WRITEXIT and go do next command 1077 * --- 1078 1079 * No block is in core so writing it makes no sense. 00004E49 1080 NONEIN LABEL 04E49 DC1013F9 @ 1081 CALL @VPREPOUT 04E4A 40004E4C 1082 PARL NONEINM 04E4B FE0E3453 1083 JMP MC 1084 * --- 1085 04E4C 204E6F20 1086 NONEINM TEXTZ " No block read in. Action not taken." 1087 +BADFORM 00003451 F 16 1052j BLOCKNUM 0000305C F 16 1028= 1033s 1053s 1056 1062 1074 +CRETURN 00004E31 F 16 1024 1030= +CWRITE 00004E36 F 16 1025 1048= +DCBNOSUBS 00080016 F 16 1057s +DISKCBP 00003031 F 16 1034 1054 +DISKERROUT 0000350E F 16 1075 +FBIBUFF 000030D2 F 16 1064a +INBLOCK 0000303B F 16 1031 1049 +MC 00003453 F 16 1070j 1083j +MODFLAG 00003075 F 16 1069s +NONEIN 00004E49 F 16 1026 1032j 1050j 1080= NONEINM 00004E4C F 16 1082a 1086= +PFDATABLK 00003017 F 16 1063 SHAREWRITE 00004E3F F 16 1035j 1060= +SUBCHECK 00003570 F 16 1055 +TNUM 00003E10 F 16 1052j +VARS 0000305C F 16 1028e +VFETCHITMH 000013F8 F 16 1051 +VPREPOUT 000013F9 F 16 1081 +VWRITE 000013E1 F 16 1061 WRITEERROR 00004E46 F 16 1065a 1073= WRITEXIT 00004E44 F 16 1068= 1076j 1088 END RETURN/WRITE command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 175 (P&PCMD2) F 16 Command: DISK 1091 1092 ********************************************************************************** 1093 * * 1094 * DISK is the command that one uses to specify other * 1095 * disk to use. Normally, we assume that disk blocks are on * 1096 * the booted disk (the one used by OPL). Here the operator * 1097 * may specify the disk to use by giving the name of the * 1098 * drive. * 1099 * * 1100 * Command format: DISK DSKscu[,,] * 1101 * (s=slot, c=channel, u=unit) * 1102 * or DISK * 1103 * * 1104 * The second form will just type out the configuration for * 1105 * the current disk. The given values for the dimensions of * 1106 * the disk will be used only if the pack label cannot be * 1107 * read. If they are needed but are not given, we ask the * 1108 * operator. * 1109 * * 1110 ********************************************************************************** 1111 1112 BLOCK DISK command 1113 ENTRY CDISK 1114 ENTRY CDISKNAME entry from the VOLUME command 1115 0000305C 1116 SAVER4 EQU VARS(0) save pointer to params here 0000305D 1117 DISKNAME EQU VARS(1) pak6 name of new disk 0000305E 1118 OPENERROR EQU VARS(2) return code from OPENDISK 1119 1120 * table of OPENDISK errors that are structural (i.e. drive IS usable) 04E56 00484E57 1121 OPNERRCP PTR OPNERREH/BIT 0 04E57 0F000000 1122 OPNERREH VFD (1*BIT ODBADPL)+(1*BIT ODBADVL)+(1*BIT ODBADSB)+(1*BIT ODSUBBIG) 1123 00004E58 1124 CDISK LABEL 04E58 DC5013F5 @ 1125 CALLNP @VFETCHITEM get the parameter item 04E59 F6784E9C 1 1126 JBT R1/TEOL JUSTPRINT if no params, just print config 04E5A F27C3451 1 1127 JBF R1/TALPH BADFORM only other accepted is a symbol 04E5B FACC3451 3 1128 JNEZ R3 BADFORM jump if name is impossibly long 00004E5C 1129 CDISKNAME LABEL 04E5C E480305D 2 1130 ST R2 DISKNAME save the name 04E5D E500305C 4 1131 ST R4 SAVER4 save pointer to remaining parms 04E5E DC4034DE 1132 CALLNP MODCHECK see if we should write current block 04E5F DC40356A 1133 CALLNP CHECKFILE terminate file mode if necessary 04E60 6000303B 0 1134 LD R0 INBLOCK 04E61 FA2C4E64 0 1135 JEQMW R0 NOBLOCK jump if no block is in core 04E62 6007FFFE 0 IMM 1136 LD R0 -2 else say that block is from other disk 04E63 E400303B 0 1137 ST R0 INBLOCK 1138 * \ / 1139 00004E64 1140 NOBLOCK LABEL 04E64 61003031 4 1141 LD R4 DISKCBP R4 -> current disk control block 04E65 65043032 4 IMM 1142 CPR R4 ADR DISKCBB is it ours? 04E66 FE0C4E68 1143 JNE NOCLOSE if not, don't close it 04E67 DC5013EC @ 1144 CALLNP @VCLOSEDISK else close the disk 1145 * \ / 1146 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 176 (P&PCMD2) F 16 Command: DISK 00004E68 1147 NOCLOSE LABEL 04E68 61043032 4 IMM 1148 LD R4 ADR DISKCBB address of our own DCB 04E69 6000305D 0 1149 LD R0 DISKNAME drive name 04E6A 60440000 1 IMM 1150 LD R1 0 use sys subs area (OPL) 04E6B DC5013EB @ 1151 CALLNP @VOPENDISK open the new disk 04E6C E5003031 4 1152 ST R4 DISKCBP it is now in use 04E6D FA024E9C 0 1153 JEQZ R0 JUSTPRINT jump if open was successful 04E6E E400305E 0 1154 ST R0 OPENERROR else save the error code 1155 * \ / 04E6F DC0035BB 1156 CALL FINDTEXTZ find appropriate message 04E70 41520000 0 REG 1157 PARV R0 04E71 40004EB2 1158 PARL OPENMSGTAB 04E72 60520000 1 0 REG 1159 LD R1 R0 R1 -> error message 04E73 DC1013F9 @ 1160 CALL @VPREPOUT tell user about error 04E74 4100305D 1161 PAR DISKNAME 04E75 40164400 1 @R 1162 PARL @R1 04E76 6000305E 0 1163 LD R0 OPENERROR get error code 04E77 64040004 0 IMM 1164 CPR R0 ODBADPL is it a bad pack label? 04E78 FE024E87 1165 JEQ GETSIZES if pack label problem, get disk size 04E79 5C304E56 0 @ 1166 CMZ @OPNERRCP(R0) is drive usable at all? 04E7A FE0C4E9C 1167 JNE JUSTPRINT if yes, process volume anyway 1168 * \ / 1169 1170 * The disk is not usable. Warn user about limbo situation. 04E7B DC1013F9 @ 1171 CALL @VPREPOUT output writer 04E7C 40004E80 1172 PARL DISKLIMBO message address 04E7D 601013E4 0 @ 1173 LD R0 @VDISKCB R0 -> boot disk control block 04E7E E4003031 0 1174 ST R0 DISKCBP save as current disk 04E7F FE0E4E9C 1175 JMP JUSTPRINT and give dimensions 1176 * --- 1177 04E80 20576172 1178 DISKLIMBO TEXTZ " Warning: Using system disk" 1179 00004E87 1180 GETSIZES LABEL 04E87 60003031 0 1181 LD R0 DISKCBP disk DCB address 04E88 5C080816 0 ZBM 1182 CMZ R0,DCBSCSI is this a SCSI disk drive? 04E89 FE0C4E9C 1183 JNE JUSTPRINT don't set sizes if so 1184 * \ / 04E8A 6100305C 4 1185 LD R4 SAVER4 R4 -> remaining parms 04E8B DC5013F5 @ 1186 CALLNP @VFETCHITEM get sectors per track 04E8C F27E4E92 1 1187 JBF R1/TNUM ASKSPT jump if didn't get it 04E8D E4803034 2 1188 ST R2 DISKCBB/DCBSECPTRK save it 04E8E DC5013F5 @ 1189 CALLNP @VFETCHITEM get tracks per cylinder 04E8F F27E4E92 1 1190 JBF R1/TNUM ASKSPT jump if didn't get it 04E90 E4803035 2 1191 ST R2 DISKCBB/DCBTRKPCYL save it 04E91 FE0E4E9C 1192 JMP JUSTPRINT and go tell about configuration 1193 * --- 1194 00004E92 1195 ASKSPT LABEL ask operator for disk dimensions 04E92 DC1013F9 @ 1196 CALL @VPREPOUT ask for sectors per track 04E93 40004F25 1197 PARL ASKSPTM 04E94 DC403AB0 1198 CALLNP GETNUMBER get response 04E95 F27E4E92 1 1199 JBF R1/TNUM ASKSPT jump if garbage 04E96 E4803034 2 1200 ST R2 DISKCBB/DCBSECPTRK 1201 * \ / 00004E97 1202 ASKTPC LABEL 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 177 (P&PCMD2) F 16 Command: DISK 04E97 DC1013F9 @ 1203 CALL @VPREPOUT ask for tracks per cylinder 04E98 40004F2C 1204 PARL ASKTPCM 04E99 DC403AB0 1205 CALLNP GETNUMBER get response 04E9A F27E4E97 1 1206 JBF R1/TNUM ASKTPC jump if garbage 04E9B E4803035 2 1207 ST R2 DISKCBB/DCBTRKPCYL 1208 * \ / 1209 00004E9C 1210 JUSTPRINT LABEL 04E9C 61003031 4 1211 LD R4 DISKCBP R4 => current disk control block 04E9D DC1013F9 @ 1212 CALL @VPREPOUT output the configuration 04E9E 41090840 4 ZBM 1213 PAR R4,DCBPFILE/PFSLOT 04E9F 41093020 4 ZBM 1214 PAR R4,DCBPFILE/PPUCHAN 04EA0 41170801 4 BASE 1215 PAR R4,DCBUNIT 04EA1 41170802 4 BASE 1216 PAR R4,DCBSECPTRK 04EA2 41170803 4 BASE 1217 PAR R4,DCBTRKPCYL 04EA3 40004EA5 1218 PARL DISKCONF 04EA4 FE0E3453 1219 JMP MC done with success 1220 * --- 1221 04EA5 20446973 1222 DISKCONF TEXTZ " Disk DSK\H1,1\\H2,1\\H3,1\, spt=\D4\, tpc=\D5\." 1223 00004EB2 1224 OPENMSGTAB LABEL errors from OPENDISK 04EB2 20457272 1225 TEXTZ " Error code zero, disk \R1\." 04EBA 20496E76 1226 TEXTZ " Invalid disk name, \R1\." 04EC1 205C5231 1227 TEXTZ " \R1\ is not a disk." 04EC7 20446973 1228 TEXTZ " Disk \R1\ is not online." 04ECE 20457272 1229 TEXTZ " Error reading pack label on \R1\." 04ED7 20457272 1230 TEXTZ " Error reading volume label on \R1\." 04EE1 20457272 1231 TEXTZ " Error reading substitution block on \R1\." 04EEC 204E6F74 1232 TEXTZ " Not enough memory for substitution list from \R1\." 04EF9 20496E74 1233 TEXTZ " Internal error attempting to mount \R1\." 04F04 20536F6D 1234 TEXTZ " Someone else already has \R1\ maintenance mounted." 04F11 205C5231 1235 TEXTZ " \R1\ is writeprotected." 04F18 20496E73 1236 TEXTZ " Insufficient system resources to mount \R1\." 04F24 00000000 1237 VFD 0 1238 04F25 2A202020 1239 ASKSPTM TEXTZ "* Sectors per track? " 04F2C 2A202020 1240 ASKTPCM TEXTZ "* Tracks per cylinder? " 1241 ASKSPT 00004E92 F 16 1187j 1190j 1195= 1199j ASKSPTM 00004F25 F 16 1197a 1239= ASKTPC 00004E97 F 16 1202= 1206j ASKTPCM 00004F2C F 16 1204a 1240= +BADFORM 00003451 F 16 1127j 1128j +CDISK 00004E58 F 16 1113 1124= +CDISKNAME 00004E5C F 16 1114 1129= +CHECKFILE 0000356A F 16 1133 +DCBPFILE 00160800 F 16 1213a 1214a +DCBSCSI 00080816 F 16 1182 +DCBSECPTRK 00160802 F 16 1188s 1200s 1216a +DCBTRKPCYL 00160803 F 16 1191s 1207s 1217a +DCBUNIT 00160801 F 16 1215a +DISKCBB 00003032 F 16 1142a 1148a 1188s 1191s 1200s 1207s +DISKCBP 00003031 F 16 1141 1152s 1174s 1181 1211 DISKCONF 00004EA5 F 16 1218a 1222= DISKLIMBO 00004E80 F 16 1172a 1178= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 178 (P&PCMD2) F 16 Command: DISK DISKNAME 0000305D F 16 1117= 1130s 1149 1161a +FINDTEXTZ 000035BB F 16 1156 +GETNUMBER 00003AB0 F 16 1198 1205 GETSIZES 00004E87 F 16 1165j 1180= +INBLOCK 0000303B F 16 1134 1137s JUSTPRINT 00004E9C F 16 1126j 1153j 1167j 1175j 1183j 1192j 1210= +MC 00003453 F 16 1219j +MODCHECK 000034DE F 16 1132 NOBLOCK 00004E64 F 16 1135j 1140= NOCLOSE 00004E68 F 16 1143j 1147= +ODBADPL 00000004 F 16 1122x 1164 +ODBADSB 00000006 F 16 1122x +ODBADVL 00000005 F 16 1122x +ODSUBBIG 00000007 F 16 1122x OPENERROR 0000305E F 16 1118= 1154s 1163 OPENMSGTAB 00004EB2 F 16 1158a 1224= OPNERRCP 00004E56 F 16 1121= 1166 OPNERREH 00004E57 F 16 1121a 1122= +PFSLOT 00000840 F 16 1213a +PPUCHAN 00003020 F 16 1214a SAVER4 0000305C F 16 1116= 1131s 1185 +TALPH 00003C10 F 16 1127j +TEOL 00003810 F 16 1126j +TNUM 00003E10 F 16 1187j 1190j 1199j 1206j +VARS 0000305C F 16 1116e 1117e 1118e +VCLOSEDISK 000013EC F 16 1144 +VDISKCB 000013E4 F 16 1173 +VFETCHITEM 000013F5 F 16 1125 1186 1189 +VOPENDISK 000013EB F 16 1151 +VPREPOUT 000013F9 F 16 1160 1171 1196 1203 1212 1242 END DISK command 1243 BLOCK 1244 ENTRY CVOLUME 1245 1246 BEGFRAME 00178801 6 BASE 1247 NAMESTART BSS 1 pointer to beginning of param 00178802 6 BASE 1248 VOLNAME BSS 2 this is the name we're looking for 1249 ENDFRAME 1250 00004F33 1251 CVOLUME LABEL 04F33 5C003016 1252 CMZ ONLINE 04F34 FE0C4F44 1253 JNE ONL 04F35 DC1013F9 @ 1254 CALL @VPREPOUT 04F36 40004F38 1255 PARL NOTAVAILMSG 04F37 FE0E3453 1256 JMP MC 1257 * --- 04F38 20546865 1258 NOTAVAILMSG TEXTZ " The VOLUME command is not available offline." 1259 00004F44 1260 ONL LABEL 04F44 E5178801 4 6 BASE 1261 ST R4 SP,NAMESTART 04F45 DC5013F5 @ 1262 CALLNP @VFETCHITEM get the volume name 04F46 F27C3451 1 1263 JBF R1/TALPH BADFORM yell if bad name given 04F47 F6783451 1 1264 JBT R1/TEOL BADFORM really yell if no name given 04F48 E6978802 236 BASE 1265 ST2 R2 SP,VOLNAME save the requested volume name 04F49 60170000 0 4 CACH 1266 LD R0 CACH R4,0 get terminating character 04F4A 6404003B 0 IMM 1267 CPR R0 ";" was an account name specified? 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 179 (P&PCMD2) F 16 Command: DISK 04F4B FE024F4E 1268 JEQ FINDACCT yes, get volume from that 04F4C 6404002E 0 IMM 1269 CPR R0 "." this could be an account, too 04F4D FE0C4F6A 1270 JNE GETVOL 00004F4E 1271 FINDACCT LABEL 04F4E 60178801 0 6 BASE 1272 LD R0 SP,NAMESTART get back string pointer 04F4F 604403E8 1 IMM 1273 LD R1 1000 max length to look 04F50 DA1E0820 0 1 1274 SRCHNI R0 R1 " " skip leading spaces 04F51 E4178801 0 6 BASE 1275 ST R0 SP,NAMESTART save the real starting point 04F52 E452C000 1 3 REG 1276 ST R1 R3 04F53 38804F91 2 1277 LEA R2 FILENAMECHR point to non-filename characters 04F54 DA168800 0 21 1278 SCANN R0 R2 R1 find the end of the name 04F55 3052C000 1 3 REG 1279 RSB R1 R3 get length of name 04F56 60D24000 3 1 REG 1280 LD R3 R1 save the length 04F57 60178801 0 6 BASE 1281 LD R0 SP,NAMESTART get back string pointer 04F58 38805C00 2 1282 LEA R2 CMPRBLK 04F59 DA880800 2 01 1283 MOVE R2 R0 R1 move name to scratch area 04F5A 38004F99 0 1284 LEA R0 TXDIR ":.DIR" 04F5B 60440005 1 IMM 1285 LD R1 5 04F5C DA880800 2 01 1286 MOVE R2 R0 R1 append dot dir 04F5D 6056D005 1 3 REG 1287 LD R1 R3+5 get the filename length back 04F5E 60040267 0 IMM 1288 LD R0 FRNOPENNA code for open with no data access 04F5F 38805C00 2 1289 LEA R2 CMPRBLK now the name is here 04F60 0884000A IMM 1290 FREQ 10 try to open the file 04F61 FA084F88 0 1291 JLTZ R0 NOFILE 04F62 600400E0 0 IMM 1292 LD R0 FRCATALOG get file info request 04F63 60440020 1 IMM 1293 LD R1 DIRHWIDE*CPW room enough for account header 04F64 38805C00 2 1294 LEA R2 CMPRBLK 04F65 0884000A IMM 1295 FREQ 10 get directory information 04F66 60040060 0 IMM 1296 LD R0 FRCLOSE close the file 04F67 0884000A IMM 1297 FREQ 10 04F68 62168802 012 BASE 1298 LD2 R0 R2,DIRVOLUME get the volume name 04F69 E6178802 016 BASE 1299 ST2 R0 SP,VOLNAME and save for the search 00004F6A 1300 GETVOL LABEL 04F6A 60040043 0 IMM 1301 LD R0 ORVINFO all volume info request 04F6B 60441000 1 IMM 1302 LD R1 CPP 04F6C 38805C00 2 1303 LEA R2 CMPRBLK 04F6D 09440000 IMM 1304 OPREQ 0 04F6E FA083451 0 1305 JLTZ R0 BADFORM jump if we don't have privilege 04F6F 30441000 1 IMM 1306 RSB R1 CPP 04F70 385A8800 1 21 CACH 1307 LEA R1 CACH R2,0(R1) point past the volume info 04F71 38005C00 0 1308 LEA R0 CMPRBLK point to the beginning 04F72 38160000 0 0 CACH 1309 LEA R0 CACH R0,0 00004F73 1310 VOLLOOP LABEL 04F73 64124000 0 1 REG 1311 CPR R0 R1 have we looked at 'em all 04F74 FE064F7C 1312 JGE NOTFOUND yep, it wasn't there 04F75 62960802 230 BASE 1313 LD2 R2 R0,VIVNAME get this volume's name 04F76 66978802 236 BASE 1314 CPR2 R2 SP,VOLNAME 04F77 FE024F7A 1315 JEQ EUREKA We found it! 04F78 18081F10 0 0 ZBM 1316 ADD R0 R0,VIENTLEN advance to the next entry 04F79 FE0E4F73 1317 JMP VOLLOOP 1318 * --- 00004F7A 1319 EUREKA LABEL 04F7A 60960801 2 0 BASE 1320 LD R2 R0,VIDNAME pick up the drive name 04F7B FE0E4E5C 1321 JMP CDISKNAME and pretend a DISK command 1322 * --- 00004F7C 1323 NOTFOUND LABEL 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 180 (P&PCMD2) F 16 Command: DISK 04F7C DC1013F9 @ 1324 CALL @VPREPOUT tell him there ain't no such volume 04F7D 40004F7F 1325 PARL NOTFOUNDMSG 04F7E FE0E3453 1326 JMP MC and go back for more 1327 * --- 04F7F 204E6F20 1328 NOTFOUNDMSG TEXTZ " No loaded volume with that name" 1329 00004F88 1330 NOFILE LABEL 04F88 DC1013F9 @ 1331 CALL @VPREPOUT 04F89 40004F8B 1332 PARL NOFILEMSG 04F8A FE0E3453 1333 JMP MC 1334 * --- 04F8B 20556E61 1335 NOFILEMSG TEXTZ " Unable to open file" 1336 04F94 7FFFFFE0 1337 FILENAMECHR VFD 000000000,00A12FFC0,07FFFFFE1,07FFFFFE0 04F98 7FFFFFE0 1338 VFD 000000000,00A12FFC0,07FFFFFE1,07FFFFFE0 04F99 3A2E4449 1339 TXDIR TEXTZ ":.DIR" +BADFORM 00003451 F 16 1263j 1264j 1305j +CDISKNAME 00004E5C F 16 1321j +CMPRBLK UUUUUUUU F 16 1282a 1289a 1294a 1303a 1308a +CPP 00001000 F 16 1302 1306 +CPW 00000004 F 16 1293 +CVOLUME 00004F33 F 16 1244 1251= +DIRHWIDE 00000008 F 16 1293 +DIRVOLUME 00160802 F 16 1298 EUREKA 00004F7A F 16 1315j 1319= FILENAMECHR 00004F91 F 16 1277a 1337= FINDACCT 00004F4E F 16 1268j 1271= +FRCATALOG 000000E0 F 16 1292 +FRCLOSE 00000060 F 16 1296 +FRNOPENNA 00000267 F 16 1288 GETVOL 00004F6A F 16 1270j 1300= +MC 00003453 F 16 1256j 1326j 1333j NAMESTART 00178801 F 16 1247= 1261s 1272 1275s 1281 NOFILE 00004F88 F 16 1291j 1330= NOFILEMSG 00004F8B F 16 1332a 1335= NOTAVAILMSG 00004F38 F 16 1255a 1258= NOTFOUND 00004F7C F 16 1312j 1323= NOTFOUNDMSG 00004F7F F 16 1325a 1328= ONL 00004F44 F 16 1253j 1260= +ONLINE 00003016 F 16 1252 +ORVINFO 00000043 F 16 1301 +TALPH 00003C10 F 16 1263j +TEOL 00003810 F 16 1264j TXDIR 00004F99 F 16 1284a 1339= +VFETCHITEM 000013F5 F 16 1262 +VIDNAME 00160801 F 16 1320 +VIENTLEN 00081F10 F 16 1316 +VIVNAME 00160802 F 16 1313 VOLLOOP 00004F73 F 16 1310= 1317j VOLNAME 00178802 F 16 1248= 1265s 1299s 1314 +VPREPOUT 000013F9 F 16 1254 1324 1331 1340 END VOLUME command 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 181 (P&PCMD2) F 16 Command: DISK 1342 1343 ********************************************************************************** 1344 * * 1345 * This routine will look through the ADT tables on the * 1346 * current disk to find a specified block or range of blocks. * 1347 * * 1348 ********************************************************************************** 1349 1350 BLOCK 1351 ENTRY CASCAN 1352 1353 BEGFRAME 00178801 6 BASE 1354 BLOCKFOUND BSS 1 The address found in the ADT 00178802 6 BASE 1355 TEMP BSS 1 1356 ENDFRAME 1357 0000000B ABS 1358 MSGSPERLINE EQU 11 1359 00004F9B 1360 CASCAN LABEL 04F9B E5178802 4 6 BASE 1361 ST R4 SP,TEMP Save input buffer pointer 04F9C DC4034DE 1362 CALLNP MODCHECK 04F9D DC0051B9 1363 CALL READSECBLK Read a security block into CMPRBLK 04F9E 41403019 1364 PARV PFCMPRBLK PF value for sec blk buffer 04F9F 40005C00 1365 PARL CMPRBLK Pointer to the same buffer 04FA0 FE0E502C 1366 JMP BADSEC 04FA1 EC003099 1367 STZ NUMMES Zero terminal column counter 04FA2 61178802 4 6 BASE 1368 LD R4 SP,TEMP Restore input buffer pointer 04FA3 DC003761 1369 CALL GETRANGE Get the range of block numbers 04FA4 41003074 1370 PAR FIRSTBLOCK 04FA5 410030C4 1371 PAR LASTBLOCK 04FA6 60040000 0 IMM 1372 LD R0 0 FIRSTBLOCK must be >= 0 04FA7 60403031 1 1373 LD R1 DISKCBP LASTBLOCK must be ... 04FA8 60564805 1 1 BASE 1374 LD R1 R1,DCBVOLSIZE ... within the ... 04FA9 D0524000 1 REG 1375 DEC R1 ... size of the disk 04FAA 42540000 01 PAIR 1376 PARV2L PAIR R0 04FAB FE0E3453 1377 JMP MC Leave if bad range entered 04FAC F2784FC1 1 1378 JBF R1/TEOL NOCONT Go get block numbers 04FAD 5C0030A1 1379 CMZ ADTBLOCK Is there a saved starting point? 04FAE FE0C4FD3 1380 JNE NEXTBLOCK Yes, we'll allow continuation 04FAF DC1013F9 @ 1381 CALL @VPREPOUT Give an error 04FB0 40004FB2 1382 PARL CANTCONTMSG 04FB1 FE0E3453 1383 JMP MC Return to main control 1384 * --- 04FB2 20546865 1385 CANTCONTMSG TEXTZ " There is no ADT search to continue (specify target block)." 1386 00004FC1 1387 NOCONT LABEL 04FC1 EC0030A2 1388 STZ ADTCHAIN Initialize chain and block ... 04FC2 60005C08 0 1389 LD R0 CMPRBLK/SECADTTOP ... numbers to start at first chain 04FC3 E40030A1 0 1390 ST R0 ADTBLOCK 04FC4 EC0030A3 1391 STZ ADTPRIOR 04FC5 D14030A5 1392 STMW ADTOFFSET Search from beginning of block 04FC6 F2764FC9 1 1393 JBF R1/DEFBIT GETPARM Jump if LASTBLOCK specified 04FC7 60003074 0 1394 LD R0 FIRSTBLOCK Default LASTBLOCK ... 04FC8 E40030C4 0 1395 ST R0 LASTBLOCK ... to FIRSTBLOCK 1396 * \ / 00004FC9 1397 GETPARM LABEL 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 182 (P&PCMD2) F 16 Command: DISK 04FC9 EC0030A4 1398 STZ ASCANLIST Default to no listing 04FCA DC5013F8 @ 1399 CALLNP @VFETCHITMH Get a parameter 04FCB F6784FD3 1 1400 JBT R1/TEOL NEXTBLOCK 04FCC F67E4FD0 1 1401 JBT R1/TNUM FUNNYB jump if a number, "B" will pack that way 04FCD 6480506F 2 1402 CPR R2 BLOCKOPT1 Did the user specify BLOCKS? 04FCE FE024FD2 1403 JEQ LISTBLOCKS Yes 04FCF FE0E3451 1404 JMP BADFORM unknown parameter 1405 * --- 00004FD0 1406 FUNNYB LABEL 04FD0 6484000B 2 IMM 1407 CPR R2 0B How about just a "B" 04FD1 FE0C3451 1408 JNE BADFORM It's got to be one or the other 00004FD2 1409 LISTBLOCKS LABEL 04FD2 EDC030A4 1410 STW ASCANLIST 1411 * \ / 1412 * Read the next block of the chain (address in ADTBLOCK). Check 1413 * that the backward link equals PRIORBLOCK. 1414 * \ / 00004FD3 1415 NEXTBLOCK LABEL 04FD3 61003031 4 1416 LD R4 DISKCBP Get Disk Control Block Ptr 04FD4 DC1013E0 @ 1417 CALL @VREAD Read the block 04FD5 414030A1 1418 PARV ADTBLOCK Which block to read 04FD6 41403017 1419 PARV PFDATABLK Buffer for the ADT data 04FD7 410030D2 1420 PAR FBIBUFF Buffer for FBI 04FD8 41440007 IMM 1421 PARV FBITADT Ensure ADT block 04FD9 40005039 1422 PARL BADADT Error return 04FDA 60C030A1 3 1423 LD R3 ADTBLOCK 04FDB E4C0303B 3 1424 ST R3 INBLOCK Record usage of DATABLK 04FDC 384030D2 1 1425 LEA R1 FBIBUFF Load the ... 04FDD 60485182 1 1 ZBM 1426 LD R1 R1,FBIBLINK ... backward link 04FDE 644030A3 1 1427 CPR R1 ADTPRIOR Does this block point to prior one? 04FDF FE0C5049 1428 JNE LINKERROR No, give error, go to next chain 1429 04FE0 5C0030A4 1430 CMZ ASCANLIST Are we listing block numbers? 04FE1 FE024FE7 1431 JEQ SEARCHBLOCK No, go on to the real work 04FE2 DC0039CA 1432 CALL NUMMESCHK Ensure room on the line 04FE3 4044000B IMM 1433 PARVL MSGSPERLINE 04FE4 DC1013F9 @ 1434 CALL @VPREPOUT Print message 04FE5 4100303B 1435 PAR INBLOCK The block we just read 04FE6 4000506C 1436 PARL BLOCKMSG Message template 1437 * \ / 00004FE7 1438 SEARCHBLOCK LABEL 04FE7 600030A5 0 1439 LD R0 ADTOFFSET Load block index to start with 00004FE8 1440 NEXTELEMENT LABEL 04FE8 D0120000 0 REG 1441 INC R0 Position for next element 04FE9 64040400 0 IMM 1442 CPR R0 WPP Are we past the end of the block 04FEA FE06500B 1443 JGE BLOCKDONE Yes, prepare for next one 04FEB 60605400 1 0 1444 LD R1 DATABLK(R0) Load an address from ADT data 04FEC FA42500B 1 1445 JEQZ R1 BLOCKDONE Zero address => end of ADT entries 04FED 784030FE 1 1446 AND R1 MSBLKMASK Ensure we have just the block number 04FEE 64403074 1 1447 CPR R1 FIRSTBLOCK Is it less than the beginning of range? 04FEF FE084FE8 1448 JLT NEXTELEMENT Yes, look at the next one 04FF0 644030C4 1 1449 CPR R1 LASTBLOCK Greater than the end of range? 04FF1 FE044FE8 1450 JGT NEXTELEMENT Yes, look at the next one 1451 * \ / 1452 * R1 contains a block number within the specified range. 1453 * Tell the user about it. 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 183 (P&PCMD2) F 16 Command: DISK 1454 * \ / 04FF2 E4578801 1 6 BASE 1455 ST R1 SP,BLOCKFOUND Indicate that a block was found 04FF3 E40030A5 0 1456 ST R0 ADTOFFSET Save the block index 04FF4 61538000 5 6 REG 1457 LD R5 SP We'll need stack access during CALL 04FF5 DC1013F9 @ 1458 CALL @VPREPOUT Print eureka message 04FF6 41174801 5 BASE 1459 PAR R5,BLOCKFOUND Indicate the block that was found ... 04FF7 380030D2 0 1460 LEA R0 FBIBUFF ... the ADT block ... 04FF8 41081181 0 ZBM 1461 PAR R0,FBIDA ... containing it ... 04FF9 410030A5 1462 PAR ADTOFFSET ... and the offset 04FFA 40004FFC 1463 PARL FOUNDMSG Specify message template 04FFB FE0E3453 1464 JMP MC Resume main control 1465 * --- 04FFC 30426C6F 1466 FOUNDMSG TEXTZ "0Block \H1,6\ found in ADT block \H2,6\, position \H3,3\." 1467 0000500B 1468 BLOCKDONE LABEL 0500B 60C030A1 3 1469 LD R3 ADTBLOCK Make the current block ... 0500C E4C030A3 3 1470 ST R3 ADTPRIOR ... the prior block 0500D D14030A5 1471 STMW ADTOFFSET Search next block from the beginning 0500E 38C030D2 3 1472 LEA R3 FBIBUFF Get address of ... 0500F 60C8D180 3 3 ZBM 1473 LD R3 R3,FBIFLINK ... next ADT block 05010 E4C030A1 3 1474 ST R3 ADTBLOCK 05011 60C030A3 3 1475 LD R3 ADTPRIOR Check whether the ADT block we just 05012 64C03074 3 1476 CPR R3 FIRSTBLOCK examined was within the range 05013 FE085022 1477 JLT CHECKNEXT 05014 64C030C4 3 1478 CPR R3 LASTBLOCK 05015 FE045022 1479 JGT CHECKNEXT 05016 DC1013F9 @ 1480 CALL @VPREPOUT It was, inform user and return to prompt 05017 410030A3 1481 PAR ADTPRIOR 05018 4000501A 1482 PARL FOUNDMSG2 05019 FE0E3453 1483 JMP MC 1484 * --- 0501A 30426C6F 1485 FOUNDMSG2 TEXTZ "0Block \H1,6\ is an ADT block." 1486 00005022 1487 CHECKNEXT LABEL 05022 5C0030A1 1488 CMZ ADTBLOCK 05023 FE0C4FD3 1489 JNE NEXTBLOCK If there is one, do that block 00005024 1490 NEXTCHAIN LABEL 05024 BC0030A2 0 1491 INCL R0 ADTCHAIN 05025 64040008 0 IMM 1492 CPR R0 SECADTNUM Have we done all the chains? 05026 FE06505E 1493 JGE FINISHUP Yes, we're done 05027 60E05C08 3 0 1494 LD R3 CMPRBLK/SECADTTOP(R0) Load the head of this chain 05028 FAC25024 3 1495 JEQZ R3 NEXTCHAIN If chain empty, go to next one 05029 E4C030A1 3 1496 ST R3 ADTBLOCK 0502A EC0030A3 1497 STZ ADTPRIOR 0502B FE0E4FD3 1498 JMP NEXTBLOCK Start the first block 1499 * --- 1500 1501 * We have arrived here because we were unable to read 1502 * a security block. Give a message and return. 0000502C 1503 BADSEC LABEL 0502C DC1013F9 @ 1504 CALL @VPREPOUT Print error message 0502D 4000502F 1505 PARL BADSECMSG 0502E FE0E5060 1506 JMP ASCANBYE Give up 1507 * --- 0502F 20556E61 1508 BADSECMSG TEXTZ " Unable to read either security block." 1509 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 184 (P&PCMD2) F 16 Command: DISK 1510 * We have arrived here because of an error reading an ADT block. 1511 * TEMP contains the block number. 00005039 1512 BADADT LABEL 05039 61538000 5 6 REG 1513 LD R5 SP We'll need stack access during CALL 0503A DC1013F9 @ 1514 CALL @VPREPOUT Give error message 0503B 41174802 5 BASE 1515 PAR R5,TEMP Specify block number 0503C 4000503E 1516 PARL BADADTMSG and message template 0503D FE0E5024 1517 JMP NEXTCHAIN Continue with another ADT chain 1518 * --- 0503E 30457272 1519 BADADTMSG TEXTZ "0Error in trying to read ADT block \H1,6\." 1520 1521 * We have arrived here because the backward link in one of the ADT 1522 * blocks did not point to the preceding block. We print an error 1523 * message, then resume with next chain. 00005049 1524 LINKERROR LABEL 05049 DC1013F9 @ 1525 CALL @VPREPOUT Call message printer 0504A 4100303B 1526 PAR INBLOCK Current block number 0504B 380030D2 0 1527 LEA R0 FBIBUFF 0504C 41081182 0 ZBM 1528 PAR R0,FBIBLINK The actual back link 0504D 410030A3 1529 PAR ADTPRIOR What the link should be 0504E 40005050 1530 PARL LINKERRMSG Message template 0504F FE0E5024 1531 JMP NEXTCHAIN Proceed with the next chain 1532 * --- 05050 30414454 1533 LINKERRMSG TEXTZ "0ADT Block \H1,6\, backlink = \H2,6\, should be \H3,6\." 1534 0000505E 1535 FINISHUP LABEL 0505E DC1013F9 @ 1536 CALL @VPREPOUT No, print message 0505F 40005062 1537 PARL NOBLOCKSMSG 1538 * \ / 00005060 1539 ASCANBYE LABEL 05060 EC0030A1 1540 STZ ADTBLOCK Prevent a continuation scan 05061 FE0E3453 1541 JMP MC Return to main control 1542 * --- 05062 304E6F20 1543 NOBLOCKSMSG TEXTZ "0No such blocks were found in the ADT." 0506C 2A205C48 1544 BLOCKMSG TEXTZ "* \H1,6\" 0506F 4CB21EA5 1545 BLOCKOPT1 PAK6 BLOCKS +ADTBLOCK 000030A1 F 16 1379 1390s 1418 1423 1469 1474s 1488 1496s 1540s +ADTCHAIN 000030A2 F 16 1388s 1491s +ADTOFFSET 000030A5 F 16 1392s 1439 1456s 1462a 1471s +ADTPRIOR 000030A3 F 16 1391s 1427 1470s 1475 1481a 1497s 1529a ASCANBYE 00005060 F 16 1506j 1539= +ASCANLIST 000030A4 F 16 1398s 1410s 1430 BADADT 00005039 F 16 1422a 1512= BADADTMSG 0000503E F 16 1516a 1519= +BADFORM 00003451 F 16 1404j 1408j BADSEC 0000502C F 16 1366j 1503= BADSECMSG 0000502F F 16 1505a 1508= BLOCKDONE 0000500B F 16 1443j 1445j 1468= BLOCKFOUND 00178801 F 16 1354= 1455s 1459a BLOCKMSG 0000506C F 16 1436a 1544= BLOCKOPT1 0000506F F 16 1402 1545= CANTCONTMSG 00004FB2 F 16 1382a 1385= +CASCAN 00004F9B F 16 1351 1360= CHECKNEXT 00005022 F 16 1477j 1479j 1487= +CMPRBLK UUUUUUUU F 16 1365a 1389 1494 +DATABLK UUUUUUUU F 16 1444 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 185 (P&PCMD2) F 16 Command: DISK +DCBVOLSIZE 00160805 F 16 1374 +DEFBIT 00003610 F 16 1393j +DISKCBP 00003031 F 16 1373 1416 +FBIBLINK 00089182 F 16 1426 1528a +FBIBUFF 000030D2 F 16 1420a 1425a 1460a 1472a 1527a +FBIDA 00089181 F 16 1461a +FBIFLINK 00089180 F 16 1473 +FBITADT 00000007 F 16 1421 FINISHUP 0000505E F 16 1493j 1535= +FIRSTBLOCK 00003074 F 16 1370a 1394 1447 1476 FOUNDMSG 00004FFC F 16 1463a 1466= FOUNDMSG2 0000501A F 16 1482a 1485= FUNNYB 00004FD0 F 16 1401j 1406= GETPARM 00004FC9 F 16 1393j 1397= +GETRANGE 00003761 F 16 1369 +INBLOCK 0000303B F 16 1424s 1435a 1526a +LASTBLOCK 000030C4 F 16 1371a 1395s 1449 1478 LINKERRMSG 00005050 F 16 1530a 1533= LINKERROR 00005049 F 16 1428j 1524= LISTBLOCKS 00004FD2 F 16 1403j 1409= +MC 00003453 F 16 1377j 1383j 1464j 1483j 1541j +MODCHECK 000034DE F 16 1362 +MSBLKMASK 000030FE F 16 1446 MSGSPERLINE 0000000B F 16 1358= 1433 NEXTBLOCK 00004FD3 F 16 1380j 1400j 1415= 1489j 1498j NEXTCHAIN 00005024 F 16 1490= 1495j 1517j 1531j NEXTELEMENT 00004FE8 F 16 1440= 1448j 1450j NOBLOCKSMSG 00005062 F 16 1537a 1543= NOCONT 00004FC1 F 16 1378j 1387= +NUMMES 00003099 F 16 1367s +NUMMESCHK 000039CA F 16 1432 +PFCMPRBLK 00003019 F 16 1364 +PFDATABLK 00003017 F 16 1419 +READSECBLK UUUUUUUU F 16 1363 SEARCHBLOCK 00004FE7 F 16 1431j 1438= +SECADTNUM 00000008 F 16 1492 +SECADTTOP 00000008 F 16 1389 1494 TEMP 00178802 F 16 1355= 1361s 1368 1515a +TEOL 00003810 F 16 1378j 1400j +TNUM 00003E10 F 16 1401j +VFETCHITMH 000013F8 F 16 1399 +VPREPOUT 000013F9 F 16 1381 1434 1458 1480 1504 1514 1525 1536 +VREAD 000013E0 F 16 1417 +WPP 00000400 F 16 1442 1546 END 1547 1549 ********************************************************************************** 1550 * * 1551 * CSUB -- Make a disk block substitution * 1552 * * 1553 ********************************************************************************** 1554 1555 BLOCK 1556 ENTRY CSUB 1557 1558 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 186 (P&PCMD2) F 16 Command: DISK 1559 BEGFRAME 1559 NOLIST CREF 1559 NOSYMS 00005070 1559 ZZ!FRAME BASE SP beginning of stack frame 1559 SYMS 1559 BSS 1 space for return link 1559 LIST CREF 1560 ENDFRAME 1560 NOLIST CREF 1560 DRCT 00000001 ABS 1560 ZZ!LEN EQU DISPW ZZ!FRAME 001F8001 6 STAK 1560 PUSH EQU STAK SP,ZZ!LEN 001F8001 6 STAK 1560 POP EQU PUSH 1560 ORG ZZ!FRAME 1560 LIST CREF 1561 00005070 1562 CSUB LABEL 05070 DC5013F8 @ 1563 CALLNP @VFETCHITMH Get block number from command line 05071 F6783453 1 1564 JBT R1/TEOL MC 05072 F27E3451 1 1565 JBF R1/TNUM BADFORM 05073 61003031 4 1566 LD R4 DISKCBP Check it is within the size of the disk 05074 60170805 0 4 BASE 1567 LD R0 R4,DCBVOLSIZE 05075 68920000 2 0 REG 1568 UCPR R2 R0 05076 FE063451 1569 JGE BADFORM Jump if bigger than the disk 05077 5C003016 1570 CMZ ONLINE Are we on- or off-line 05078 FE0C507C 1571 JNE CALLVRM Online, let vrm do it 05079 DC0050B0 1572 CALL SUBSTITUTE 0507A 40528000 2 REG 1573 PARVL R2 0507B FE0E3453 1574 JMP MC 1575 * --- 0000507C 1576 CALLVRM LABEL 1577 ********************************************************************************** 1578 * Before we do the substitution, we need to see if the volume is * 1579 * mounted (other than the maintenance mount we did). If it is not, * 1580 * the substitution will not be done but we will get no error indication. * 1581 ********************************************************************************** 0507C 60D28000 3 2 REG 1582 LD R3 R2 Save disk block number 0507D 60040044 0 IMM 1583 LD R0 ORVOLINFO 0507E 60441000 1 IMM 1584 LD R1 CPP Buffer length 0507F 38805400 2 1585 LEA R2 DATABLK Buffer for volume information 05080 61003031 4 1586 LD R4 DISKCBP 05081 0957001C 4 CACH 1587 OPREQ R4,DCBLUN 05082 38805400 2 1588 LEA R2 DATABLK 05083 5C088E10 2 ZBM 1589 CMZ R2,0/BIT 7 Is volume mounted? 05084 FE0C5094 1590 JNE NOCANDO No, don't try substitution 05085 60040142 0 IMM 1591 LD R0 ORMAINTRSUB maintenance read and substitute 05086 38405400 1 1592 LEA R1 DATABLK Where to put the block 05087 38805800 2 1593 LEA R2 CCBBLK Where to put the fbi 05088 61003031 4 1594 LD R4 DISKCBP 05089 0957001C 4 CACH 1595 OPREQ R4,DCBLUN Do the substitution 0508A FA063453 0 1596 JGEZ R0 MC 0508B 608A3080 2 0 CBM 1597 LD R2 R0/BITS 24:31 Get error code 0508C 60040028 0 IMM 1598 LD R0 URERRORGET 0508D 38405400 1 1599 LEA R1 DATABLK 0508E 09040064 IMM 1600 UREQ 100 Get error message 0508F 30440064 1 IMM 1601 RSB R1 100 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 187 (P&PCMD2) F 16 Command: DISK 05090 60040040 0 IMM 1602 LD R0 FRWRITE and write it out 05091 38805400 2 1603 LEA R2 DATABLK 05092 08840002 IMM 1604 FREQ 2 05093 FE0E3453 1605 JMP MC 1606 * --- 00005094 1607 NOCANDO LABEL 05094 DC1013F9 @ 1608 CALL @VPREPOUT 05095 40005097 1609 PARL NOTMNTEDMSG 05096 FE0E3453 1610 JMP MC 1611 * --- 05097 20457272 1612 NOTMNTEDMSG TEXTZ " Error: The volume must have been mounted normally" 1613 000050A4 1614 BADBLOCKNUM LABEL 050A4 DC1013F9 @ 1615 CALL @VPREPOUT 050A5 400050A7 1616 PARL BADBNUMMSG 050A6 FE0E3453 1617 JMP MC 1618 * --- 050A7 20457272 1619 BADBNUMMSG TEXTZ " Error: Block number out of range" BADBLOCKNUM 000050A4 F 16 1614= BADBNUMMSG 000050A7 F 16 1616a 1619= +BADFORM 00003451 F 16 1565j 1569j CALLVRM 0000507C F 16 1571j 1576= +CCBBLK UUUUUUUU F 16 1593a +CPP 00001000 F 16 1584 +CSUB 00005070 F 16 1556 1562= +DATABLK UUUUUUUU F 16 1585a 1588a 1592a 1599a 1603a +DCBLUN 0016001C F 16 1587 1595 +DCBVOLSIZE 00160805 F 16 1567 +DISKCBP 00003031 F 16 1566 1586 1594 +FRWRITE 00000040 F 16 1602 +MC 00003453 F 16 1564j 1574j 1596j 1605j 1610j 1617j NOCANDO 00005094 F 16 1590j 1607= NOTMNTEDMSG 00005097 F 16 1609a 1612= +ONLINE 00003016 F 16 1570 +ORMAINTRSUB 00000142 F 16 1591 +ORVOLINFO 00000044 F 16 1583 +SUBSTITUTE UUUUUUUU F 16 1572 +TEOL 00003810 F 16 1564j +TNUM 00003E10 F 16 1565j +URERRORGET 00000028 F 16 1598 +VFETCHITMH 000013F8 F 16 1563 +VPREPOUT 000013F9 F 16 1608 1615 1620 END 1621 1622 ********************************************************************************** 1623 * * 1624 * This is the offline disk block substitution routine. * 1625 * Call: * 1626 * LD R4 DISKCBP * 1627 * CALL SUBSTITUTE * 1628 * PARVL * 1629 * * 1630 ********************************************************************************** 1631 1632 BLOCK 1633 ENTRY SUBSTITUTE 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 188 (P&PCMD2) F 16 Command: DISK 1634 1635 BEGFRAME 1635 NOLIST CREF 1635 NOSYMS 000050B0 1635 ZZ!FRAME BASE SP beginning of stack frame 1635 SYMS 1635 BSS 1 space for return link 1635 LIST CREF 00178801 6 BASE 1636 VIRTBLK BSS 1 The block to substitute 00178802 6 BASE 1637 REALBLK BSS 1 If virtblk is already substituted, 1638 the substitution block number 00178803 6 BASE 1639 NEWBLK BSS 1 The block to replace virtblk 00178804 6 BASE 1640 BTRXDA BSS 1 Bad trax disk address 00178805 6 BASE 1641 SUBSDA BSS 1 Substition block disk address 00178806 6 BASE 1642 FBIBUFFER BSS FBILNTH 1643 ENDFRAME 1643 NOLIST CREF 1643 DRCT 00000011 ABS 1643 ZZ!LEN EQU DISPW ZZ!FRAME 001F8011 6 STAK 1643 PUSH EQU STAK SP,ZZ!LEN 001F8011 6 STAK 1643 POP EQU PUSH 1643 ORG ZZ!FRAME 1643 LIST CREF 1644 050B0 DD1F8011 6 STAK 1645 SUBSTITUTE ENTR PUSH 050B1 E4178802 0 6 BASE 1646 ST R0 SP,REALBLK Assume realblk = virtblk 050B2 C0578801 6 BASE 1647 STPVL SP,VIRTBLK 1648 1649 * First, get the addresses of the bad trax block and the 1650 * substitution block. 050B3 61538000 5 6 REG 1651 LD R5 SP 050B4 DC1013E0 @ 1652 CALL @VREAD 050B5 41440001 IMM 1653 PARV VOLLABELDA Where to find a volume label 050B6 415013E8 @ 1654 PARV @VPFWNDO1 Where to put it 050B7 41174806 5 BASE 1655 PAR R5,FBIBUFFER Buffer for the FBI 050B8 41440004 IMM 1656 PARV FBITVL Ensure we get the volume label 050B9 40005137 1657 PARL VLERR Error return 050BA 60000810 0 1658 LD R0 WNDO1/VLSUBSDA 050BB E4178805 0 6 BASE 1659 ST R0 SP,SUBSDA 050BC 61538000 5 6 REG 1660 LD R5 SP 050BD DC1013E0 @ 1661 CALL @VREAD 050BE 41440000 IMM 1662 PARV PLDA Where to find a pack label 050BF 415013E8 @ 1663 PARV @VPFWNDO1 Where to put it 050C0 41174806 5 BASE 1664 PAR R5,FBIBUFFER Buffer for the FBI 050C1 41440001 IMM 1665 PARV FBITPL Ensure we get the pack label 050C2 40005139 1666 PARL PLERR Error return 050C3 60000818 0 1667 LD R0 WNDO1/PLBDTRXDA 050C4 E4178804 0 6 BASE 1668 ST R0 SP,BTRXDA 1669 * \ / 1670 * See if the block is already substituted 1671 * \ / 050C5 60570804 1 4 BASE 1672 LD R1 R4,DCBSUBLIST 050C6 60178801 0 6 BASE 1673 LD R0 SP,VIRTBLK 050C7 3C164801 0 1 BASE 1674 LSRCH R0 R1,SUBLBAD 050C8 FE0C50CB 1675 JNE NOTSUBD 050C9 60164802 0 1 BASE 1676 LD R0 R1,SUBLGOOD Save the current real block number 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 189 (P&PCMD2) F 16 Command: DISK 050CA E4178802 0 6 BASE 1677 ST R0 SP,REALBLK 1678 * \ / 000050CB 1679 NOTSUBD LABEL 1680 * \ / 1681 * Read the bad tracks block. If the newly bad block is not in it, 1682 * add it and write the bad tracks block back. 1683 * \ / 050CB 61538000 5 6 REG 1684 LD R5 SP 050CC DC1013E0 @ 1685 CALL @VREAD 050CD 41574804 5 BASE 1686 PARV R5,BTRXDA 050CE 415013E8 @ 1687 PARV @VPFWNDO1 050CF 41174806 5 BASE 1688 PAR R5,FBIBUFFER 050D0 41440002 IMM 1689 PARV FBITBTRX 050D1 40005135 1690 PARL BADTRAXERR 050D2 60178802 0 6 BASE 1691 LD R0 SP,REALBLK Load the bad block number 050D3 780030FE 0 1692 AND R0 MSBLKMASK 050D4 38400800 1 1693 LEA R1 WNDO1 Point to bad trax info 000050D5 1694 SEARCHBTRX LABEL 050D5 5C084080 1 ZBM 1695 CMZ R1,BTRXEL/BTRXREASON 050D6 FE0250DD 1696 JEQ NOTINBTRX End of bad block list 050D7 64085180 0 1 ZBM 1697 CPR R0 R1,BTRXEL/MSBLKFIELD 050D8 FE0250EC 1698 JEQ INBTRX Jump if block already in list 050D9 18440002 1 IMM 1699 ADD R1 BTRXLNTH Advance one entry 050DA 64440BFE 1 IMM 1700 CPR R1 ADR WNDO1(WPP)(-BTRXLNTH) 050DB FE0A50D5 1701 JLE SEARCHBTRX Continue if more entries 1702 * \ / 1703 * Bad trax block is full, but this is not too important. 1704 * \ / 050DC FE0E50EC 1705 JMP INBTRX 1706 * --- 000050DD 1707 NOTINBTRX LABEL 050DD E4164800 0 1 BASE 1708 ST R0 R1,BTRXEL Add to bad trax, block number 050DE 60040040 0 IMM 1709 LD R0 BTRXFSDE 050DF E4084080 0 1 ZBM 1710 ST R0 R1,BTRXEL/BTRXREASON and reason code 050E0 61524000 5 1 REG 1711 LD R5 R1 050E1 DC5013FB @ 1712 CALLNP @VGETDATE 050E2 3800305C 0 1713 LEA R0 VARS(0) 050E3 E6960800 230 BASE 1714 ST2 R2 R0,0 050E4 60082800 0 0 ZBM 1715 LD R0 R0,0/DATEHORD 050E5 E4174801 0 5 BASE 1716 ST R0 R5,BTRXDATE and when it happened 050E6 61538000 5 6 REG 1717 LD R5 SP 050E7 DC1013E1 @ 1718 CALL @VWRITE Write back the bad trax block 050E8 41574804 5 BASE 1719 PARV R5,BTRXDA 050E9 415013E8 @ 1720 PARV @VPFWNDO1 050EA 41174806 5 BASE 1721 PAR R5,FBIBUFFER 050EB 40005129 1722 PARL WRITEERROR 1723 * \ / 000050EC 1724 INBTRX LABEL 1725 * \ / 1726 * Try to read the disk block. If we fail, abort. Check the 1727 * 'no substitution' flag in the fbi. If set, end. 1728 * \ / 050EC 61538000 5 6 REG 1729 LD R5 SP 050ED DC1013E0 @ 1730 CALL @VREAD 050EE 41574802 5 BASE 1731 PARV R5,REALBLK 050EF 41403017 1732 PARV PFDATABLK 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 190 (P&PCMD2) F 16 Command: DISK 050F0 410030D2 1733 PAR FBIBUFF 050F1 4147FFFF IMM 1734 PARV -1 Unknown FBI type 050F2 40005133 1735 PARL DATABLKERR Go here on read error 050F3 380030D2 0 1736 LEA R0 FBIBUFF 050F4 5C080411 0 ZBM 1737 CMZ R0,0/FBINOSUB Substitution allowed? 050F5 FE0250F7 1738 JEQ CHECKDA 050F6 5D1F8011 6 STAK 1739 LEAVE POP Nope 1740 * --- 000050F7 1741 CHECKDA LABEL 050F7 60081181 0 0 ZBM 1742 LD R0 R0,0/FBIDA Check disk address in FBI 050F8 64178802 0 6 BASE 1743 CPR R0 SP,REALBLK (just on principle) 050F9 FE0250FE 1744 JEQ GETNEW 050FA 60578802 1 6 BASE 1745 LD R1 SP,REALBLK It was wrong, fix it 050FB E4481181 1 0 ZBM 1746 ST R1 R0,0/FBIDA 050FC DC1013F9 @ 1747 CALL @VPREPOUT 050FD 40005157 1748 PARL BADDAWARN 1749 * \ / 1750 * Get a shiny new block to replace the bad one 1751 * \ / 000050FE 1752 GETNEW LABEL 050FE 61538000 5 6 REG 1753 LD R5 SP 050FF DC005176 1754 CALL GETFREEBLK 05100 40174803 5 BASE 1755 PARL R5,NEWBLK 05101 5C178803 6 BASE 1756 CMZ SP,NEWBLK Any error getting a new one? 05102 FE02515F 1757 JEQ NONEWBLK Yes, give up 1758 * \ / 1759 * Write the data to its new home. 1760 * \ / 05103 61538000 5 6 REG 1761 LD R5 SP 05104 DC1013E1 @ 1762 CALL @VWRITE 05105 41574803 5 BASE 1763 PARV R5,NEWBLK 05106 41403017 1764 PARV PFDATABLK 05107 410030D2 1765 PAR FBIBUFF 05108 40005129 1766 PARL WRITEERROR 1767 * \ / 1768 * Read in the substition block. Add our new entry or change 1769 * the existing one, and write the block back. 1770 * \ / 05109 61538000 5 6 REG 1771 LD R5 SP 0510A DC1013E0 @ 1772 CALL @VREAD 0510B 41574805 5 BASE 1773 PARV R5,SUBSDA 0510C 415013E8 @ 1774 PARV @VPFWNDO1 0510D 41174806 5 BASE 1775 PAR R5,FBIBUFFER 0510E 41440005 IMM 1776 PARV FBITSUBS Unknown FBI type 0510F 40005131 1777 PARL SUBLISTERR Go here on read error 05110 60178801 0 6 BASE 1778 LD R0 SP,VIRTBLK 05111 780030FE 0 1779 AND R0 MSBLKMASK Get the block number to look for 05112 38400800 1 1780 LEA R1 WNDO1 Point to substitution block 05113 5C164800 1 BASE 1781 SEARCHSUB CMZ R1,SUBSBADDY Are we past all the entries? 05114 FE02511B 1782 JEQ FOUNDPLACE Jump if so 05115 64164800 0 1 BASE 1783 CPR R0 R1,SUBSBADDY Have we found virtblk? 05116 FE02511B 1784 JEQ FOUNDPLACE Jump if so 05117 18440002 1 IMM 1785 ADD R1 SUBSLNTH Advance one entry 05118 64440BFE 1 IMM 1786 CPR R1 ADR WNDO1(WPP)(-SUBSLNTH) Is there another one? 05119 FE0A5113 1787 JLE SEARCHSUB Keep looking 0511A FE0E516A 1788 JMP SUBSFULL Substitution block full 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 191 (P&PCMD2) F 16 Command: DISK 1789 * --- 0000511B 1790 FOUNDPLACE LABEL 0511B E4164800 0 1 BASE 1791 ST R0 R1,SUBSBADDY Store bad block number 0511C 60178803 0 6 BASE 1792 LD R0 SP,NEWBLK 0511D 780030FE 0 1793 AND R0 MSBLKMASK 0511E E4164801 0 1 BASE 1794 ST R0 R1,SUBSSUB and the good block number 0511F 61538000 5 6 REG 1795 LD R5 SP 05120 DC1013E1 @ 1796 CALL @VWRITE 05121 41574805 5 BASE 1797 PARV R5,SUBSDA 05122 415013E8 @ 1798 PARV @VPFWNDO1 05123 41174806 5 BASE 1799 PAR R5,FBIBUFFER 05124 40005129 1800 PARL WRITEERROR 1801 * \ / 1802 * Close the disk and re-open it to re-read the substitution list 1803 * \ / 05125 DC5013EC @ 1804 CALLNP @VCLOSEDISK 05126 EE140000 01 PAIR 1805 STZ2 PAIR R0 Indicate DCB already initialized 05127 DC5013EB @ 1806 CALLNP @VOPENDISK 1807 05128 5D1F8011 6 STAK 1808 LEAVE POP 1809 * --- 00005129 1810 WRITEERROR LABEL 05129 DC1013F9 @ 1811 CALL @VPREPOUT 0512A 4000512C 1812 PARL WERRMSG 0512B 5D1F8011 6 STAK 1813 LEAVE POP 1814 * --- 0512C 20446973 1815 WERRMSG TEXTZ " Disk write error" 1816 00005131 1817 SUBLISTERR LABEL 05131 3840514F 1 1818 LEA R1 SUBLERRMSG 05132 FE0E513B 1819 JMP GIVEERR 1820 * --- 00005133 1821 DATABLKERR LABEL 05133 38405154 1 1822 LEA R1 DBERRMSG 05134 FE0E513B 1823 JMP GIVEERR 1824 * --- 00005135 1825 BADTRAXERR LABEL 05135 3840514B 1 1826 LEA R1 BTERRMSG 05136 FE0E513B 1827 JMP GIVEERR 1828 * --- 00005137 1829 VLERR LABEL 05137 38405147 1 1830 LEA R1 VLERRMSG 05138 FE0E513B 1831 JMP GIVEERR 1832 * --- 00005139 1833 PLERR LABEL 05139 38405144 1 1834 LEA R1 PLERRMSG 0513A FE0E513B 1835 JMP GIVEERR 1836 * --- 1837 0000513B 1838 GIVEERR LABEL 0513B DC1013F9 @ 1839 CALL @VPREPOUT 0513C 41164400 1 @R 1840 PAR @R1 0513D 4000513F 1841 PARL ERRMSG 0513E 5D1F8011 6 STAK 1842 LEAVE POP 1843 * --- 0513F 20457272 1844 ERRMSG TEXTZ " Error reading \C1\" 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 192 (P&PCMD2) F 16 Command: DISK 05144 7061636B 1845 PLERRMSG TEXTZ "pack label" 05147 766F6C75 1846 VLERRMSG TEXTZ "volume label" 0514B 62616420 1847 BTERRMSG TEXTZ "bad trax list" 0514F 73756273 1848 SUBLERRMSG TEXTZ "substitution list" 05154 64617461 1849 DBERRMSG TEXTZ "data block" 1850 05157 20576172 1851 BADDAWARN TEXTZ " Warning: FBIDA was incorrect" 0000515F 1852 NONEWBLK LABEL 0515F DC1013F9 @ 1853 CALL @VPREPOUT 05160 40005162 1854 PARL OOSMSG 05161 5D1F8011 6 STAK 1855 LEAVE POP 1856 * --- 05162 20457272 1857 OOSMSG TEXTZ " Error: No free disk blocks" 1858 0000516A 1859 SUBSFULL LABEL 0516A DC1013F9 @ 1860 CALL @VPREPOUT 0516B 4000516D 1861 PARL SUBSFULLMSG 0516C 5D1F8011 6 STAK 1862 LEAVE POP 1863 * --- 0516D 20457272 1864 SUBSFULLMSG TEXTZ " Error: Substitution block is full" BADDAWARN 00005157 F 16 1748a 1851= BADTRAXERR 00005135 F 16 1690a 1825= BTERRMSG 0000514B F 16 1826a 1847= BTRXDA 00178804 F 16 1640= 1668s 1686 1719 +BTRXDATE 00000001 F 16 1716s +BTRXEL 00000000 F 16 1695 1697 1708s 1710s +BTRXFSDE 00000040 F 16 1709 +BTRXLNTH 00000002 F 16 1699 1700a +BTRXREASON 00000080 F 16 1695 1710s CHECKDA 000050F7 F 16 1738j 1741= DATABLKERR 00005133 F 16 1735a 1821= +DATEHORD 00082800 F 16 1715 DBERRMSG 00005154 F 16 1822a 1849= +DCBSUBLIST 00160804 F 16 1672 ERRMSG 0000513F F 16 1841a 1844= +FBIBUFF 000030D2 F 16 1733a 1736a 1765a FBIBUFFER 00178806 F 16 1642= 1655a 1664a 1688a 1721a 1775a 1799a +FBIDA 00089181 F 16 1742 1746s +FBILNTH 0000000B F 16 1642 +FBINOSUB 00088411 F 16 1737 +FBITBTRX 00000002 F 16 1689 +FBITPL 00000001 F 16 1665 +FBITSUBS 00000005 F 16 1776 +FBITVL 00000004 F 16 1656 FOUNDPLACE 0000511B F 16 1782j 1784j 1790= +GETFREEBLK UUUUUUUU F 16 1754 GETNEW 000050FE F 16 1744j 1752= GIVEERR 0000513B F 16 1819j 1823j 1827j 1831j 1835j 1838= INBTRX 000050EC F 16 1698j 1705j 1724= +MSBLKFIELD 00001180 F 16 1697 +MSBLKMASK 000030FE F 16 1692 1779 1793 NEWBLK 00178803 F 16 1639= 1755a 1756 1763 1792 NONEWBLK 0000515F F 16 1757j 1852= NOTINBTRX 000050DD F 16 1696j 1707= NOTSUBD 000050CB F 16 1675j 1679= OOSMSG 00005162 F 16 1854a 1857= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 193 (P&PCMD2) F 16 Command: DISK +PFDATABLK 00003017 F 16 1732 1764 +PLBDTRXDA 00000018 F 16 1667 +PLDA 00000000 F 16 1662 PLERR 00005139 F 16 1666a 1833= PLERRMSG 00005144 F 16 1834a 1845= REALBLK 00178802 F 16 1637= 1646s 1677s 1691 1731 1743 1745 SEARCHBTRX 000050D5 F 16 1694= 1701j SEARCHSUB 00005113 F 16 1781= 1787j +SUBLBAD 00160801 F 16 1674 SUBLERRMSG 0000514F F 16 1818a 1848= +SUBLGOOD 00160802 F 16 1676 SUBLISTERR 00005131 F 16 1777a 1817= +SUBSBADDY 00000000 F 16 1781 1783 1791s SUBSDA 00178805 F 16 1641= 1659s 1773 1797 SUBSFULL 0000516A F 16 1788j 1859= SUBSFULLMSG 0000516D F 16 1861a 1864= +SUBSLNTH 00000002 F 16 1785 1786a +SUBSSUB 00000001 F 16 1794s +SUBSTITUTE 000050B0 F 16 1633 1645= +VARS 0000305C F 16 1713a +VCLOSEDISK 000013EC F 16 1804 +VGETDATE 000013FB F 16 1712 VIRTBLK 00178801 F 16 1636= 1647s 1673 1778 VLERR 00005137 F 16 1657a 1829= VLERRMSG 00005147 F 16 1830a 1846= +VLSUBSDA 00000010 F 16 1658 +VOLLABELDA 00000001 F 16 1653 +VOPENDISK 000013EB F 16 1806 +VPFWNDO1 000013E8 F 16 1654 1663 1687 1720 1774 1798 +VPREPOUT 000013F9 F 16 1747 1811 1839 1853 1860 +VREAD 000013E0 F 16 1652 1661 1685 1730 1772 +VWRITE 000013E1 F 16 1718 1762 1796 WERRMSG 0000512C F 16 1812a 1815= +WNDO1 00000800 F 16 1658 1667 1693a 1700a 1780a 1786a +WPP 00000400 F 16 1700a 1786a WRITEERROR 00005129 F 16 1722a 1766a 1800a 1810= 1865 END 1866 1867 BLOCK 1868 ENTRY GETFREEBLK 1869 1870 BEGFRAME 1870 NOLIST CREF 1870 NOSYMS 00005176 1870 ZZ!FRAME BASE SP beginning of stack frame 1870 SYMS 1870 BSS 1 space for return link 1870 LIST CREF 00178801 6 BASE 1871 FREEBLK BSS 1 Pointer to user's return value 00178802 6 BASE 1872 CHAINNUM BSS 1 The chain the new block is taken from 00178803 6 BASE 1873 TEMP BSS 1 00178804 6 BASE 1874 FBIBUFFER BSS FBILNTH 1875 ENDFRAME 1875 NOLIST CREF 1875 DRCT 0000000F ABS 1875 ZZ!LEN EQU DISPW ZZ!FRAME 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 194 (P&PCMD2) F 16 Command: DISK 001F800F 6 STAK 1875 PUSH EQU STAK SP,ZZ!LEN 001F800F 6 STAK 1875 POP EQU PUSH 1875 ORG ZZ!FRAME 1875 LIST CREF 1876 05176 DD1F800F 6 STAK 1877 GETFREEBLK ENTR PUSH 05177 C0178801 6 BASE 1878 STPL SP,FREEBLK 1879 05178 EC178C01 6 FPVR 1880 STZ @(SP,FREEBLK) 05179 DC0051B9 1881 CALL READSECBLK 0517A 415013E8 @ 1882 PARV @VPFWNDO1 0517B 40000800 1883 PARL WNDO1 0517C FE0E51B0 1884 JMP RETURN 0517D 60040007 0 IMM 1885 LD R0 SECADTNUM-1 Look for an ADT chain with some blocks 0517E 60600808 1 0 1886 CHAINLOOP LD R1 WNDO1/SECADTTOP(R0) Get chain head 0517F FA4C5182 1 1887 JNEZ R1 FOUNDCHAIN If defined, exit 05180 FA26517E 0 1888 JDR R0 CHAINLOOP else look at the next one 05181 5D1F800F 6 STAK 1889 LEAVE POP No disk space 00005182 1890 FOUNDCHAIN LABEL 05182 E4178802 0 6 BASE 1891 ST R0 SP,CHAINNUM Remember which chain we're taking from 05183 E4578803 1 6 BASE 1892 ST R1 SP,TEMP Save block number 05184 61538000 5 6 REG 1893 LD R5 SP 05185 DC1013E0 @ 1894 CALL @VREAD Read the ADT block 05186 41524000 1 REG 1895 PARV R1 The block number 05187 415013E9 @ 1896 PARV @VPFWNDO2 Where to put it 05188 41174804 5 BASE 1897 PAR R5,FBIBUFFER 05189 41440007 IMM 1898 PARV FBITADT 0518A 400051B0 1899 PARL RETURN Go here on read error 0518B 600400C9 0 IMM 1900 LD R0 ADTECNT+1 Find the last block listed in 0518C 60600C00 1 0 1901 ADTLOOP LD R1 WNDO2(R0) Load block number 0518D FA4451A4 1 1902 JGTZ R1 FOUNDBLOCK 0518E FA26518C 0 1903 JDR R0 ADTLOOP 1904 * \ / 1905 * The ADT block contained no entries. We'll usurp that block and 1906 * change the chain head in the security block. 1907 * \ / 0518F 60178803 0 6 BASE 1908 LD R0 SP,TEMP 05190 E4178C01 0 6 FPVR 1909 ST R0 @(SP,FREEBLK) 05191 60499184 1 6 ZBM 1910 LD R1 SP,FBIBUFFER/FBIFLINK Load and remember next ADT 05192 E4578803 1 6 BASE 1911 ST R1 SP,TEMP block 1912 05193 DC1013E0 @ 1913 CALL @VREAD Read the next ADT block 05194 41524000 1 REG 1914 PARV R1 The block number 05195 415013E9 @ 1915 PARV @VPFWNDO2 Where to put it 05196 41174804 5 BASE 1916 PAR R5,FBIBUFFER 05197 41440007 IMM 1917 PARV FBITADT 05198 400051B0 1918 PARL RETURN Go here on read error 05199 EC099186 6 ZBM 1919 STZ SP,FBIBUFFER/FBIBLINK Zero its backward link 0519A 61538000 5 6 REG 1920 LD R5 SP 0519B DC1013E1 @ 1921 CALL @VWRITE and write it back 0519C 41495185 5 ZBM 1922 PARV R5,FBIBUFFER/FBIDA 0519D 415013E9 @ 1923 PARV @VPFWNDO2 0519E 41174804 5 BASE 1924 PAR R5,FBIBUFFER 0519F 400051B0 1925 PARL RETURN 051A0 60178803 0 6 BASE 1926 LD R0 SP,TEMP Set the new chain head in the sec blk 051A1 60578802 1 6 BASE 1927 LD R1 SP,CHAINNUM 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 195 (P&PCMD2) F 16 Command: DISK 051A2 E4220808 0 1 1928 ST R0 WNDO1/SECADTTOP(R1) 051A3 FE0E51AC 1929 JMP RETURNSEC 1930 * --- 000051A4 1931 FOUNDBLOCK LABEL 051A4 E4578C01 1 6 FPVR 1932 ST R1 @(SP,FREEBLK) Give the block number to the user 051A5 EC200C00 0 1933 STZ WNDO2(R0) and remove it from the ADT block 051A6 61538000 5 6 REG 1934 LD R5 SP 051A7 DC1013E1 @ 1935 CALL @VWRITE and return the ADT block 051A8 41495185 5 ZBM 1936 PARV R5,FBIBUFFER/FBIDA 051A9 415013E9 @ 1937 PARV @VPFWNDO2 051AA 41174804 5 BASE 1938 PAR R5,FBIBUFFER 051AB 400051B1 1939 PARL WRITEERROR 1940 * \ / 000051AC 1941 RETURNSEC LABEL 051AC 60178802 0 6 BASE 1942 LD R0 SP,CHAINNUM Decrement free count in this chain 051AD D0600818 0 1943 DEC WNDO1/SECADTCNT(R0) 051AE DC0051D9 1944 CALL WRITESECBLK and return the security block 051AF 405013E8 @ 1945 PARVL @VPFWNDO1 1946 000051B0 1947 RETURN LABEL 051B0 5D1F800F 6 STAK 1948 LEAVE POP 1949 * --- 000051B1 1950 WRITEERROR LABEL 051B1 DC1013F9 @ 1951 CALL @VPREPOUT 051B2 400051B4 1952 PARL WERRMSG 051B3 5D1F800F 6 STAK 1953 LEAVE POP 1954 * --- 051B4 20446973 1955 WERRMSG TEXTZ " Disk write error" 1956 +ADTECNT 000000C8 F 16 1900 ADTLOOP 0000518C F 16 1901= 1903j CHAINLOOP 0000517E F 16 1886= 1888j CHAINNUM 00178802 F 16 1872= 1891s 1927 1942 +FBIBLINK 00089182 F 16 1919s FBIBUFFER 00178804 F 16 1874= 1897a 1910 1916a 1919s 1922 1924a 1936 1938a +FBIDA 00089181 F 16 1922 1936 +FBIFLINK 00089180 F 16 1910 +FBILNTH 0000000B F 16 1874 +FBITADT 00000007 F 16 1898 1917 FOUNDBLOCK 000051A4 F 16 1902j 1931= FOUNDCHAIN 00005182 F 16 1887j 1890= FREEBLK 00178801 F 16 1871= 1878s 1880s 1909s 1932s +GETFREEBLK 00005176 F 16 1868 1877= +READSECBLK UUUUUUUU F 16 1881 RETURN 000051B0 F 16 1884j 1899a 1918a 1925a 1947= RETURNSEC 000051AC F 16 1929j 1941= +SECADTCNT 00000018 F 16 1943s +SECADTNUM 00000008 F 16 1885 +SECADTTOP 00000008 F 16 1886 1928s TEMP 00178803 F 16 1873= 1892s 1908 1911s 1926 +VPFWNDO1 000013E8 F 16 1882 1945 +VPFWNDO2 000013E9 F 16 1896 1915 1923 1937 +VPREPOUT 000013F9 F 16 1951 +VREAD 000013E0 F 16 1894 1913 +VWRITE 000013E1 F 16 1921 1935 WERRMSG 000051B4 F 16 1952a 1955= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 196 (P&PCMD2) F 16 Command: DISK +WNDO1 00000800 F 16 1883a 1886 1928s 1943s +WNDO2 00000C00 F 16 1901 1933s WRITEERROR 000051B1 F 16 1939a 1950= +WRITESECBLK UUUUUUUU F 16 1944 1957 END 1959 ********************************************************************************** 1960 * READSECBLK * 1961 * * 1962 * This procedure reads a security block from the current disk. * 1963 * Call: * 1964 * CALL READSECBLK * 1965 * PARV PF value for destination buffer * 1966 * PARL PTR to destination buffer * 1967 * * 1968 * Eats: R0:R2, R5, FBIBUFF * 1969 * Stack: 6 * 1970 ********************************************************************************** 1971 1972 BLOCK 1973 ENTRY READSECBLK 1974 1975 BEGFRAME 00178801 6 BASE 1976 PFBUFFER BSS 1 PF value for buffer we are reading into 00178802 6 BASE 1977 PTRBUFFER BSS 1 Pointer to the buffer 00178803 6 BASE 1978 SEC1BLK BSS 1 Address of first security block 00178804 6 BASE 1979 SEC2BLK BSS 1 Address of second security block 1980 Above two items must be consecutive on the stack 00178805 6 BASE 1981 CURRENTBLK BSS 1 The address we are trying to read 1982 ENDFRAME 1983 051B9 DD1F8006 6 STAK 1984 READSECBLK ENTR PUSH 051BA C1578801 6 BASE 1985 STPV SP,PFBUFFER 051BB C0178802 6 BASE 1986 STPL SP,PTRBUFFER 1987 * \ / 1988 * First, read the volume label 1989 * \ / 051BC 61003031 4 1990 LD R4 DISKCBP Get Disk Control Block Ptr 051BD 61538000 5 6 REG 1991 LD R5 SP We'll need stack access during the call 051BE DC1013E0 @ 1992 CALL @VREAD 051BF 41440001 IMM 1993 PARV VOLLABELDA Where to find a volume label 051C0 41574801 5 BASE 1994 PARV R5,PFBUFFER Where to put it 051C1 410030F3 1995 PAR SECFBIBUFF Buffer for the FBI 051C2 41440004 IMM 1996 PARV FBITVL Ensure we get the volume label 051C3 400051D4 1997 PARL RETURN Error return 051C4 60178802 0 6 BASE 1998 LD R0 SP,PTRBUFFER Load and save ... 051C5 60560812 1 0 BASE 1999 LD R1 R0,VLSECBDA ... the addresses of ... 051C6 60960813 2 0 BASE 2000 LD R2 R0,VLSECB2DA ... the two security ... 051C7 E6578803 126 BASE 2001 ST2 R1 SP,SEC1BLK ... blocks 051C8 E640305A 12 2002 ST2 R1 SECBLKDAS 2003 * \ / 2004 * Now try for a security block 2005 * \ / 051C9 60578803 1 6 BASE 2006 LD R1 SP,SEC1BLK Indicate we are trying for the first one 051CA E4578805 1 6 BASE 2007 TRYREAD ST R1 SP,CURRENTBLK 051CB 61003031 4 2008 LD R4 DISKCBP Get Disk Control Block Ptr 051CC 61538000 5 6 REG 2009 LD R5 SP We'll need stack access during the call 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 197 (P&PCMD2) F 16 Command: DISK 051CD DC1013E0 @ 2010 CALL @VREAD 051CE 41524000 1 REG 2011 PARV R1 Disk address in R1 051CF 41574801 5 BASE 2012 PARV R5,PFBUFFER Where to put it 051D0 410030F3 2013 PAR SECFBIBUFF Buffer for the FBI 051D1 41440006 IMM 2014 PARV FBITSEC Ensure that it's a security block 051D2 400051D5 2015 PARL READERROR Error return 051D3 D013C000 7 REG 2016 INC R7 Read worked, do a success return 000051D4 2017 RETURN LABEL 051D4 5D1F8006 6 STAK 2018 LEAVE POP 2019 * --- 000051D5 2020 READERROR LABEL 051D5 60578804 1 6 BASE 2021 LD R1 SP,SEC2BLK Was the error on reading the 051D6 64578805 1 6 BASE 2022 CPR R1 SP,CURRENTBLK second security block? 051D7 FE0C51CA 2023 JNE TRYREAD No, try for the second one 051D8 5D1F8006 6 STAK 2024 LEAVE POP Do an error return 2025 * --- CURRENTBLK 00178805 F 16 1981= 2007s 2022 +DISKCBP 00003031 F 16 1990 2008 +FBITSEC 00000006 F 16 2014 +FBITVL 00000004 F 16 1996 PFBUFFER 00178801 F 16 1976= 1985s 1994 2012 PTRBUFFER 00178802 F 16 1977= 1986s 1998 READERROR 000051D5 F 16 2015a 2020= +READSECBLK 000051B9 F 16 1973 1984= RETURN 000051D4 F 16 1997a 2017= SEC1BLK 00178803 F 16 1978= 2001s 2006 SEC2BLK 00178804 F 16 1979= 2021 +SECBLKDAS 0000305A F 16 2002s +SECFBIBUFF 000030F3 F 16 1995a 2013a TRYREAD 000051CA F 16 2007= 2023j +VLSECB2DA 00000013 F 16 2000 +VLSECBDA 00000012 F 16 1999 +VOLLABELDA 00000001 F 16 1993 +VREAD 000013E0 F 16 1992 2010 2026 END 2027 2028 BLOCK 2029 ENTRY WRITESECBLK 2030 2031 BEGFRAME 00178801 6 BASE 2032 PFV BSS 1 Page file value for page containing sec blk 00178802 6 BASE 2033 ERRORCNT BSS 1 How many write errors we got 2034 ENDFRAME 2035 051D9 DD1F8003 6 STAK 2036 WRITESECBLK ENTR PUSH 051DA C0578801 6 BASE 2037 STPVL SP,PFV 2038 051DB EC178802 6 BASE 2039 STZ SP,ERRORCNT 051DC 6000305A 0 2040 LD R0 SECBLKDAS(0) Be sure FBI has correct block number 051DD 384030F3 1 2041 LEA R1 SECFBIBUFF 051DE E4085181 0 1 ZBM 2042 ST R0 R1,0/FBIDA 051DF 61538000 5 6 REG 2043 LD R5 SP 051E0 DC1013E1 @ 2044 CALL @VWRITE Write it behind door #1 051E1 4140305A 2045 PARV SECBLKDAS(0) 051E2 41574801 5 BASE 2046 PARV R5,PFV 051E3 410030F3 2047 PAR SECFBIBUFF 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 198 (P&PCMD2) F 16 Command: DISK 051E4 400051E6 2048 PARL ERROR1 051E5 FE0E51E7 2049 JMP WRITE2ND 2050 * --- 000051E6 2051 ERROR1 LABEL 051E6 EDD78802 6 BASE 2052 STW SP,ERRORCNT 2053 * \ / 000051E7 2054 WRITE2ND LABEL 051E7 6000305B 0 2055 LD R0 SECBLKDAS(1) Point FBI to the second block 051E8 384030F3 1 2056 LEA R1 SECFBIBUFF 051E9 E4085181 0 1 ZBM 2057 ST R0 R1,0/FBIDA 051EA 61538000 5 6 REG 2058 LD R5 SP 051EB DC1013E1 @ 2059 CALL @VWRITE and write it again 051EC 4140305B 2060 PARV SECBLKDAS(1) 051ED 41574801 5 BASE 2061 PARV R5,PFV 051EE 410030F3 2062 PAR SECFBIBUFF 051EF 400051F1 2063 PARL ERROR2 051F0 FE0E51F2 2064 JMP CHECKERRS 2065 * --- 000051F1 2066 ERROR2 LABEL 051F1 D0178802 6 BASE 2067 INC SP,ERRORCNT 2068 * \ / 000051F2 2069 CHECKERRS LABEL 051F2 60178802 0 6 BASE 2070 LD R0 SP,ERRORCNT 051F3 FA0251F8 0 2071 JEQZ R0 BYE 051F4 D0520000 0 REG 2072 DEC R0 051F5 60605215 1 0 2073 LD R1 MSGPTRS(R0) 051F6 DC1013F9 @ 2074 CALL @VPREPOUT 051F7 40164400 1 @R 2075 PARL @R1 2076 000051F8 2077 BYE LABEL 051F8 5D1F8003 6 STAK 2078 LEAVE POP 2079 * --- 051F9 20576172 2080 MSG1 TEXTZ " Warning: One error encountered while writing security blocks" 05209 20457272 2081 MSG2 TEXTZ " Error: Failure on both security block writes" 05215 000051F9 2082 MSGPTRS PTR MSG1 05216 00005209 2083 PTR MSG2 2084 BYE 000051F8 F 16 2071j 2077= CHECKERRS 000051F2 F 16 2064j 2069= ERROR1 000051E6 F 16 2048a 2051= ERROR2 000051F1 F 16 2063a 2066= ERRORCNT 00178802 F 16 2033= 2039s 2052s 2067s 2070 +FBIDA 00089181 F 16 2042s 2057s MSG1 000051F9 F 16 2080= 2082a MSG2 00005209 F 16 2081= 2083a MSGPTRS 00005215 F 16 2073 2082= PFV 00178801 F 16 2032= 2037s 2046 2061 +SECBLKDAS 0000305A F 16 2040 2045 2055 2060 +SECFBIBUFF 000030F3 F 16 2041a 2047a 2056a 2062a +VPREPOUT 000013F9 F 16 2074 +VWRITE 000013E1 F 16 2044 2059 WRITE2ND 000051E7 F 16 2049j 2054= +WRITESECBLK 000051D9 F 16 2029 2036= 2085 END 2086 2087 ORG ((DISPW MA 0)/WPP+1)*WPP 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 199 (P&PCMD2) F 16 Command: DISK 2088 02005400 2089 CHRDATABLK BSSC 0 00005400 2090 DATABLK BSS WPP disk buffer for data blocks 00005800 2091 CCBBLK BSS WPP disk buffer for code control blocks 00005C00 2092 CMPRBLK BSS WPP disk buffer for compare block 2093 ACCTFILE MACRO F 12 65= ADDRESS 00000011 F 3 26= 35e 36e 37e 38e 134e 232 233 ADTBLOCK 000030A1 F 0 273= F 16 1379 1390s 1418 1423 1469 1474s 1488 1496s 1540s ADTCHAIN 000030A2 F 0 276= F 16 1388s 1491s ADTECNT 000000C8 F 7 1505= 1511 F 16 1900 ADTLIST 00000000 F 7 1511= ADTOFFSET 000030A5 F 0 280= F 16 1392s 1439 1456s 1462a 1471s ADTPRIOR 000030A3 F 0 278= F 16 1391s 1427 1470s 1475 1481a 1497s 1529a AFTINFORD MACRO F 12 169= ASCANLIST 000030A4 F 0 279= F 16 1398s 1410s 1430 ASSERTEQ MACRO F 4 221= AUTHDSK 0016C804 F 7 1756= AUTHDSKA 0016C805 F 7 1757= AUTHENTBG 00000004 F 7 1749= AUTHINFORD MACRO F 12 187= AUTHLELEN 0000000C F 7 1762= AUTHLENTRY 00000BB0 F 7 1752= 1762e AUTHSDSK 0016C806 F 7 1758= AUTHSDSKA 0016C807 F 7 1759= AUTHTIME 00000000 F 7 1746= AUTHTIMEA 00000001 F 7 1747= AUTHVNAME 0016C800 F 7 1753= BADFORM 00003451 F 0 387 484= F 13 1685j 1974j 1985j 2000j 2103j F 15 128j 132j 135j 438j 882j 895j 899j 916j 932j 941j 991j 1060j 1270j 1273j 1276j 1282j 1289j 1469j 1471j 1502j 1504j 1559j 1562j 1565j 1580j 1593j F 16 62j 361j 422j 430j 549j 858j 859j 864j 865j 956j 957j 962j 963j 1052j 1127j 1128j 1263j 1264j 1305j 1404j 1408j 1565j 1569j BADFORMM 0000300A F 0 184= 486a F 13 992a BADMORALS 00004D5D F 16 192j 400 506j 600= BEFOREPTR 0000301A F 0 201= 472s 479 F 15 37s 124 979s 1056 BEGFRAME2 MACRO F 4 122= BEGINNING 00003400 F 0 158a 385 395= BEGINNING2 00003432 F 0 159a 177j 384 441= BFDCHKSEG 0000000A F 5 665= BFDEF18 00000230 F 5 733= BFDEF9A 00000240 F 5 739= BFDFNCLFLT 00000011 F 5 748= BFDFNCLOFS 00000044 F 5 759= BFDFNDSE 00000081 F 5 761= BFDFNDSINT 00000028 F 5 756= BFDFNDSL 00000082 F 5 762= BFDFNENINT 00000024 F 5 755= BFDFNOFSB 00000042 F 5 758= BFDFNOFSF 00000041 F 5 757= BFDFNRDS 00000084 F 5 763= BFDFNRESET 00000048 F 5 760= BFDFNSAFE 00000020 F 5 752= BFDFNSISE 00000021 F 5 753= BFDFNSOLNT 00000014 F 5 750= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 200 F 0 Cref listing BFDFNUISE 00000022 F 5 754= BFDFNUOLNT 00000018 F 5 751= BFDFNZERO 00000012 F 5 749= BFDFORMAT 00000260 F 5 774= BFDFORMATW F0783C1E F 5 775= BFDFUNC 00000220 F 5 746= BFDIDSTEST 00002080 F 5 669= BFDINTBIT 00003010 F 5 787= BFDINTERNS 00000250 F 5 742= BFDMAGICHD 000000FF F 5 809= BFDNUMSEGS 0000000A F 5 664= BFDPRESENT 00002080 F 5 741= BFDREAD 00000230 F 5 765= BFDREADY 00001080 F 5 740= BFDSACYL 00000100 F 5 681= BFDSAHEAD 00002080 F 5 682= BFDSASEC 00003080 F 5 683= BFDSEEK 00000210 F 5 679= BFDSEGSIZE 00000073 F 5 663= BFDSELECT 00000200 F 5 744= BFDSELECTB 00000008 F 5 777= BFDSS 00000220 F 5 685= BFDSSCEOV 00003610 F 5 717= BFDSSDNUM 00002030 F 5 699= BFDSSEBITS 00001080 F 5 694= BFDSSERRCD 00003840 F 5 720= BFDSSFAULT 00000E10 F 5 693= BFDSSHDECD 00003030 F 5 707= BFDSSIFPE 00002C10 F 5 704= BFDSSLOSTD 00002A10 F 5 703= BFDSSNSAFE 00000410 F 5 688= BFDSSOLINT 00000010 F 5 686= BFDSSONCYL 00000A10 F 5 691= BFDSSRDY 00000810 F 5 690= BFDSSRSPER 00002E10 F 5 705= BFDSSSKERR 00000C10 F 5 692= BFDSSWCERR 00002810 F 5 702= BFDSSWPROT 00000610 F 5 689= BFDUNITS 00000008 F 5 666= BFDUNLDCYL 000003FF F 5 810= BFDWRCH 00000250 F 5 772= BFDWRITE 00000240 F 5 770= BKUPINFORD MACRO F 12 668= BLANK 00000020 F 0 348= F 13 1080 1731 1757 BLANKS 00003100 F 0 337= F 13 658 BLKMSGON 0000308E F 0 251= F 13 1669s 2201 2206s F 16 784 BLOCKCNT 0000308F F 0 252= F 13 1670s 2146s 2172 2333a F 16 779 BLOCKS 00003070 F 0 227= F 13 391a 400a 402a 411a 413a 415a 424a 426a 428a 430a F 15 69s 99s 172s BLOCKSIZE 00000400 F 7 6= 933e 1233e 1572e 2210e 2223e BOOTDA 00000002 F 7 981= BOOTLOC 00001000 F 3 154= 155e BOOTREV 00000001 F 7 985= BREAKFLAG 00003079 F 0 236= 420s 492s F 13 2508s BRMESS 00003105 F 0 358= F 13 1000a F 16 602a BTRXACDE 00000030 F 7 928= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 201 F 0 Cref listing BTRXDATE 00000001 F 7 930= F 16 1716s BTRXECNT 00000200 F 7 933= BTRXEL 00000000 F 7 922= 931e F 16 1695 1697 1708s 1710s BTRXFSDE 00000040 F 7 929= F 16 1709 BTRXLCDE 00000010 F 7 926= BTRXLNTH 00000002 F 7 931= 933e F 16 1699 1700a BTRXREASON 00000080 F 7 923= F 16 1695 1710s BTRXRTDE 00000020 F 7 927= BUF 0000301B F 0 203= 466a 500a 505a 537 544a F 13 1910a 1918a 2450a 2454a F 15 1454a BUFC 0200301B F 0 204= 205a 206a BUFL 00000050 F 0 202= 204 465 499 502 F 13 1909 1912 2449 2452 F 15 1453 1461 BUFP 0000302F F 0 205= 504s F 13 1917s 2453s F 15 1462s 1463 BUSCIP 60000000 F 5 39= BUSCREAD 20000000 F 5 35= BUSCREAD2 30000000 F 5 36= BUSCRMW 10000000 F 5 34= BUSCST 50000000 F 5 38= BUSCWRITE 00000000 F 5 33= BUSCWRU 40000000 F 5 37= BYTEDISP 000028C0 F 7 55= 2365e 2470e CACCOUNT 00004CD3 F 0 604a F 16 351 356= CAIMABORT 0000000D F 3 261= CAIMALLXR 00000007 F 3 255= CAIMARITH 00000003 F 3 251= CAIMBREAK 00000006 F 0 241e F 3 254= CAIMCALL 00000002 F 3 250= CAIMCKBDS 00000004 F 3 252= CAIMGUNIT 0000000E F 3 262= CAIMINST 00000001 F 3 249= CAIMMPV 00000005 F 3 253= CAIMMSG 0000000B F 3 259= CAIMNEPATH 00000009 F 3 257= CAIMNETERM 00000008 F 3 256= CAIMTIME 0000000A F 3 258= CAIMVMF 0000000C F 3 260= CAINTADR 0016080A F 3 244= CAINTENABL 0008001B F 3 247= CAINTMASK 0016080B F 3 245= 247e CALINK 0016080C F 3 266= CALNTH 0000000F F 3 274= 275e CALOG 00000004 F 3 275= CAMSR 00160801 F 3 234= CANUMREGS 0000000C F 3 265= CANUMUREGS 0000000A F 3 264= CAPC 00081F10 F 3 233= 265e F 7 2538e CAPSR 000800F0 F 3 232= CAR0 00160802 F 3 235= 264e F 7 2539e CAR1 00160803 F 3 236= CAR2 00160804 F 3 237= CAR3 00160805 F 3 238= CAR4 00160806 F 3 239= CAR5 00160807 F 3 240= CAR6 00160808 F 3 241= CAR7 00160809 F 3 242= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 202 F 0 Cref listing CASCAN 00004F9B F 0 605a F 16 1351 1360= CASTACKPTR 0016080D F 3 268= CAXOPERAND 0016080E F 3 272= CCB2TRANS 0016080A F 7 2539= CCBALWFRC 00003E10 F 7 2530= CCBBACKUP 00080421 F 7 2529= CCBBLK 00005800 F 0 399a 445 F 13 1147 F 15 168 180 183s 200a F 16 63 252 1593a 2091= CCBDIVFRC 00003A10 F 7 2532= CCBFLD2TRN 00000000 F 10 578= CCBFLDBKUP 0000001A F 10 576= CCBFLDIAR 0000000B F 10 565= CCBFLDIMR 0000000A F 10 564= CCBFLDMGR 00000019 F 10 575= CCBFLDMNTR 00000016 F 10 572= CCBFLDMNTW 00000017 F 10 573= CCBFLDOPR 00000018 F 10 574= CCBFLDOWND 00000010 F 10 566= CCBFLDPC 00000008 F 10 562= 577e CCBFLDPSR 00000009 F 10 563= CCBFLDPTRN 00000008 F 10 577= CCBFLDR0 00000000 F 10 554= 578e CCBFLDR1 00000001 F 10 555= CCBFLDR2 00000002 F 10 556= CCBFLDR3 00000003 F 10 557= CCBFLDR4 00000004 F 10 558= CCBFLDR5 00000005 F 10 559= CCBFLDR6 00000006 F 10 560= CCBFLDR7 00000007 F 10 561= CCBFLDRG1 00000011 F 10 567= CCBFLDRG2 00000012 F 10 568= CCBFLDRG3 00000013 F 10 569= CCBFLDRG4 00000014 F 10 570= CCBFLDRG5 00000015 F 10 571= CCBINFO 000003E8 F 7 2552= CCBINFOL 00000018 F 7 2541= 2545e CCBINFPROT 00000C39 F 7 2517= 2541e 2542a CCBMAINTR 00083210 F 7 2524= CCBMAINTW 00083410 F 7 2525= CCBMANAGR 00083A40 F 7 2527= CCBMAXPAGE 000003E8 F 7 2545= 2547 F 13 1138 F 15 194 F 16 61 149x CCBOPREQ 00083620 F 7 2526= CCBOWNDIR 00080211 F 7 2528= CCBOWNFRC 00003C10 F 7 2531= CCBPAGE0 00000000 F 7 2546= CCBPERMIT 00160800 F 7 2518= 2536 CCBPREGS 00160808 F 7 2537= 2538e 2539e CCBPRJFRC 00003810 F 7 2533= CCBPROTECT 00000010 F 7 2551= CCBPTRANS 00081F18 F 7 2538= CCBRSTCTG1 00080050 F 7 2519= CCBRSTCTG2 00080A50 F 7 2520= CCBRSTCTG3 00081450 F 7 2521= CCBRSTCTG4 00081E50 F 7 2522= CCBRSTCTG5 00082850 F 7 2523= CCBUSRFRC 00003610 F 7 2534= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 203 F 0 Cref listing CCKSUM 00003B39 F 0 606a F 15 28 36= CCLOSEGAP 00004E09 F 0 607a F 16 933 944= CCLOSEGAPB 00004E07 F 0 609a F 16 934 940= CCMPR 00003BDE F 0 610a F 15 265 267= CCOMMAND 00003C2B F 0 611a F 15 363 365= CDISK 00004E58 F 0 480j 614a F 16 1113 1124= CDISKNAME 00004E5C F 16 1114 1129= 1321j CDISPLAY 000049F0 F 0 541j 545j 612a 615a F 15 1247 1266= CDISPLONG 00004AB2 F 0 616a F 15 1248 1554= CDNSCAN 00004CE2 F 0 617a F 16 397 402= CDSCAN 00004CE4 F 0 619a F 16 398 407= CEXIT 000048FF F 0 436j 620a F 15 831 833= CFIND 00004939 F 0 621a F 15 875 939= CFINDSN 00004908 F 0 622a F 15 876 878= CH0 00000080 F 0 538 F 3 43= CH1 00001080 F 0 538 F 3 44= F 16 697s 734s CH2 00002080 F 3 45= F 15 1314a F 16 706s 736s CH3 00003080 F 3 46= F 16 708s 738s CHARDISP 00003090 F 0 253= F 13 1587s 1598s 1603 1671s 1734 1741s 1780s 1788s 1797s 1808s 1855 2283 F 16 701 729s 778 CHAROFFST 00003091 F 0 254= F 13 2286s 2291a 2324s 2341a CHARPTR 000030FF F 0 336= F 13 1592 1789 1857a CHECKFILE 0000356A F 13 148 153= F 15 55 151 271 1004 1052 F 16 1133 CHELP 00003C5F F 0 624a F 15 431 435= CHRDATABLK 02005400 F 0 336a F 16 2089= CIAAEOP 00003810 F 5 894= CIABOARDS 00000008 F 5 884= CIABRDF 00003430 F 5 886= CIACHARS 00000100 F 5 896= CIAEOP 00003A10 F 5 893= CIAERR 00003610 F 5 895= CIAERROR 00000203 F 5 903= CIAFULL 00003C10 F 5 892= CIAINTACK 00000201 F 5 898= CIAINTMASK 00000202 F 5 900= CIAMODE 00000209 F 5 940= CIAMODEM 00000002 F 5 943= CIAMODEN 00000000 F 5 941= CIAMODET 00000001 F 5 942= CIAPBAUD 00002100 F 5 990= CIAPECHO 00001410 F 5 984= CIAPFI 00001810 F 5 986= CIAPFO 00001A10 F 5 987= CIAPICH 00002080 F 5 949= CIAPMODM 00003E10 F 5 951= CIAPOCH 00001080 F 5 948= CIAPORT 00000280 F 5 945= CIAPPBRD 00000008 F 5 885= CIAPSIB 00001C10 F 5 988= CIAPSOB 00001E10 F 5 989= CIAPSTAT 00000080 F 5 947= CIAPSTS 00001610 F 5 985= CIAPWAIT 00003C10 F 5 950= CIASDREAD 00000207 F 5 932= CIASETTICK 00000206 F 5 926= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 204 F 0 Cref listing CIASREAD 00000204 F 5 922= CIASRWACK 00000080 F 5 934= CIASRWCNT 00002100 F 5 936= CIASRWMSK 00001080 F 5 935= CIASWRITE 00000205 F 5 924= CIATICK 00003E10 F 5 891= CIATICKPSEC 000001C6 F 5 929= 930e CIATICKTIME 0000002D F 5 930= CIATPS 0000000A F 5 928= 930e CIATRMBUFL 00000100 F 5 887= CIAVERSION 00000208 F 5 938= CIAWHYINT 00000201 F 5 889= CIX 00001800 F 6 234= 235e F 13 2492 CKSUMBLK 00003A87 F 13 2375 2380= F 15 66 100 177 199 CLOAD 0000493C F 0 625a F 15 967 972= CLRTBIT MACRO F 4 66= CMERGE 000049C5 F 0 626a F 15 1148 1152= CMPRBLK 00005C00 F 0 401a 447 F 15 286a 306a 328a 1162a 1180a F 16 885a 889a 984a 988a 1282a 1289a 1294a 1303a 1308a 1365a 1389 1494 2092= CNSCAN 00004C76 F 0 627a F 16 146 151= CODES 00003744 F 13 771 795 824= F 15 1790 COLON 0000003A F 0 349= F 15 43 1470 1503 1724 COMMTAB 0000347E F 0 388 514 557= 601e F 15 367a 368a 369a 370a 374a 375a 376a 377a 381a 382a 383a 384a 388a 389a 390a 391a 395a 396a 397a 398a 402a 403a 404a 405a 409a 410a 411a 412a 443 COMMTABL 00000020 F 0 389 510 601= F 15 439 CONAREA 00000000 F 3 231= 274e 276a CONFINFORD MACRO F 12 210= CONTENTS 000030CE F 0 319= F 13 1409s 1431a F 15 1254 1379s 1382a F 16 303s 322a CONTROLCHR 020030A6 F 0 285= 291a COPENGAP 00004DDB F 0 629a F 16 835 843= COPENGAPB 00004DDE F 0 630a F 16 836 848= CPP 00001000 F 3 34= F 5 1154e 1159e 1168e F 13 1589 1597 1736 1771 1798 1802 2148 F 15 287 308 320 1010 1163 F 16 72 875 972 1302 1306 1584 CPRBLOCK 000030BD F 0 295= 462s F 15 276 284s 292 297 312s 327a 337 CPU4 00000001 F 5 75= CPUA 00000002 F 5 224= CPUCCA 0000000A F 5 216= CPUCOFFSET 00030000 F 5 229= CPUI 00000001 F 5 223= CPUIAPR 00000004 F 5 235= CPUMSR 00000009 F 5 215= CPUOOFFSET 00020000 F 5 221= CPUPAGE 00000400 F 6 217= 218e 260a CPUPC 00000008 F 5 214= CPUPFOFSET 00010000 F 5 219= CPUPMS 00000004 F 5 226= CPUPSR 00000000 F 5 222= CPUPTCHCMD 00000703 F 5 238= CPUQ 00000003 F 5 225= CPUREG 00000000 F 5 213= CPUREGOFST 00000000 F 5 212= CPURUN 00000000 F 5 231= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 205 F 0 Cref listing CPUSCYCLE 00000002 F 5 233= CPUSSTEP 00000003 F 5 234= CPUSTOP 00000001 F 5 232= CPUUCODELD 00000700 F 5 237= CPUUS 00000005 F 5 227= CPW 00000004 F 3 31= 34e F 5 1159e F 7 1174 2205 2206 F 13 661 665s F 15 139 307 888 891 1071 F 16 844 945 1293 CR 0000000D F 0 347= F 15 1480 1637 CRANDALL 00000400 F 7 5= 2642a CRETURN 00004E31 F 0 631a F 16 1024 1030= CRLINEFD 0000308D F 0 250= F 13 1558a 1932a CRLINFEED 000038F3 F 13 1551 1556= 2073 2190 2193 2330 2338 F 16 787 CSCAN 00004C78 F 0 632a F 16 147 156= CSSCAN 00004D74 F 0 634a F 16 677 685= CSUB 00005070 F 0 635a F 16 1556 1562= CTDIOSIZE 000047F8 F 5 1159= CUSTNUM 00000100 F 7 1145= CVOLUME 00004F33 F 0 636a F 16 1244 1251= CWRITE 00004E36 F 0 637a F 16 1025 1048= DATABLK 00005400 F 0 397a 443 F 13 1339 1368 2147a F 15 67a 101a 178a 305a 326a 986 1009a 1179a F 16 34a 71a 87a 882a 890a 897a 980a 989a 995a 1444 1585a 1588a 1592a 1599a 1603a 2090= DATEHORD 00082800 F 7 164= F 16 1715 DCBBTRAX 00081187 F 9 27= DCBFILLADR 00160802 F 9 15= 28e DCBFILLLEN 00000006 F 9 28= DCBLEN 00000008 F 0 211 F 9 30= DCBLUN 0016001C F 9 26= F 16 1587 1595 DCBMAIMNT 00080216 F 9 22= F 13 203 DCBNORETRY 00080416 F 9 23= DCBNOSUBS 00080016 F 9 21= F 15 293s 315s 1016s 1055s 1169s 1191s F 16 1057s DCBPFILE 00160800 F 9 13= F 16 1213a 1214a DCBSCSI 00080816 F 9 25= F 16 1182 DCBSECPTRK 00160802 F 9 16= F 16 1188s 1200s 1216a DCBSUBLIST 00160804 F 9 18= F 13 193 F 16 1672 DCBTRKPCYL 00160803 F 9 17= F 16 1191s 1207s 1217a DCBUNIT 00160801 F 9 14= F 16 1215a DCBVERIFY 00080616 F 9 24= DCBVOLSIZE 00160805 F 9 19= F 16 446 1374 1567 DCBWORD 00160806 F 9 20= 21e 22e 23e 24e 25e DEFBIT 00003610 F 0 354= F 13 959s 975s F 16 472j 1393j DESCRBLK 00003824 F 13 1452 1459= F 15 1036 F 16 593 DEVBIT 00000200 F 5 599= DEVERPFE 000000E0 F 10 210= DEVERPIBO 000000E2 F 10 212= DEVERPPE 000000E1 F 10 211= DEVERTRE 000000E3 F 10 214= DEVINFORD MACRO F 12 237= DIRACCESS 0008104C F 0 173= DIRACCOUNT 00160805 F 0 173= DIRCREATD 00160804 F 0 173= DIRCUSE 0008050D F 0 173= DIREINFO 00000400 F 0 173e 173= 173a DIRENTLEN 00160800 F 0 173= DIRENTWIDE 00000011 F 0 173= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 206 F 0 Cref listing DIREXT 00160803 F 0 173= DIRFBC 0008381C F 0 173= DIRFLAGS 00160801 F 0 173e 173e 173e 173= DIRFLOG 00083E1C F 0 173= DIRFOREIGN 00080211 F 0 173= DIRFWWSC 0008361C F 0 173= DIRGHOST 00083A1C F 0 173= DIRHINFO 00000400 F 0 173= 173e 173a DIRHLNTH 00160800 F 0 173= DIRHWIDE 00000008 F 0 173= F 16 1293 DIRINFORD MACRO F 0 173 F 11 60= DIRLACSD 00160805 F 0 173= DIRLBKUPD 00160807 F 0 173= DIRLMODD 00160806 F 0 173= DIRLRAF 0008021D F 0 173= DIRMWACS 0008010A F 0 173= DIRNAME 00160801 F 0 173= DIRNETWORK 00080411 F 0 173= DIRNOBKUP 0008321C F 0 173= DIRPRGFLG 0008301C F 0 173= DIRPRGINT 00160032 F 0 173= DIRPROJECT 00160807 F 0 173= DIRRACS 00080109 F 0 173= DIRRAFTYPE 0008182C F 0 173= DIRRCVRD 0008341C F 0 173= DIRROOTBLK 0008118B F 0 173= DIRSERNO 0016080F F 0 173e 173= DIRSHADOW 00080011 F 0 173= DIRSYSTEM 00160804 F 0 173= DIRTFL 0008218A F 0 173= DIRTOTRACS 00080108 F 0 173= DIRTOTWACS 00082108 F 0 173= DIRTRANS 00083C1C F 0 173= DIRTYPE 00160030 F 0 173= DIRUNITNM 00160810 F 0 173= DIRUSRFLD 0016080E F 0 173= DIRVOLUME 00160802 F 0 173= F 16 1298 DIRWACS 00082109 F 0 173= DISBLKM 00004A20 F 13 1426a F 15 1249 1332a 1335= DISDATA2 0000310A F 0 359= F 13 1432a F 16 323a DISFBIM 00004A2A F 13 1418a F 15 1250 1346= 1354a DISFILEM 00004A27 F 15 1251 1340a 1344= F 16 319a DISKCBB 00003032 F 0 211= F 16 1142a 1148a 1188s 1191s 1200s 1207s DISKCBP 00003031 F 0 210= 455s F 13 54 494 1253 2150 F 15 144 155 210 290 314 903 1013 1054 1062 1075 1166 1190 F 16 75 445 1034 1054 1141 1152s 1174s 1181 1211 1373 1416 1566 1586 1594 1990 2008 DISKCTLBLK 00000400 F 9 12= 30e 31a DISKERROUT 0000350E F 13 74 98 104= 1272 2232 F 15 240 338 1031 1131 1197 F 16 95 1075 DISPBLKLOC 00003811 F 13 1403 1408= F 16 310 580 DISPFIELD 00002CA0 F 3 150= DMASK 000030CD F 0 313= F 16 491s 495s DOFBICHECK 000036D5 F 13 596 602= 1263 F 15 1035 DOPTIONS 000030C5 F 0 304= F 16 417s 425s 431s 560 581 608 DOUBTIME 000030CE F 0 318= 319e 320e 321e 322a F 15 1429s 1434s 1441s 1444a 1500s 1518 1526 1694s 1702s 1711s 1714 2069a 2081s 2085 2091 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 207 F 0 Cref listing DPACKER 00003720 F 13 732 737= F 15 1498 DPATTERN 000030CC F 0 312= F 16 489s 521 DSKLIM 00092187 F 7 1614= DSKSAVL 00090186 F 7 1612= DSKUSD 00091188 F 7 1615= DSKWARN 00093186 F 7 1613= DVCTBFD 00000001 F 5 613= DVCTCOMM 00000008 F 5 615= DVCTCTC 0000000A F 5 617= DVCTLPC 00000002 F 5 614= DVCTMTC 00000009 F 5 616= DVCTSDC 0000000C F 5 619= DVCTVTC 0000000B F 5 618= DVSNDISP 0000FA00 F 7 93= 95e DVSNPART1 00000170 F 7 94= DVSNPART2 0000007D F 7 95= DWRUDD 00002080 F 5 623= DWRUMREV 00001080 F 5 621= DWRUTYPE 00000080 F 5 611= ECBLKREUS 0000000D F 9 74= ECCHAN 00000003 F 9 64= ECDA 0000000C F 9 73= ECDATA 00000001 F 9 62= ECFBI 00000002 F 9 63= F 13 2228 ECFBIACCT 00000009 F 9 70= ECFBIBDAT 00000019 F 9 86= ECFBIBLNE 00000011 F 9 78= ECFBIBLNK 0000000B F 9 72= ECFBIFDAT 00000013 F 9 80= ECFBIFLAG 0000000F F 9 76= ECFBIFLNK 0000000E F 9 75= ECFBIFSN 0000000A F 9 71= ECFBINBAN 00000015 F 9 82= ECFBINBFS 00000018 F 9 85= ECFBINBPJ 00000016 F 9 83= ECFBIODAT 00000012 F 9 79= ECFBIPROJ 00000017 F 9 84= ECFBIRBN 00000014 F 9 81= ECFBISUB 00000010 F 9 77= ECFBITYPE 00000008 F 9 69= ECMPE 00000007 F 9 68= ECNOCODE 00000000 F 9 61= ECNOTRDY 00000005 F 9 66= ECRECBAD 0000001D F 9 90= ECSAFBAD 0000001C F 9 89= ECSEEK 00000004 F 9 65= ECSUBENT 0000001B F 9 88= ECUDIRORD 0000001A F 9 87= ECWRPROT 00000006 F 9 67= ENDBLK 00003093 F 0 256= F 16 772 ENDBYTE 00003092 F 0 255= 256e F 13 1690s F 16 781 ENDOUTBUF 420030B9 F 0 287= 290a ERRORFILE MACRO F 12 295= FBIACCT 00168805 F 7 780= F 13 1483a FBIBLINK 00089182 F 7 749= F 13 2158 F 16 1426 1528a 1919s FBIBUFF 000030D2 F 0 326= F 13 58a 605 616a 1257a 1322 1324 1327 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 208 F 0 Cref listing 1344 1370 1460a 1478a 1600a 1777a 1805a 2154a 2157a 2170a 2211a 2239a F 15 994 1022a 1079a F 16 44a 79a 1064a 1420a 1425a 1460a 1472a 1527a 1733a 1736a 1765a FBIBUFF2 000030DD F 0 327= F 15 159a 214a FBIBUFF3 000030E8 F 0 328= F 15 299a 1175a FBICKSUM 0016880A F 7 784= FBICSMASK FFE00000 F 7 788= F 13 604 FBIDA 00089181 F 7 747= F 13 617 622a 2213a 2241a F 16 1461a 1742 1746s 1922 1936 2042s 2057s FBIDEFFLAGS 00088221 F 7 746= FBIFLAGS 00088041 F 7 740= 741e 742e 744e 745e 746e FBIFLINK 00089180 F 7 738= F 13 1601 1778 1806 F 16 1473 1910 FBIGMASK FFC00000 F 7 787= FBILCD 00168803 F 7 777= FBILNTH 0000000B F 0 326 327 328 329 F 7 7= 783 786e 787e 788e F 13 851 1038 1049 1414 F 16 41 44a 163 458 1642 1874 FBILOG 00000004 F 7 786= FBIMEMERR 00088611 F 7 745= FBINAMET 00003750 F 13 844 855 875= 1041 1414 F 15 1350 FBINOREWRIT 00088011 F 7 741= FBINOSUB 00088411 F 7 744= F 16 1737 FBIPOINTRS 00001C80 F 6 239= FBIPROJ 00168807 F 7 781= F 13 1484a FBIRELBLK 00089184 F 7 779= F 13 2171 FBISERNO 00168808 F 7 782= F 13 1485a 1486a FBITADT 00000007 F 7 759= F 16 1421 1898 1917 FBITAFT 00000010 F 7 768= FBITASLB 00000011 F 7 769= FBITAUTLB 00000015 F 7 773= FBITBOOT 00000003 F 7 755= FBITBTRX 00000002 F 7 754= F 16 1689 FBITCCB 00000013 F 7 771= F 15 160 215 1080 FBITCODED 00000014 F 7 772= F 16 80 FBITESTB 0000007E F 7 774= FBITFREE 0000007F F 7 775= F 13 1462 FBITFSLB 00000012 F 7 770= FBITIDX 00000008 F 7 760= FBITLRAF 0000000D F 7 765= FBITPL 00000001 F 7 753= F 16 1665 FBITRAFD 0000000F F 7 767= FBITSAF 0000000C F 7 764= F 13 2155 FBITSEC 00000006 F 7 758= F 16 2014 FBITSRAF 0000000E F 7 766= FBITSUBS 00000005 F 7 757= F 16 1776 FBITSYS 0000000B F 7 763= FBITUDIR1 00000009 F 7 761= FBITUDIR2 0000000A F 7 762= FBITVL 00000004 F 7 756= F 16 1656 1996 FBITYPE 00088080 F 7 734= F 13 1461 FBIWCHK 00088211 F 7 742= FBIWORDA 00168800 F 7 731= 734e 738e 783 FBIWORDB 00168801 F 7 732= 740e 747e FBIWORDC 00168802 F 7 733= 749e FBIWORDE 00168804 F 7 778= 779e FDACCESSES 0016C80C F 7 1847= FDACSAO 00000002 F 7 1789= FDACSLK 0008D040 F 7 1780= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 209 F 0 Cref listing FDACSMW 00000004 F 7 1791= FDACSNWB 00003E10 F 7 1792= FDACSRO 00000001 F 7 1788= FDACSRW 00000000 F 7 1787= FDACSXO 00000003 F 7 1790= FDCREDAT 0016C80F F 7 1854= FDCUSE 0008C101 F 7 1830= FDDA 0008D185 F 7 1835= F 13 537 540a 1691 F 15 152 1068 FDEND 0016C811 F 7 1856= FDEPP 0016C810 F 7 1855= F 13 1689 FDEPROT 00000BBC F 7 1775= 1860e FDET 0008EA60 F 7 1801= F 15 148 1066 FDEXTEN 0016C804 F 7 1833= F 15 910 FDFBD 0008DE10 F 7 1793= FDFLOG 0008FA10 F 7 1823= FDFWWSC 0008E610 F 7 1799= FDGHOST 0008F610 F 7 1821= FDLACC 0016C808 F 7 1842= FDLBU 0016C809 F 7 1843= FDLCD 0016C807 F 7 1841= FDLEN 0008D186 F 7 1838= FDLNTH 00000018 F 7 1860= 2211e 2212e 2223e 2234e 2238e FDLRAF 0008E810 F 7 1800= FDMWACS 0008E2FC F 7 1850= FDNAME 0016C802 F 7 1832= F 15 907 FDNBU 0008E010 F 7 1794= FDPRIV 0008D830 F 7 1786= FDPURG 0008E410 F 7 1796= FDPURGE 0016C018 F 7 1836= FDRACS 0008C10C F 7 1848= FDRAFTYPE 0008FC20 F 7 1824= FDRFB 0008E210 F 7 1795= FDRUSE 0008C10D F 7 1851= FDSERNO 0016C80A F 7 1844= FDSHL 0016C814 F 7 1858= FDSTART 0016C800 F 7 1776= 1857 FDSUN 0016C000 F 7 1779= FDTRANS 0008F810 F 7 1822= FDUSRFLD 0016C80E F 7 1853= FDWACS 0008E01C F 7 1849= FDWUSE 0008E10D F 7 1852= FILAEOD 0000000B F 7 2362= FILAEODB 00003C10 F 7 2356= 2362e FILEFLAG 0000303A F 0 215= 458s F 13 29 154 157s F 15 94 153s 157 212 239 241s 1069s 1077 1085a 1093 1130 1132s 1155 1395 1426 F 16 26 164 193 304 508s 851 949 FILENAME 0000303C F 0 218= F 13 337a 487a 493a F 15 125a 138a 203a 227a 879a 887a 889a 896s 900s 902a 908s 911s 913a 1057a 1061a 1070a 1084a 1121a F 16 357a 362 363 364 FILENMLN 0000000F F 0 217= 218 219 F 15 139 1071 FILEODB 00003E10 F 7 2355= 2361e 2362e FILEOF 00000008 F 7 2360= FILESTAT MACRO F 11 143= FILNEOD 00000009 F 7 2361= FILREODB 00003A10 F 7 2357= FILRLEN 00001B30 F 7 2350= F 13 1724a 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 210 F 0 Cref listing FILSFLAGB 00003810 F 7 2359= 2360e 2361e 2362e FILTYPE 00001040 F 7 2343= F 13 1836a FINDBLOCK 000037A0 F 13 1126 1135= F 16 278 FINDFIL 00003659 F 13 480 486= 1684 F 15 940 FINDTEXTZ 000035BB F 13 107 270 276= 331 1469 1474 F 16 1156 FIRSTBLOCK 00003074 F 0 228= 461s F 16 442a 505 537s 548s 578s 594 612s 619s 627s 1370a 1394 1447 1476 FIRSTLOC 000030C2 F 0 301= F 16 160a 191 211 221s 226s 231s 245 259s 286 292s 309s 316s 318a 332 336s FLDABSPG 000014C0 F 3 151= FLDADRS 00001F10 F 3 36= 40e FLDBITS 00001F60 F 3 42= FLDCHARS 00001F30 F 3 41= F 13 784s 965s 1085s F 15 46s 977s F 16 465s 479s FLDDEFS MACRO F 11 225= FLDMODE 00001450 F 3 39= 40e FLDMODEADR 00001560 F 3 40= FLDPAGE 00001E70 F 0 443 445 447 F 3 37= FLDRELOCB 00001C10 F 3 35= FNAMBLKLEN 0000000A F 9 100= FNBLKPROT 00000400 F 9 92= 100e 101a FOURSECSD 00005265 F 7 184= FOURSECSH 0000036E F 7 183= FOURSECSM 0000000E F 7 182= FRAGACCT 000001CD F 10 625= FRAGACCTT 000001CF F 10 630= FRAGBUSY 000001C9 F 10 622= FRAGCPUL 000001C0 F 10 613= FRAGCPUU 000001C1 F 10 614= FRAGDFLTR 000001D2 F 10 632= FRAGDSKL 000001C4 F 10 617= FRAGDSKU 000001C5 F 10 618= FRAGENCF 000001D3 F 10 638= FRAGFAC 000001CA F 10 623= FRAGINITP 000001CE F 10 627= FRAGPWAC 000001CB F 10 624= FRAGSAVL 000001C7 F 10 620= FRAGSERNO 000001D0 F 10 635= FRAGSHAD 000001D1 F 10 631= FRAGSSCF 000001C8 F 10 621= FRAGWARN 000001C6 F 10 619= FRAGWLCKL 000001C2 F 10 615= FRAGWLCKU 000001C3 F 10 616= FRALIAS 000001A0 F 10 598= FRASACCT 000001ED F 10 651= FRASACCTT 000001EF F 10 656= FRASCPUL 000001E0 F 10 641= FRASCPUU 000001E1 F 10 642= FRASDFLTR 000001F2 F 10 660= FRASDSKL 000001E4 F 10 645= FRASENCF 000001F3 F 10 663= FRASFAC 000001EA F 10 649= FRASINITP 000001EE F 10 653= FRASPASS 000001F0 F 10 658= FRASPWAC 000001EB F 10 650= FRASSAVL 000001E7 F 10 647= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 211 F 0 Cref listing FRASSSCF 000001E8 F 10 648= FRASWARN 000001E6 F 10 646= FRASWLCKL 000001E2 F 10 643= FRASWLCKU 000001E3 F 10 644= FRBKSP 00000016 F 10 297= FRBLKLIM 00000150 F 10 529= FRBLKUSED 00000151 F 10 532= FRCACCESS 000000C0 F 10 432= FRCATALOG 000000E0 F 10 454= F 16 1292 FRCG2TRANS 00000181 F 10 539= FRCGBCKUP 0000018C F 10 550= FRCGMANAGR 00000189 F 10 547= FRCGMANTR 0000018A F 10 548= FRCGMANTW 0000018B F 10 549= FRCGOPREQ 00000188 F 10 546= FRCGOWND 00000182 F 10 540= FRCGPTRANS 00000180 F 10 538= FRCGRG1 00000183 F 10 541= FRCGRG2 00000184 F 10 542= FRCGRG3 00000185 F 10 543= FRCGRG4 00000186 F 10 544= FRCGRG5 00000187 F 10 545= FRCHAIN 00000130 F 10 515= FRCHGTRANS 000000C1 F 10 433= FRCLEAR 00000011 F 10 292= FRCLOSE 00000060 F 10 388= F 16 1296 FRCLRVVFU 00000251 F 10 697= FRCONCP 00000133 F 10 521= FRCREATP 00000134 F 10 518= FRCS2TRANS 00000191 F 10 581= FRCSBCKUP 0000019C F 10 592= FRCSMANAGR 00000199 F 10 589= FRCSMANTR 0000019A F 10 590= FRCSMANTW 0000019B F 10 591= FRCSOPREQ 00000198 F 10 588= FRCSOWND 00000192 F 10 582= FRCSPTRANS 00000190 F 10 580= FRCSRG1 00000193 F 10 583= FRCSRG2 00000194 F 10 584= FRCSRG3 00000195 F 10 585= FRCSRG4 00000196 F 10 586= FRCSRG5 00000197 F 10 587= FRCYCLE 0000001D F 10 303= FRDELPAGE 00000098 F 10 419= FRDESTROY 00000170 F 10 535= FRDEVSTAT 0000001F F 10 305= FRECHOGET 00000242 F 10 692= FRECHOOFF 00000241 F 10 690= FRECHOUNIT 00000240 F 10 688= FREPP 0000001E F 10 304= FREQUIP 00000050 F 10 347= FREQUIPMW 00000054 F 10 350= FREQUIPNA 00000057 F 10 351= FREQUIPR 00000051 F 10 349= FREQUIPW 00000050 F 10 348= FRFILELOCK 00000200 F 10 666= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 212 F 0 Cref listing FRFILELOKT 00000202 F 10 674= FRFILEULOK 00000201 F 10 667= FRFORCE 0000001A F 10 301= FRFWSP 00000015 F 10 296= FRGETCCB 0000018F F 10 553= FRGETTRANS 000000C2 F 10 436= FRINSRTP 00000132 F 10 517= FRMAKEPATH 00000270 F 10 700= FRMAPIN 00000091 F 10 404= FRMAPINOC 00000094 F 10 406= FRMAPINR 00000092 F 10 405= FRMODACS 000000D0 F 10 439= FRMODFLOG 000000DB F 10 450= FRMODFWWSC 000000D4 F 10 443= FRMODGHOST 000000D7 F 10 446= FRMODLBKU 000000D6 F 10 445= FRMODLRD 000000D9 F 10 448= FRMODLWD 000000D8 F 10 447= FRMODNBKUP 000000D3 F 10 442= FRMODPRGI 000000D2 F 10 441= FRMODTRANS 000000DA F 10 449= FRMODUSRN 000000D5 F 10 444= FRNOPEN 00000260 F 10 361= FRNOPENC 00000268 F 10 366= FRNOPENCMW 0000026C F 10 369= FRNOPENCNA 0000026F F 10 370= FRNOPENCR 00000269 F 10 368= FRNOPENCW 00000268 F 10 367= FRNOPENMW 00000264 F 10 364= FRNOPENNA 00000267 F 10 365= F 16 1288 FRNOPENR 00000261 F 10 363= FRNOPENW 00000260 F 10 362= FROPEN 00000050 F 10 353= FROPENMW 00000054 F 10 356= FROPENNA 00000057 F 10 357= FROPENR 00000051 F 10 355= FROPENW 00000050 F 10 354= FRPGPROTG 00000096 F 10 413= FRPGPROTS 00000097 F 10 416= FRPOSITION 00000090 F 10 400= FRRAFCPOS 00000095 F 10 410= FRRAFLAST 00000093 F 10 408= FRRAFNEXT 00000099 F 10 421= FRREAD 00000030 F 10 323= FRREADB 00000031 F 10 324= FRREADSHL 000000E1 F 10 455= FRRELEASE 00000013 F 10 294= FRRENAMER 00000100 F 10 461= FRRESLOCKR 00000203 F 10 669= FRRESLOCKT 00000206 F 10 679= FRRESLOCKW 00000204 F 10 670= FRRESLOKT 00000206 F 10 678= FRRESSWTCH 00000290 F 10 703= FRRESULOCK 00000205 F 10 671= FRREWIND 00000012 F 10 293= FRRWRITE 00000020 F 10 313= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 213 F 0 Cref listing FRRWRITEB 00000022 F 10 316= FRRWRITEC 00000025 F 10 319= FRRWRITEF 00000023 F 10 317= FRRWRITEL 00000024 F 10 318= FRRWRITET 00000020 F 10 314= FRRWRITETF 00000021 F 10 315= FRSAVE 00000070 F 10 392= FRSEFB 00000018 F 10 299= FRSEFF 00000017 F 10 298= FRSEOD 00000014 F 10 295= FRSETCCB 0000019F F 10 595= FRSETUPP 00000131 F 10 516= FRSETVVFU 00000250 F 10 695= FRSHARE 000000A0 F 10 425= FRSREAD 00000032 F 10 325= FRSREADB 00000033 F 10 326= FRSTATUS 00000010 F 10 291= FRSWRITE 000002A0 F 10 339= FRSWRITEB 000002A2 F 10 342= FRSWRITEF 000002A3 F 10 343= FRSWRITET 000002A0 F 10 340= FRSWRITETF 000002A1 F 10 341= FRTBREAK 000001B5 F 10 608= FRTCLRXOFF 000001B6 F 10 610= FRTDELAY 000001B4 F 10 606= FRTFLSHI 000001B1 F 10 602= FRTFLSHIO 000001B2 F 10 603= FRTFLSHO 000001B0 F 10 601= FRTGETBKSP 00000124 F 10 493= FRTGETBRCH 00000233 F 10 506= FRTGETCRD 00000121 F 10 490= FRTGETCW 00000126 F 10 495= FRTGETECHO 00000128 F 10 497= FRTGETFFD 00000123 F 10 492= FRTGETHTD 00000232 F 10 505= FRTGETINFO 00000234 F 10 510= FRTGETIRAT 0000012C F 10 500= FRTGETKILL 00000125 F 10 494= FRTGETLFD 00000122 F 10 491= FRTGETMODE 00000230 F 10 503= FRTGETOPT 00000231 F 10 504= FRTGETPORT 0000012E F 10 501= FRTGETRATE 00000129 F 10 498= FRTGETRCVR 0000012F F 10 502= FRTGETSH 00000127 F 10 496= FRTGETTCG 0000012A F 10 499= FRTGETTCS 0000012B F 10 512= FRTGETTYPE 00000120 F 10 488= FRTGETXOIQ 00000235 F 10 507= FRTRESET 000001B3 F 10 604= FRTSETBKSP 00000114 F 10 469= FRTSETBRCH 00000223 F 10 482= FRTSETCRD 00000111 F 10 466= FRTSETCW 00000116 F 10 471= FRTSETECHO 00000118 F 10 473= FRTSETFFD 00000113 F 10 468= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 214 F 0 Cref listing FRTSETHTD 00000222 F 10 481= FRTSETIRAT 0000011C F 10 476= FRTSETKILL 00000115 F 10 470= FRTSETLFD 00000112 F 10 467= FRTSETMODE 00000220 F 10 479= FRTSETOPT 00000221 F 10 480= FRTSETORAT 0000011D F 10 477= FRTSETRATE 00000119 F 10 474= FRTSETSH 00000117 F 10 472= FRTSETTCG 0000011A F 10 475= FRTSETTCS 0000011B F 10 485= FRTSETTRNS 0000011F F 10 478= FRTSETTYPE 00000110 F 10 464= FRTSETXOIQ 00000224 F 10 483= FRUNEQUIP 00000060 F 10 386= FRUNITID 00000210 F 10 682= FRUNITIE 00000211 F 10 683= FRUNITIGET 00000212 F 10 685= FRUNSAVE 00000080 F 10 396= FRUNSHARE 000000B0 F 10 429= FRUOPEN 00000280 F 10 374= FRUOPENC 00000288 F 10 379= FRUOPENCMW 0000028C F 10 382= FRUOPENCNA 0000028F F 10 383= FRUOPENCR 00000289 F 10 381= FRUOPENCW 00000288 F 10 380= FRUOPENMW 00000284 F 10 377= FRUOPENNA 00000287 F 10 378= FRUOPENR 00000281 F 10 376= FRUOPENW 00000280 F 10 375= FRWFM 00000019 F 10 300= FRWRITE 00000040 F 10 329= F 16 1602 FRWRITEB 00000042 F 10 332= FRWRITEC 00000045 F 10 335= FRWRITEF 00000043 F 10 333= FRWRITEL 00000044 F 10 334= FRWRITEMOD 0000001C F 10 302= FRWRITET 00000040 F 10 330= FRWRITETF 00000041 F 10 331= FRXSAVE 00000140 F 10 525= GETABYTE 000038F8 F 13 1580 1586= F 16 696 705 707 733 735 737 GETASCII 00003705 F 13 649 655= F 15 1491 GETCHAR 00003729 F 13 770 783= F 15 1723 1728 1933 1964 F 16 420 433 GETFBIINDX 00003745 F 13 843 849= F 15 990 1275 1564 GETFREEBLK 00005176 F 16 1754 1868 1877= GETNUMBER 00003AB0 F 13 2443 2448= F 16 1198 1205 GETONE 00003786 F 13 942 966 1024 1030= GETRANGE 00003761 F 13 913 935= F 16 441 1369 GETRANGEF 0000375B F 13 914 926= F 16 159 466 GOTFILE 00003666 F 13 481 504= F 15 915 931 HDRBLOCK 00003094 F 0 257= F 13 1672s 2332a F 16 704s HDRDISP 00003095 F 0 258= F 13 1673s 2322 F 16 702s HEADERCK 00003907 F 13 1625 1630= F 16 688 HEADPAGE 00001C00 F 6 237= 238e 239e HTYPECDR 0000000A F 7 1813= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 215 F 0 Cref listing HTYPECODE 00000003 F 7 1806= F 15 147 1065 HTYPECT 0000000D F 7 1816= HTYPEDIR 00000005 F 7 1808= HTYPELAST 00000010 F 7 1819= HTYPELP 0000000B F 7 1814= HTYPEMT 0000000C F 7 1815= HTYPENULL 00000006 F 7 1809= HTYPEPATH 00000004 F 7 1807= HTYPERAF 00000002 F 7 1805= HTYPESAF 00000001 F 7 1804= HTYPETASK 00000009 F 7 1812= HTYPETERM 00000007 F 7 1810= HTYPEVOL 0000000E F 7 1817= HTYPEVT 0000000F F 7 1818= IDXACNO 00178800 F 7 1566= 1571e IDXACNOP 00178802 F 7 1567= IDXDIRDA 00178803 F 7 1569= IDXDIRDA2 00178804 F 7 1570= IDXECNT 000000CC F 7 1572= IDXHASH MACRO F 7 1335= IDXLNTH 00000005 F 7 1571= 1572e INBLOCK 0000303B F 0 216= 456s F 13 31 36a 56 73 610a 618 621a 1251s 1255 1271 1273s 1481a 1675s 1692s 2022 2145s 2152 2162a 2167 2175a 2182 2195a 2204 2231 F 15 96 268 325a 1007s 1015 1020 1030 1053s 1096a 1104a 1153 F 16 28 66 70s 77 94 198 536 539a 587a 689 703 717 755 775 854 952 1031 1049 1134 1137s 1424s 1435a 1526a INITIALIZE 00003912 F 13 1663 1668= F 16 686 INITPAGE 00002000 F 6 241= 242e INTBLOCK 00003089 F 0 238= 405a INTBREAK 00003412 F 0 240a 391 419= INTMASK 82000000 F 0 241= 411 INTSOFF 0000E000 F 3 82= 86e INTSON 0000F000 F 3 81= 83e 85e INVOKMES 00003003 F 0 183= 475a IPRPPUCHAN 00001080 F 5 56= IPRPPUSTAT 00002100 F 5 57= IPRSSUSTAT 00003080 F 5 403= LASTADDR 0000309F F 0 268= F 13 1775s 1784 LASTBLOCK 000030C4 F 0 303= F 16 262s 279 282 326 443a 524 568 1371a 1395s 1449 1478 LASTLOC 000030C3 F 0 302= F 16 161a 212 260 264s 325 328s 334 LDFILENM 0000304B F 0 219= F 15 140a 143a 1072a 1097a LENREMAIN 00003097 F 0 260= F 13 1772s 1786 1787s 1795 1801 1803s LIMACSALW 00003E10 F 7 1602= LIMACSDIV 00003A10 F 7 1604= LIMACSPROJ 00003810 F 7 1605= LIMACSSYS 00003C10 F 7 1603= LIMACSUSR 00003610 F 7 1606= LIMFACCESS 00000040 F 7 1596= LIMITS 00000B9C F 7 1592= 1618e LIMITSIZE 00000009 F 7 1618= 2199 2200 LIMLOGSPOT 00001A50 F 7 1599= LIMPACCESS 00000840 F 7 1597= LINECNT 00003098 F 0 261= 498s F 13 1683s 1897s 1922s 1933s LISTREC 0000392C F 13 1718 1728= F 16 722 LOADBLOCK 000037D5 F 13 1162 1236 1243= F 15 62 173 F 16 509 528 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 216 F 0 Cref listing LOCKBIT 80000000 F 3 17= LOCKBITB 00000010 F 3 16= 17e LOGSLOTS 00000004 F 3 48= LOOKSBAD 00004D44 F 16 227j 399 478j 488j 494j 498j 547= LPCLRCTL 00000201 F 5 1444= LPINT 00000080 F 5 1435= LPLOADVFU 0000020C F 5 1447= LPNOP 00000200 F 5 1442= LPSETCTL 00000202 F 5 1445= LPSKIP 00000210 F 5 1450= LPSTATUS 00000220 F 5 1452= LPSTBADWRT 00003610 F 5 1476= LPSTBUFE 00000610 F 5 1455= LPSTBUFRDY 00002E10 F 5 1473= LPSTERROR 00000840 F 5 1456= LPSTFAULT 00000010 F 5 1453= LPSTILINE 00003410 F 5 1475= LPSTIPRE 00003010 F 5 1474= LPSTIRDY 00003E10 F 5 1478= LPSTIVFU 00003C10 F 5 1477= LPSTOOP 00000210 F 5 1454= LPSTPSKP 00001610 F 5 1470= LPSTREADY 00002410 F 5 1472= LPSTUNIT 00001840 F 5 1471= LPSTVFU 00001410 F 5 1469= LPWRFORM 00001E10 F 5 1481= LPWRHDR 00002C20 F 5 1482= LPWRITE 00000240 F 5 1480= LPWRLNTH 00003080 F 5 1483= LPWRUITYP 00003460 F 5 1440= LPWRUOPT 00002080 F 5 1438= LPWRUPPUE 00003010 F 5 1439= LUINFORD MACRO F 11 459= LUNAIN 000000C9 F 10 232= LUNAOUT 000000CA F 10 233= LUNCMCNTL 000000D2 F 10 236= LUNCMLOW 000000C9 F 10 235= LUNSERR 00000003 F 10 230= LUNSIN 00000001 F 10 228= LUNSOUT 00000002 F 10 229= LWPP 0000000A F 3 33= 37e 134e MAINCONTRL F 0 382= 649 MATEDATE1 80000005 F 7 871= MATEDATE2 80000006 F 7 872= MATERUNNUM 04000004 F 7 869= MATEVOLSIZ 80000004 F 7 870= MAXAFTSIZE 000000FD F 7 1321= 1362 MAXIDXSIZE 000000FD F 7 1320= 1321e 1361 MAXLOCAL 00000064 F 10 231= MAXMAPVALS 00000004 F 3 166= F 6 244a 248a MAXSIZE 0000004C F 0 249= MC 00003453 F 0 386 491= 503j 552j F 13 1928a 2233j 2243j F 15 64j 83j 105j 175j 217j 222j 229j 235j 242j 316j 345j 414j 464j 474j 918j 934j 943j 1037j 1087j 1099j 1106j 1115j 1123j 1133j 1192j 1204j 1481j 1538j 1638j 2099j F 16 104j 114j 222j 337j 369j 374j 541j 589j 603j 628j 690j 744j 792j 802j 812j 904j 911j 1000j 1005j 1070j 1083j 1219j 1256j 1326j 1333j 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 217 F 0 Cref listing 1377j 1383j 1464j 1483j 1541j 1564j 1574j 1596j 1605j 1610j 1617j MIDTIME 000030D1 F 0 322= F 15 1695s 2092 MIRRORSECT 00000380 F 7 861= MODCHECK 000034DE F 13 19 25= 156 1249 F 15 150 270 834 1003 1051 F 16 69 1132 1362 MODFLAG 00003075 F 0 229= 457s F 13 27 63s 1252s F 15 1008s 1187s 1477s 1520s 1531s F 16 903s 999s 1069s MONBIT 00003010 F 3 148= MONMSR 0000F1F0 F 3 85= MONMSRIOFF 0000E1F0 F 3 86= MONPF 00000080 F 0 443 445 447 F 3 136= 153e 155e F 6 218e 221e 225e 229e 232e 235e 238e 242e 246e 250e MORECHK 0000397A F 13 389 398 409 422 1559 1763 1886 1895= MOVEIT 00003969 F 13 1739 1774 1831 1838= MSBLKFIELD 00001180 F 0 335x F 7 38= 738e 747e 749e 779e 1694e F 15 1000 F 16 1697 MSBLKLOG 00000018 F 3 30= F 7 38e 39e 1612 1613 1614 1615 1834 1835 1838 2247 MSBLKMASK 000030FE F 0 335= F 13 1148 F 15 169 F 16 64 253 1446 1692 1779 1793 MSECSD 05265C00 F 7 177= 184e MSECSH 0036EE80 F 7 176= 177e 183e F 15 1675x MSECSM 0000EA60 F 7 175= 176e 182e F 15 1867 MSECSS 000003E8 F 7 174= 175e F 15 1877 MSGDEFS MACRO F 11 251= MSRFORMON 000001F0 F 3 84= 85e 86e MSRFRELOC 00000040 F 3 77= 84e MSRFRELOCB 00003210 F 3 68= 77e MSRIAPRB 00002A10 F 3 61= MSRINTCNT 00002040 F 3 56= 81e 81e 82e 82e MSRIRELOC 00000010 F 3 79= 84e MSRIRELOCB 00003610 F 3 70= 79e MSRMON 00000100 F 3 74= 84e MSRMONB 00002E10 F 3 63= 74e MSRMPEPRCB 00001E10 F 3 54= MSRPFINTE 00000800 F 3 75= MSRPFINTEB 00002810 F 3 58= 75e MSRPRELOC 00000020 F 3 78= 84e MSRPRELOCB 00003410 F 3 69= 78e MSRRSTRT 00000080 F 3 52= MSRSLOT 00003840 F 3 72= MSRSRELOC 00000080 F 3 76= 84e MSRSRELOCB 00003010 F 3 67= 76e MSRTRACEIB 00002C10 F 3 62= MTCMERASE 00000260 F 5 1421= MTCMFUNC 00000230 F 5 1403= MTCMREAD 00000240 F 5 1417= MTCMRESET 00000200 F 5 1401= MTCMWRITE 00000250 F 5 1419= MTDIOSIZE 0000C000 F 5 1154= MTDST9 00003010 F 5 1369= MTDSTBOT 00003610 F 5 1373= MTDSTBREW 00003A10 F 5 1376= MTDSTDEN 00003E10 F 5 1379= MTDSTEOT 00003210 F 5 1371= MTDSTPRS 00003C10 F 5 1378= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 218 F 0 Cref listing MTDSTRDY 00003410 F 5 1372= MTDSTTPK 00003A10 F 5 1377= MTDSTWPRT 00003810 F 5 1375= MTFNBKSP 00000006 F 5 1408= MTFNCYCLE 00000001 F 5 1404= MTFNDENSEL 0000000C F 5 1413= MTFNDSCIOF 00000008 F 5 1410= MTFNDSCION 00000009 F 5 1411= MTFNFWSP 00000007 F 5 1409= MTFNOFFL 0000000A F 5 1412= MTFNREWIND 00000002 F 5 1405= MTFNSEFB 00000004 F 5 1406= MTFNSEFF 00000005 F 5 1407= MTFNTRSEL 00000010 F 5 1414= MTFNWFM 00000018 F 5 1415= MTIDSTEST 00002080 F 5 1174= MTINTREQ 00000080 F 5 1399= MTLD2STAT 00000220 F 5 1381= MTLDDRVST 00000240 F 5 1386= MTLDSTAT 00000210 F 5 1204= MTSELECT 00000008 F 5 1397= MTSTANER 00000410 F 5 1207= MTSTDPPE 00002010 F 5 1342= MTSTDRVST 00003080 F 5 1366= MTSTDSC 00000010 F 5 1205= MTSTEOF 00001010 F 5 1218= MTSTERSTAT 00001650 F 5 1226= MTSTSCIEN 00000210 F 5 1206= MTSTTMBK 00000002 F 5 1222= MTSTTMBKB 00001210 F 5 1224= MTSTTMD 00001220 F 5 1219= MTSTTMFW 00000001 F 5 1221= MTSTTMFWB 00001410 F 5 1225= MTSTTMLOST 00000003 F 5 1223= NAME 00000005 F 9 96= NAMEEXT 00000007 F 9 97= NAMEOFFBI 00003060 F 13 1415s 1417a F 15 1253 1261= 1351s 1353a NEGATE 000030C9 F 0 308= F 13 1347 1352 F 16 152s 157s 403s 408s NEXTPARM 0000399E F 13 1958 1963= F 16 687 NEXTPOS 00003076 F 0 230= F 13 492s 1964 NMTPUNITS 00000004 F 5 1152= NNVMCLOCKS 00000300 F 7 340= NONEIN 00004E49 F 15 97j 269j 1154j 1156j F 16 29j 232j 852j 855j 950j 953j 1026 1032j 1050j 1080= NPS 00000080 F 3 134= 135e 136e 148e F 6 244a 248a NUMMES 00003099 F 0 262= F 13 1676s 2068s 2072s 2187 2189s F 16 1367s NUMMESCHK 000039CA F 13 2061 2066= 2209 2281 F 16 760 1432 NUMSLOTS 00000010 F 3 47= 48e NVMBASE 00000402 F 7 208= NVMCLKBYTS 00000004 F 7 300= 301 340 NVMDATDRFT 00000033 F 7 237= NVMDEADCNT 00000010 F 7 303= 305 NVMDEATH 00000080 F 7 307= NVMDEATHE 00000060 F 7 304= NVMFACACC 00000001 F 7 257= NVMFACCPU 00000001 F 7 251= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 219 F 0 Cref listing NVMFACCTC 00000001 F 7 272= NVMFACCTU 00000001 F 7 275= NVMFACDISK 00000001 F 7 266= NVMFACLPC 00000001 F 7 269= NVMFACMCU 00000001 F 7 245= NVMFACMSC 00000001 F 7 263= NVMFACMTC 00000001 F 7 278= NVMFACMTU 00000001 F 7 281= NVMFACPAGE 00000020 F 7 248= NVMFACPORT 00000008 F 7 260= NVMFACPPU 00000001 F 7 254= NVMFACVTC 00000001 F 7 284= NVMFACVTU 00000001 F 7 287= NVMLFPPW 00000011 F 7 214= NVMLFPPW1 00000012 F 7 215= NVMLFPPW2 0000001A F 7 216= NVMMAXACC 00000044 F 7 256= NVMMAXCPU 00000042 F 7 250= NVMMAXCTC 00000049 F 7 271= NVMMAXCTU 0000004A F 7 274= NVMMAXDISK 00000047 F 7 265= NVMMAXLPC 00000048 F 7 268= NVMMAXMCU 00000040 F 7 244= NVMMAXMSC 00000046 F 7 262= NVMMAXMTC 0000004B F 7 277= NVMMAXMTU 0000004C F 7 280= NVMMAXPAGE 00000041 F 7 247= NVMMAXPORT 00000045 F 7 259= NVMMAXPPU 00000043 F 7 253= NVMMAXVTC 0000004D F 7 283= NVMMAXVTU 0000004E F 7 286= NVMRFPPW 00000000 F 7 210= NVMRFPPW1 00000001 F 7 211= NVMRFPPW2 00000009 F 7 212= NVMSIZE 00000080 F 7 207= NVMSSN 0000003C F 7 242= NVMSSUSN 00000038 F 7 240= NVMTAPEPW 00000022 F 7 233= ODBADNAME 00000001 F 9 41= ODBADPL 00000004 F 9 44= F 16 1122x 1164 ODBADSB 00000006 F 9 46= F 16 1122x ODBADVL 00000005 F 9 45= F 16 1122x ODISYR 0000000B F 9 51= ODNOTDISK 00000002 F 9 42= ODOFFLINE 00000003 F 9 43= ODOOPS 00000008 F 9 48= ODPFM 0000000A F 9 50= ODSUBBIG 00000007 F 9 47= F 16 1122x ODVIU 00000009 F 9 49= ONEBITS FFFFFFFF F 3 15= 81e 82e ONLINE 00003016 F 0 194= 396s 442s F 13 2484 F 16 1252 1570 ONLINECA 0000307A F 0 237= 239a 427a ONVMCLOCKS 00000050 F 7 301= OPENLOC 0000305D F 13 1423s 1425a F 15 1252 1258= 1271s 1277s 1331a 1339a 1349 1387s 1391 1422s 1509 1514s 1521s 1525s 1560s 1566s 1641 F 16 25 42s 85 102a 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 220 F 0 Cref listing OPLVECTPC! 00000400 F 8 10= 54a OPMSGINFO MACRO F 12 481= ORADDAFT 000000A2 F 10 1079= ORATTACH 00000013 F 10 1001= ORBKCACCT 00000051 F 10 1039= ORBKUPACT 000000C1 F 10 1090= ORBKUPDONE 000000C4 F 10 1096= ORBKUPFIL 000000C2 F 10 1091= ORBKUPVOL 000000C0 F 10 1089= ORBUSYVOL 00000047 F 10 1034= ORCANOPMSG 00000162 F 10 1201= ORCAUTHDL 000000F2 F 10 1133= ORCAUTHSL 000000F3 F 10 1134= ORCHGAUTHL 000000E1 F 10 1121= ORCLRPNUM 00000171 F 10 1205= ORCPUSTOP 000001B1 F 10 1256= ORCPUSTRT 000001B2 F 10 1257= ORCREACCT 00000050 F 10 1038= ORCREAUTHE 000000F0 F 10 1128= ORCREAUTHL 000000E0 F 10 1118= ORCVOLNAME 00000190 F 10 1222= ORCVOLNEWO 00000193 F 10 1231= ORCVOLPWD 00000191 F 10 1225= ORCVOLSSN 00000192 F 10 1228= ORCVOLTITLE 00000194 F 10 1234= ORDELAFT 000000A3 F 10 1080= ORDESACCT 00000060 F 10 1042= ORDESAUTHE 000000F8 F 10 1129= ORDESAUTHL 000000E8 F 10 1124= ORDEVINFO 00000110 F 10 1150= ORDISMOUNT 00000041 F 10 1016= ORDISMTDRV 00000045 F 10 1027= ORFORMAT 00000152 F 10 1186= ORGAUTENS 000000FF F 10 1141= ORGAUTHDL 000000FA F 10 1137= ORGAUTHSL 000000FB F 10 1138= ORGENOPMSG 00000160 F 10 1196= ORGETAUTHL 000000E9 F 10 1125= ORGETFP 000000C3 F 10 1092= ORGETOPMSG 00000161 F 10 1199= ORGETTRC 00000138 F 10 1165= ORGOODBYE 00000011 F 10 997= ORGSYSINFO 000001A0 F 10 1249= ORGVOLNAME 00000198 F 10 1237= ORGVOLNEWO 0000019B F 10 1243= ORGVOLSSN 0000019A F 10 1240= ORGVOLTITLE 0000019C F 10 1246= ORHEADCHK 00000154 F 10 1190= ORHELLO 00000010 F 10 995= ORIGIAD 00003078 F 0 235= 408s F 15 835 ORIGIMR 00003077 F 0 234= 414s F 15 840 ORINHIBVOL 00000042 F 10 1019= ORINITEND 000000D4 F 10 1111= ORINITFMT 00000155 F 10 1192= ORINITVOL 000000D0 F 10 1104= ORLOGONP 00000012 F 10 999= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 221 F 0 Cref listing ORMAINTR 00000140 F 10 1175= ORMAINTRSUB 00000142 F 10 1176= F 16 1591 ORMAINTW 00000150 F 10 1181= ORMAPFP 000000C5 F 10 1100= ORMOUNT 00000040 F 10 1014= ORMOUNTMAI 000000B0 F 10 1084= ORMOUNTVOL 00000046 F 10 1031= ORPABORT 00000093 F 10 1070= ORPALLOW 00000071 F 10 1046= ORPEVICT 00000091 F 10 1067= ORPGO 000001D1 F 10 1262= ORPINFO 00000072 F 10 1049= ORPINHIB 00000070 F 10 1045= ORPRESET 00000074 F 10 1053= ORPROCINFO 00000092 F 10 1069= ORPSTOP 000001D0 F 10 1261= ORPTERMIN 00000090 F 10 1066= ORPUTFP 000000D3 F 10 1107= ORPUTPFP 000000D5 F 10 1115= ORPWARN 00000073 F 10 1051= ORRCVRACT 000000D1 F 10 1105= ORRCVRACTL 000000D6 F 10 1108= ORRCVRFIL 000000D2 F 10 1106= ORREADAFT 000000A0 F 10 1074= ORREADCNT 00000101 F 10 1144= ORREADIDX 000000A1 F 10 1077= ORREADNVM 00000141 F 10 1178= ORRESETDRV 00000156 F 10 1193= ORRESETVM 00000014 F 10 1003= ORRWCOUNTS 00000103 F 10 1146= ORSECTRK 00000153 F 10 1188= ORSESSINFO 00000092 F 10 1068= ORSETCPU 000001B0 F 10 1253= ORSETPNUM 00000170 F 10 1204= ORSLEEP 00000030 F 10 1009= ORSTOPDYNW 00000132 F 10 1163= ORSTOPMON 00000131 F 10 1162= ORSTOPTRC 00000130 F 10 1161= ORSTOPXMON 00000133 F 10 1164= ORSTRTBAT 00000180 F 10 1210= ORSTRTDYNW 00000122 F 10 1156= ORSTRTJOB 00000182 F 10 1216= ORSTRTMON 00000121 F 10 1155= ORSTRTSPLR 00000183 F 10 1218= ORSTRTTERM 00000181 F 10 1214= ORSTRTTRC 00000120 F 10 1153= ORSTRTXMON 00000123 F 10 1157= ORTADJUST 00000081 F 10 1058= ORTAKEPAGS 000001C0 F 10 1259= ORTIMPAR 00000082 F 10 1063= ORTZONE 00000080 F 10 1056= ORVANISH 00000020 F 10 1006= ORVINFO 00000043 F 10 1022= F 16 1301 ORVOLHANDLE 000000B1 F 10 1085= ORVOLINFO 00000044 F 10 1025= F 16 1583 ORWRITECNT 00000102 F 10 1145= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 222 F 0 Cref listing ORWRITENVM 00000151 F 10 1183= OUTBUF 420030A6 F 0 286= 289a OUTBUFLEN 0000004F F 0 288= F 13 1730 1745 1756 1858 OUTSRCHMSG 000035D2 F 13 325 330= 500 F 15 221 927 1114 OVERFLOWM 0000310C F 0 360= F 16 910a 1004a PACKDATE 00003AFF F 14 6 138 149= F 15 2068 PACKER 00003716 F 13 695 700= F 15 1489 1490 PAGEANDISP 00001560 F 3 145= PAGEDISP 00002CA0 F 0 334= F 16 86 149x PAGEFIELD 00001C80 F 3 147= PAGEINDX 00000160 F 0 333= F 13 1176s 1180s F 16 60 149x 246 247s 261 263s 315s 327s PASIGBITS 00003070 F 6 224= 226e PCNTROLCHR 000030BC F 0 291= F 13 1729 1760 1843 1851s PENDOUTBUF 000030BB F 0 290= F 13 1749 1754 1782 PFAILCHK MACRO F 4 203= PFAILDS MACRO F 4 185= PFAILEN MACRO F 4 170= PFALTBIT 00001C10 F 3 129= 131e PFCCBBLK 00003018 F 0 196= 400s 446s F 15 158 213 1078 PFCMPRBLK 00003019 F 0 197= 402s 448s F 15 298 1174 F 16 1364 PFCNTL 00001A30 F 3 127= PFDATABLK 00003017 F 0 195= 398s 444s F 13 57 1256 2153 F 15 1021 F 16 78 1063 1419 1732 1764 PFNOREFVAL 00060000 F 3 131= PFPAGENUM 000028C0 F 3 133= PFPTR 0012C000 F 0 443 445 447 F 3 124= F 13 2487 PFREFBIT 00001E10 F 3 130= PFROBIT 00001A10 F 3 128= 131e PFSIZE 00000100 F 3 135= PFSLOT 00000840 F 3 126= F 16 1213a PGNUMFLD 00000140 F 7 52= 2364e PGNUMFLDMAJ 000000A0 F 7 53= 2466e PGNUMFLDMIN 000014A0 F 7 54= 2468e PLBDTRXDA 00000018 F 7 838= F 16 1667 PLCYLPPCK 00000012 F 7 835= PLDA 00000000 F 7 814= F 16 1662 PLFLAGS 00000004 F 7 822= PLFORMNEW 00002E10 F 7 824= PLFORMRFRB 00002C10 F 7 825= PLFRMTRID 00000005 F 7 827= PLINIDATE 00000007 F 7 828= PLINITSCANS 00000009 F 7 829= PLMAKER 00000000 F 7 818= PLMODESN 00000021 F 7 844= 845e PLMODESNL 0000004C F 7 845= PLNODRVID 00003010 F 7 823= PLOCK MACRO F 4 17= PLSDFREV 0000001F F 7 842= PLSDPID 0000001B F 7 841= PLSDVID 00000019 F 7 840= PLSECPTRK 00000010 F 7 833= PLSERIAL 00000000 F 7 817= PLSERNO 00000001 F 7 819= PLSIZE 00000013 F 7 836= PLTRKPCYL 00000011 F 7 834= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 223 F 0 Cref listing PNBOOTLOC 00000084 F 3 155= PNCIX 00000086 F 6 235= F 13 2487 PNCPUPAGE 00000081 F 6 218= PNHEADPAGE 00000087 F 6 238= PNINITPAGE 00000088 F 6 242= PNPAGEZERO 00000080 F 3 153= PNPPLWNDO 000000FB F 6 246= PNUSERMEM 000000FC F 6 250= PNWNDO1 00000082 F 6 221= PNWNDO12 00000041 F 6 226= PNWNDO2 00000083 F 6 225= 226e PNWNDO3 00000084 F 6 229= PNWNDO4 00000085 F 6 232= PORTALWRIT 0000008B F 5 1076= PORTBOF 00003010 F 5 1017= PORTBREAK 00000087 F 5 1068= PORTBRK 00003610 F 5 1020= PORTCD 00003A10 F 5 1022= PORTCHKPAR 00003810 F 5 1085= PORTCIRATE 00000081 F 5 1052= PORTCLRAIN 0000008C F 5 1078= PORTCORATE 00000082 F 5 1053= PORTCRALL 0000001F F 5 1103= PORTCRCXON 00003A10 F 5 1100= 1103e PORTCRESET 0000008E F 5 1097= PORTCRFBR 00003610 F 5 1098= 1103e 1104e PORTCRFI 00003E10 F 5 1102= 1103e PORTCRFO 00003C10 F 5 1101= 1103e PORTCRFS 00003810 F 5 1099= 1103e 1104e PORTCRINIT 00000018 F 5 1104= PORTCS 00003E10 F 5 1024= PORTCSTAT 00000083 F 5 1056= PORTCSTAT2 0000008D F 5 1080= PORTCZAP 0000008F F 5 1106= PORTDSR 00003C10 F 5 1023= PORTDWELL 00000086 F 5 1066= PORTECHOOF 00000089 F 5 1072= PORTECHOON 00000088 F 5 1070= PORTEVENP 00000002 F 5 1093= PORTFBRK 00003410 F 5 1019= PORTFFE 00003210 F 5 1018= PORTFILE MACRO F 12 502= PORTFLUSHI 00000085 F 5 1064= PORTFLUSHO 00000084 F 5 1062= PORTHIBIT 00000001 F 5 1092= PORTIERR 00000091 F 5 1114= PORTINFORD MACRO F 12 573= PORTLAST 00003010 F 5 1013= PORTNOPAR 00000000 F 5 1091= PORTODDP 00000003 F 5 1094= PORTPARITY 00003A20 F 5 1087= PORTPCINIT 00000090 F 5 1111= PORTRI 00003810 F 5 1021= PORTSBRK 00003410 F 5 1083= PORTSCD 00003210 F 5 1058= PORTSCTS 00003010 F 5 1081= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 224 F 0 Cref listing PORTSDTR 00003410 F 5 1059= PORTSRDE 00003610 F 5 1084= PORTSRI 00003010 F 5 1057= PORTSRTS 00003810 F 5 1060= PORTSSTOP2 00003E10 F 5 1095= PORTSTAT 00003210 F 5 1014= PORTSXOF 00003210 F 5 1082= PORTWRITIN 0000008A F 5 1074= PPLWINDOW 0001EC00 F 6 245= 246e PPU3WRD 00000008 F 5 589= PPUABORT 00000001 F 5 572= PPUADDR1 00000005 F 5 582= PPUADDR2 00000007 F 5 587= PPUAMEMA 00001560 F 5 584= PPUASLOT 00000840 F 5 583= PPUCABLED 00000000 F 5 542= PPUCCOUNT 000022F0 F 5 580= PPUCHAN 00003020 F 5 539= F 16 1214a PPUCHANS 00000004 F 5 540= PPUCHANS1 00000002 F 5 573= PPUCHANS2 00000003 F 5 574= PPUCLAST 00002010 F 5 579= PPUCNT1 00000004 F 5 578= PPUCNT2 00000006 F 5 586= PPUIBCNR 00003210 F 5 552= PPUIBTR 00002010 F 5 564= PPUICIA 00002810 F 5 559= PPUICONF 00002A10 F 5 558= PPUIDMAD 00003E10 F 5 545= PPUIDMAE 00003A10 F 5 547= PPUIDMANB 00003010 F 5 553= PPUIDPPE 00002410 F 5 562= PPUIINTC 00003810 F 5 548= PPUIINTP 00003C10 F 5 546= PPUIINTR 00002C10 F 5 556= PPUILAST 00003410 F 5 551= PPUIMPE 00002E10 F 5 555= PPUINTSTAT 00000001 F 5 544= PPUIPIA 00002610 F 5 561= PPUIROLL 00003610 F 5 550= PPUITOUT 00001E10 F 5 569= PPUIXTRA 00002210 F 5 563= PPURESET 00000000 F 5 571= PPUSCSTAT 00000003 F 5 576= PPUSSSTAT 00000002 F 5 575= PREBUF 00003030 F 0 206= F 15 1721 PREVBLOCK 00003096 F 0 259= F 13 1674s 2159 2168s PRINTLINE 00003608 F 13 377 382= F 15 75 81 103 188 197 PRIVWORD 00170801 F 7 1595= PROCESPARM 000039D2 F 13 2003 2096 2101= PROCINFORD MACRO F 11 336= PROMPT1 00003012 F 0 189a 191= PROMPT2 00003014 F 0 190a 192= PROMPTCNT 0000300E F 0 186= 187a 459s 497s F 13 1907s PROMPTPTR 0000300F F 0 187= 493 F 13 1903 PROMPTTAB 00003010 F 0 188= 494 F 13 1904 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 225 F 0 Cref listing PSRBCDOTRP 00002C10 F 3 90= PSRCARRY 00000004 F 3 100= F 14 186 PSRCARRYB 00003A10 F 3 96= 100e PSRCONDB 00003C20 F 3 97= PSRDEFS MACRO F 11 305= PSRFIXATRP 00003010 F 3 91= PSRFLTATRP 00003210 F 3 92= PSRMODIF 00000010 F 3 99= F 14 60 67 80 83 86 89 166 168 173 175 184 189 PSRMODIFB 00003610 F 3 94= 99e PSROVERFB 00003810 F 3 95= 101e PSROVERFLOW 00000008 F 3 101= PSRUNDETRP 00003410 F 3 93= PTROUTBUF 000030BA F 0 289= F 13 1839 PUNLOCK MACRO F 4 24= PURGESDV 0000005A F 7 1837= PWRUPADDR 00000000 F 3 12= RADCODE 00003104 F 0 350= F 15 126 1058 RAFCHARIDX 000028C0 F 7 2470= RAFMAJINDX 000000A0 F 7 2466= RAFMININDX 000014A0 F 7 2468= RAFTEMPTY 00000000 F 7 1825= RAFTLARGE 00000003 F 7 1828= RAFTSMALL 00000002 F 7 1827= RAFTTINY 00000001 F 7 1826= READIN 000039DB F 13 1602 1779 1807 2137 2144= F 16 691 READSECBLK 000051B9 F 16 1363 1881 1973 1984= RECERROR 00003A5A F 13 2315 2321= F 16 743 RECMSGON 0000309A F 0 263= F 13 1677s 2179 2184s 2278 F 16 750 785 RECORDLEN 0000392A F 13 1719 1724= 1733 1740 1794 2292a RECORDMES 00003A49 F 13 2269 2277= F 16 727 RECORDSIZE 0000309B F 0 264= F 13 1678s 1724a 1836a F 16 712s 739 REGIAD 0000000B F 0 244= 404 F 15 837 REGIMR 0000000A F 0 243= 410 F 15 839 RESTRWORD 00170800 F 7 1593= RESULTS 0000306C F 0 226= F 13 392a 401a 403a 412a 414a 416a 425a 427a 429a 431a F 15 68s 102s 179s RESUMELOC 000030C8 F 0 307= F 16 484s 512 579s REVBACKUP 00000000 F 7 13= REVMNTVOL 18000000 F 7 10= REVVOLLRAF 10000000 F 7 11= REVVOLUME 08000000 F 7 9= RLMASK 0000308C F 0 248= F 16 728 RSPBUF 02003101 F 0 342= 343a RSPBUFL 00000008 F 0 341= 342 F 13 39 41 214 217 RSPBUFP 00003103 F 0 343= F 13 38 43 213 219 RTYPEBIN 00000002 F 7 2346= F 13 1848 RTYPECOMM 00000005 F 7 2349= RTYPEFORM 00000003 F 7 2347= RTYPELABEL 00000004 F 7 2348= RTYPETEXT 00000000 F 7 2344= RTYPETEXTF 00000001 F 7 2345= F 13 1841 SAFBLKNUM 00000140 F 7 2364= SAFCHARNUM 000028C0 F 7 2365= SCANACCT 000030BF F 0 300= 463s F 13 1320 1326 F 16 368s 372s 373s SCANBLOCK 000037EC F 13 1307 1314= F 16 210 285 518 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 226 F 0 Cref listing SECADTBTM 00000010 F 7 1354= SECADTCNT 00000018 F 7 1355= F 16 1943s SECADTNUM 00000008 F 7 1322= 1353 1354 1355 F 16 1492 1885 SECADTTOP 00000008 F 7 1353= F 16 1389 1494 1886 1928s SECAFTENTS 0000002B F 7 1360= SECAFTPTR 00000129 F 7 1362= SECAFTSIZ 00000029 F 7 1358= SECBKUPE 00000240 F 7 1396= SECBLKDAS 0000305A F 0 220= F 16 2002s 2040 2045 2055 2060 SECBUDATE 00000001 F 7 1348= SECDATCOR 0000022F F 7 1372= SECDATDRFT 0000022E F 7 1370= SECDATERR 0000022D F 7 1369= SECFBIBUFF 000030F3 F 0 329= F 16 1995a 2013a 2041a 2047a 2056a 2062a SECIDXENTS 0000002A F 7 1359= SECIDXPTR 0000002C F 7 1361= SECIDXSIZ 00000028 F 7 1357= SECLASTDT 00000229 F 7 1367= SECLASTSL 0000022B F 7 1368= SECMNTDAT 00000002 F 7 1350= SECNUMACC 00000235 F 7 1385= SECNUMCPU 00000233 F 7 1383= SECNUMCTC 0000023A F 7 1390= SECNUMCTU 0000023B F 7 1391= SECNUMDISK 00000238 F 7 1388= SECNUMLPC 00000239 F 7 1389= SECNUMMCU 00000231 F 7 1381= SECNUMMSC 00000237 F 7 1387= SECNUMMTC 0000023C F 7 1392= SECNUMMTU 0000023D F 7 1393= SECNUMPAGE 00000232 F 7 1382= SECNUMPORT 00000236 F 7 1386= SECNUMPPU 00000234 F 7 1384= SECNUMVTC 0000023E F 7 1394= SECNUMVTU 0000023F F 7 1395= SECSUN 00000000 F 7 1347= SECTZONE 00000226 F 7 1364= SELFDATE1 80000001 F 7 866= SELFDATE2 80000002 F 7 867= SELFRUNNUM 04000000 F 7 864= SELFVOLSIZ 80000000 F 7 865= SETSP MACRO F 4 36= SETTBIT MACRO F 4 52= SHLACCT 0016C801 F 7 1704= SHLACCTP 0016C803 F 7 1705= SHLACCTSYS 0016C806 F 7 1709= SHLACTOPT 0008C220 F 7 1697= SHLACTPRIV 0008C630 F 7 1698= SHLACTPRVM 00000002 F 7 1701= SHLACTPRVR 00000001 F 7 1700= SHLACTPRVW 00000000 F 7 1699= SHLACTPRVX 00000003 F 7 1702= SHLACTPW 0008C210 F 7 1695= SHLACTSYS 0008C410 F 7 1696= SHLDISK 0008D180 F 7 1694= SHLDSKFLG 0008C010 F 7 1693= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 227 F 0 Cref listing SHLDSKFLGB 00000010 F 7 1691= 1693e SHLENTLEN 00000004 F 7 1706= SHLENTPLEN 00000006 F 7 1708= SHLENTRYF 0008CC10 F 7 1703= SHLENTSLEN 00000007 F 7 1710= SHLFLAGW 0016C800 F 7 1688= 1693e 1694e 1695e 1696e 1697e 1698e 1703e 1706e 1708e 1710e SHLINFORD MACRO F 11 396= SHLPWORD 0016C804 F 7 1707= SINGTIME 000030CF F 0 320= F 15 1380s 1408s 1410a 1693 SKIPBLANKS 00003795 F 13 957 1074 1079= F 16 454 476 SLTTCPU 00000002 F 5 69= SLTTMEM 00000001 F 5 68= SLTTPPU 00000003 F 5 70= SLTTSSU 00000004 F 5 71= SLTTUNK 00000000 F 5 67= SMASK 000030CB F 0 311= F 16 179s 183s SMUPCC 00001840 F 5 127= SMUPCMND 00000C10 F 5 126= SMUPCRCEL 00000002 F 5 135= SORRYMESS 00003119 F 0 361= F 16 219a 611a SPATTERN 000030CA F 0 310= F 16 177s 213 288 SSCANRTN 00003462 F 0 390 508= F 13 1923a SSUALARM 00003610 F 5 447= SSUBOOTFP 00000010 F 5 469= SSUBREAK 0000308B F 0 242= F 13 2494 SSUBREAKB 00002E10 F 5 426= SSUCHARIN 0000000D F 5 451= F 13 2492 SSUCHAROUT 00000008 F 5 425= SSUCLOCKL 00000002 F 5 415= SSUCLOCKU 00000001 F 5 414= SSUCLOKAD 00000017 F 5 505= SSUCOFFSET 00001400 F 5 409= SSUCPUBUSE 00000007 F 5 422= SSUCPUERR 00000006 F 5 421= SSUCPUHALT 00000005 F 5 420= SSUDECCLK 00000004 F 5 417= SSUDISP03 0000000A F 5 443= SSUDISP47 0000000B F 5 444= SSUDISP89 0000000C F 5 445= SSUDWELLB 00002C10 F 5 427= SSUERRLOG 00000012 F 5 485= SSUFENCE 00000009 F 5 433= SSUFPSWCH 00000011 F 5 472= SSUHORN 00003410 F 5 446= SSUIMCI 00003010 F 5 460= SSUIMCLKSTR 00003610 F 5 463= SSUIMCO 00003210 F 5 461= SSUIMERR 00003810 F 5 464= SSUIMFPS 00003C10 F 5 466= SSUIMNVM 00003A10 F 5 465= SSUIMTICK 00003E10 F 5 467= SSUINCCLK 00000003 F 5 416= SSUINTMASK 0000000F F 5 458= SSUMAXCC 000000FF F 5 428= SSUMISCST 0000000E F 5 453= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 228 F 0 Cref listing SSUMSBC 00003C10 F 5 455= SSUMSLFP 00003E10 F 5 454= SSUMSNVM 00003A10 F 5 456= SSUNVM 00001800 F 5 509= SSURFP 00000010 F 5 474= SSUROFFSET 00001000 F 5 407= SSUSW1 00003810 F 5 479= 483e SSUSW2 00003A10 F 5 480= 483e SSUSW3 00003C10 F 5 481= 483e SSUSW4 00003E10 F 5 482= 483e SSUSWITCH 00003840 F 5 483= SSUSWMAINT 00003410 F 5 477= STARTBLK 0000309D F 0 266= F 13 1631 1679s 1983 1996a 2030 2032s 2203 STARTLIST 0000309E F 0 267= F 13 1680s 1986a 1999 2023 2025s F 16 714 719s 752 757s STARTREC 0000309C F 0 265= F 13 1634 1681s 1984 1991a 2035 2037s 2181 STORE 00000000 F 3 14= STPDUBL 00000C10 F 3 29= STPNLAST 00000810 F 3 27= STPVALUE 00000A10 F 3 28= SUBCHECK 00003570 F 13 185 190= F 15 291 1014 1167 F 16 1055 SUBLBAD 00160801 F 0 367= F 16 1674 SUBLGOOD 00160802 F 0 368= F 16 1676 SUBLIST 0000311E F 0 365= 370e 371a SUBLLINK 00160800 F 0 366= SUBLLOG 00000002 F 0 370= SUBRANGE1 000030C6 F 0 305= F 16 457s 467a 473 483 531 567 SUBRANGE2 000030C7 F 0 306= F 16 459s 468a 474s 520 563 SUBSBADDY 00000000 F 7 1229= 1232e F 16 1781 1783 1791s SUBSECNT 00000200 F 7 1233= SUBSLNTH 00000002 F 7 1232= 1233e F 16 1785 1786a SUBSSUB 00000001 F 7 1231= F 16 1794s SUBSTITUTE 000050B0 F 16 1572 1633 1645= SYSACCT 00000000 F 9 93= SYSPROJ 00000002 F 9 94= SYSTNUM 00002100 F 7 1146= TALPH 00003C10 F 0 509j F 8 48= F 13 702j 712s 739j 748s 946j 969j 1032j F 15 438j 1273j 1282j 1562j 1580j F 16 1127j 1263j TBLNK 00003610 F 8 51= TDELM 00003A10 F 8 49= TEOL 00003810 F 8 50= F 13 675 943j 1096s 1967j F 15 39j 133j 274j 437j 981j 1281j 1467j 1499j 1579j F 16 172j 175j 181j 186j 360j 450j 455j 487j 493j 498j 1126j 1264j 1378j 1400j 1564j TERR 00000000 F 8 52= TESTFORBRK 00003AB9 F 13 2476 2483= F 16 516 TIMEZONE 000030D0 F 0 321= 470s F 15 1255 1707 2077 TIMLIM 00170802 F 7 1608= TIMUSD 00170803 F 7 1609= TNUM 00003E10 F 0 534j F 8 47= F 13 669 704 710j 711s 740 746j 747s 944j 967j 1051s 2107j F 15 40j 48j 282j 895j 899j 984j 998j 1159j 1272j 1468j 1501j 1561j F 16 176j 182j 488j 494j 858j 864j 956j 962j 1052j 1187j 1190j 1199j 1206j 1401j 1565j TRACE MACRO F 4 87= TRINFORD MACRO F 12 611= UD 00000000 F 7 2162= 2205 2210e 2238e UD1LFDE 000003D8 F 7 2234= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 229 F 0 Cref listing UD1LINDX 000003F8 F 7 2256= UD2FDECNT 0000002A F 7 2212= 2238e UD2LFDE 000003D8 F 7 2238= UDACCT 00000000 F 7 2163= UDAUTHLIST 00000040 F 7 2203= UDBYE 0000001A F 7 2180= UDBYEAC 00000015 F 7 2177= UDBYEACP 00000017 F 7 2178= UDBYEACPW 00000018 F 7 2179= UDBYEEXT 0000001C F 7 2181= UDBYEPW 0000001D F 7 2182= UDENCRFLG 00000010 F 7 2186= UDFDECNT 00000026 F 7 2211= 2234e UDFDLIST 00000060 F 7 2207= 2210e 2234e 2256e UDFDSIZE 000003A0 F 7 2210= 2211e 2252e UDHPR 00000010 F 7 2174= UDHPRAC 0000000B F 7 2171= UDHPRACP 0000000D F 7 2172= UDHPRACPW 0000000E F 7 2173= UDHPREXT 00000012 F 7 2175= UDHPRPW 00000013 F 7 2176= UDINDCNT 000000B9 F 7 2252= 2256e UDINDXADR 0008D183 F 7 2247= UDINDXDA2 0016C804 F 7 2248= UDINDXDAW 0016C803 F 7 2245= UDINDXEXT 0016C802 F 7 2244= UDINDXLEN 00000005 F 7 2251= 2252e 2256e UDINDXNAM 0016C800 F 7 2243= UDINDXNUM 0016C00C F 7 2246= UDINDXPROT 00000C34 F 7 2242= 2251e UDLFDE 000003E8 F 7 2223= UDLIMITS 0000002B F 7 2198= UDPASS 00000003 F 7 2165= UDPRIORITY 00000029 F 7 2189= UDPRIVS 0000002A F 7 2190= UDPROJ 00000002 F 7 2164= UDSERNO 00000020 F 7 2187= UDSFLAGS 0000001F F 7 2183= UDSHLLIST 0000003C F 7 2202= UDSHLSIZE 00000004 F 7 1713= 1857 1858 2202 UDTITLE 0000004E F 7 2206= UDTITLEL 00000048 F 7 2204= 2205 2206 UDTYPE 0008001A F 7 2169= UDWORDB 0000000A F 7 2168= 2169e UINTARTHOV 00000010 F 10 67= UINTATTACH 00000075 F 10 94= UINTBCDO 0000000F F 10 66= UINTBREAK 00000020 F 10 79= UINTBRKINS 00000079 F 10 95= UINTCEM 00000008 F 10 59= UINTCHAIN 0000007B F 10 97= UINTCKB 0000000C F 10 63= UINTDIV0 00000011 F 10 68= UINTFIXOVN 00000013 F 10 70= UINTFIXOVP 00000012 F 10 69= UINTFLTOVN 00000014 F 10 71= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 230 F 0 Cref listing UINTFLTOVP 00000016 F 10 73= UINTFLTUFN 00000015 F 10 72= UINTFLTUFP 00000017 F 10 74= UINTGUNIT 00000028 F 10 87= UINTIMI 00000006 F 10 57= UINTIMS 00000003 F 10 54= UINTINST 00000018 F 10 76= UINTIONOV 0000000A F 10 61= UINTLOGIN 0000007F F 10 107= UINTLOGOFF 0000007A F 10 96= UINTMPV 00000074 F 10 93= UINTMSG 00000026 F 10 85= UINTNEPATH 00000023 F 10 82= UINTNETERM 00000022 F 10 81= UINTOPRQ 0000007D F 10 99= UINTOPRQA 00000027 F 10 86= UINTOPRQL 00000001 F 10 100= UINTOPRQP 00000005 F 10 104= UINTOPRQT 00000002 F 10 101= UINTOPRQUL 00000004 F 10 103= UINTOPRQW 00000003 F 10 102= UINTPARL 00000009 F 10 60= UINTPTERM 0000007E F 10 105= UINTSTKO 0000000E F 10 65= UINTSTNG 0000000D F 10 64= UINTTDISC 00000024 F 10 83= UINTTIMCUT 00000021 F 10 80= UINTTIMINT 00000025 F 10 84= UINTTRACEI 0000001F F 10 77= UINTUMODE 00000002 F 10 53= UINTUMP 00000004 F 10 55= UINTUNDEF 00000018 F 10 75= UINTUOP 00000001 F 10 52= UINTUOP2 0000000B F 10 62= UINTVAR 0000007C F 10 98= UINTVMFDE 00000071 F 10 90= UINTVMFIDS 00000072 F 10 91= UINTVMFISR 00000073 F 10 92= UINTVMFPE 00000070 F 10 89= UINTXTI 00000007 F 10 58= UMEMLOCK 0001F00F F 6 257= UMEMPSA 0001F00E F 6 256= UMEMSIZE 0000000A F 6 252= UMEMXTRA 0001F00D F 6 254= UNDRPINFORDMACRO F 11 419= UNPACKDATE 00003ACC F 14 5 39 51= F 15 1713 UPR15 000000F0 F 3 38= URACCTCPUL 000000A8 F 10 849= URACCTWCL 000000A9 F 10 852= URBLKLIM 000000B2 F 10 863= URBLKUSED 000000B3 F 10 866= URBYE 00000090 F 10 836= URCANOPMSG 00000151 F 10 945= URCERPROC 00000089 F 10 830= URCLRDEBUG 00000086 F 10 822= URCLRTIMIN 00000142 F 10 939= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 231 F 0 Cref listing URCNAME 00000180 F 10 964= URCPTIMEG 000000A1 F 10 843= URCPTIMES 000000A0 F 10 840= URDELAY 00000140 F 10 933= URDELAYR 00000143 F 10 934= URDROPPRIV 00000182 F 10 968= URERRORGET 00000028 F 10 751= F 16 1598 UREXCLPAGE 000000C2 F 10 874= URFORCEP 000000C4 F 10 875= URFREELUN 00000122 F 10 922= URFREEPAGE 000000C0 F 10 869= URFSERNO 00000061 F 10 782= URGENOPMSG 00000150 F 10 943= URGETMSG 00000161 F 10 951= URGETMSGA 00000162 F 10 953= URGETPNUM 00000170 F 10 960= URGETSSN 00000053 F 10 762= URGETVERS 00000054 F 10 764= URGIVELUN 00000123 F 10 924= URGIVEUNIT 00000190 F 10 971= URGRUNLUN 00000120 F 10 918= URINTRGO 0000008A F 10 833= URINTRTN 00000082 F 0 426 F 10 818= URLEA 00000130 F 10 928= URLEA2 00000131 F 10 929= URLOADFACT 00000051 F 10 756= URLUNITS 00000057 F 10 772= URMAPINAS 00000110 F 10 915= URMAYIRUN 00000055 F 10 766= URNEXTLUN 00000121 F 10 920= URPACKFI 00000101 F 10 910= URPACKFS 00000102 F 10 911= URPACKI 00000100 F 10 907= URPAGETYPE 000000C1 F 10 872= URPAKTIME 0000006C F 10 799= URPAKTIML 0000006D F 10 800= URPDSTRY 000000D2 F 10 884= URPDSTRYA 000000D3 F 10 887= URPDSTRYAP 000000D6 F 10 890= URPDSTRYP 000000D5 F 10 889= URPGETREG 000000F0 F 10 903= URPGO 000000D0 F 10 881= URPROCINFO 00000052 F 10 760= URPROCLVL 00000058 F 10 774= URPSETREG 000000E0 F 0 404 410 F 10 899= F 15 837 839 URPSTEP 000000D4 F 10 882= URRAWDATE 00000060 F 10 781= URRCVUNIT 00000191 F 10 974= URSCINTARM 00000081 F 10 816= URSCMSGA 00000164 F 10 956= URSENDERR 00000087 F 10 826= URSENDMSG 00000160 F 10 948= URSERPROC 00000088 F 10 829= URSESBLKG 000000B1 F 10 860= URSESBLKS 000000B0 F 10 856= URSESSINFO 00000052 F 10 759= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 232 F 0 Cref listing URSESWCLK 000000A7 F 10 846= URSETDEBUG 00000085 F 10 821= URSETLGFSES 00000181 F 10 966= URSETTIMIN 00000141 F 10 937= URSSINTARM 00000080 F 10 815= URSSMSGA 00000163 F 10 955= URSTOP 00000070 F 10 803= URSTOPA 00000078 F 10 808= URSTOPAR 0000007A F 10 810= URSTOPAZ 00000079 F 10 809= URSTOPAZR 0000007B F 10 811= URSTOPI 00000074 F 10 807= URSTOPIA 0000007C F 10 812= URSTOPR 00000072 F 10 805= URSTOPZ 00000071 F 10 804= URSTOPZR 00000073 F 10 806= URTRAFFIC 00000050 F 10 755= URUDRPINFO 00000056 F 10 769= URUGDATE 00000064 F 10 793= URULDATE 00000065 F 10 794= URUNLDATE 00000063 F 10 788= URUNRDATE 00000062 F 10 787= URVARGET 00000020 F 10 742= URVARGETS 00000021 F 10 747= URVARSET 00000010 F 10 734= URVARSETS 00000011 F 10 738= URWRITEP 000000C5 F 10 876= USERMEM 0001F000 F 6 249= 250e 252e USERMSR 0000F000 F 3 83= VARS 0000305C F 0 225= F 13 1454e F 15 30e 31e 32e 33e 433e 969e 970e 1150e 1257e 1258e 1259e 1260e 1261e 1262e 1263e 1264e 1669e 1670e 1671e 1672e 1673e F 16 838e 840e 841e 936e 937e 938e 1028e 1116e 1117e 1118e 1713a VBSYINFORD MACRO F 12 695= VCLOSEDISK 000013EC F 8 26= F 16 1144 1804 VDISKCB 000013E4 F 0 454 F 8 18= F 16 1173 VDISPLAY 000013E3 F 0 449 F 8 17= VDONEEXIT 000013F0 F 8 32= F 15 844 VERRLOGPT1 000013FA F 8 42= VERRLOGPTR 000013EA F 8 24= VERSION 00003001 F 0 180= 474a VEXTRACPUS 000013FC F 8 44= VFETCHFNM 000013F6 F 8 38= F 13 489 F 15 127 881 1059 F 16 359 VFETCHITEM 000013F5 F 8 37= F 13 701 738 2455 F 15 436 1280 1488 1578 1775 1864 1874 F 16 863 961 1125 1186 1189 1262 VFETCHITMH 000013F8 F 0 506 F 8 40= F 13 1031 1919 1965 2106 2110 F 15 38 47 131 273 894 898 980 1158 1269 1487 1558 F 16 174 180 185 486 492 497 857 955 1051 1399 1563 VGETDATE 000013FB F 0 469 F 8 43= F 16 1712 VIACCTNUM 00160807 F 0 172= VIADTBZY 00081010 F 0 172= VIBUSY 00081184 F 0 172= VIDNAME 00160801 F 0 172= F 16 1320 VIENTLEN 00081F10 F 0 172= F 16 1316 VIFREEBLK 00160805 F 0 172= VIINHIB 00081C10 F 0 172= VILENGTH 0000000A F 0 172= 172e 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 233 F 0 Cref listing VILOG 00000004 F 0 172= VIMAIM 00080E10 F 0 172= VINOTMNT 00081A10 F 0 172= VIPROTO 00000400 F 0 172e 172a 172= VIQDR 00081210 F 0 172= VIQDW 00081410 F 0 172= VIREALNAME 00160808 F 0 172= VISYSVOL 00081810 F 0 172= VITOTBLK 00160806 F 0 172= VIVNAME 00160802 F 0 172= F 16 1313 VIVNUM 00160010 F 0 172= VIWORDZ 000800F0 F 0 172e 172= 172e 172e 172e 172e 172e 172e VLAVREV 0000000C F 7 1163= VLBKUPE 00000040 F 7 1175= VLCDATE 00000008 F 7 1158= VLFLAGINV 00000210 F 7 1161= VLFLAGNEWO 00000410 F 7 1162= VLFLAGS 0000000B F 7 1160= VLSECB2DA 00000013 F 7 1171= F 16 2000 VLSECBDA 00000012 F 7 1170= F 16 1999 VLSSN 00000000 F 7 1140= VLSUBSDA 00000010 F 7 1168= F 16 1658 VLTITLE 00000020 F 7 1174= VLTITLELEN 00000080 F 7 1173= 1174 VLVNAME 00000004 F 7 1149= VLVPASSW 00000006 F 7 1152= VLVREV 0000000D F 7 1165= VMEMPF 000013E6 F 8 20= VMEMSPACE 000013ED F 8 27= VOLFIELD 00000080 F 7 39= VOLINFORD MACRO F 0 172 F 12 633= VOLLABELDA 00000001 F 7 1137= F 16 1653 1993 VOPENDISK 000013EB F 8 25= F 16 1151 1806 VPF4SSU 000013E5 F 8 19= F 13 2489 VPFWNDO1 000013E8 F 8 22= F 16 1654 1663 1687 1720 1774 1798 1882 1945 VPFWNDO2 000013E9 F 8 23= F 16 1896 1915 1923 1937 VPREPOUT 000013F9 F 0 422 434 473 485 495 550 F 8 41= F 13 35 113 197 205 211 336 390 399 410 423 509 516 523 530 539 551 609 620 991 999 1196 1416 1424 1430 1480 1557 1637 1901 1905 1931 2161 2174 2194 2212 2240 2289 2331 2339 F 15 202 226 233 323 343 366 373 380 387 394 401 408 472 912 929 1083 1095 1103 1120 1202 1330 1338 1352 1381 1409 1443 1536 2097 F 16 101 112 218 317 321 538 586 601 610 617 762 790 800 810 909 1003 1081 1160 1171 1196 1203 1212 1254 1324 1331 1381 1434 1458 1480 1504 1514 1525 1536 1608 1615 1747 1811 1839 1853 1860 1951 2074 VREAD 000013E0 F 8 14= F 13 1254 2151 F 15 156 211 296 1019 1076 1172 F 16 76 1417 1652 1661 1685 1730 1772 1894 1913 1992 2010 VREADCHAR 000013F1 F 8 33= VREADLINE 000013F3 F 0 501 F 8 35= F 13 40 216 1911 2451 F 15 1455 VSCANOVER 000013F7 F 8 39= VSLOTWRU 000013E7 F 8 21= VSRCHDIR 000013E2 F 8 16= F 13 495 F 15 145 1063 VSRCHDIRSN 000013EE F 8 28= F 15 904 VTDIOSIZE 0000C000 F 5 1168= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 234 F 0 Cref listing VWRITE 000013E1 F 8 15= F 13 55 F 16 1061 1718 1762 1796 1921 1935 2044 2059 VWRITECHAR 000013F2 F 8 34= VWRITELINE 000013F4 F 8 36= F 13 1761 F 15 467 WAITCOUNT 00040000 F 3 106= WLCKLIM 00170804 F 7 1610= WLCKUSD 00170805 F 7 1611= WNDO1 00000800 F 6 220= 221e F 16 1658 1667 1693a 1700a 1780a 1786a 1883a 1886 1928s 1943s WNDO2 00000C00 F 6 223= 225e F 16 1901 1933s WNDO3 00001000 F 6 228= 229e WNDO4 00001400 F 6 231= 232e WORDLNTH 00000020 F 3 25= 35e 36e 36e 37e 37e 38e 232 WORDOFF 000030BE F 0 296= F 15 285s 304 322s 324a 330s WORDOFFST 000030A0 F 0 269= F 13 2288s 2290a 2326s 2340a WPP 00000400 F 0 393a 393a F 3 32= 33e 34e 155e F 6 214a 217 218e 220 221e 223 225e 228 229e 231 232e 234 235e 237 238e 241 242e 244a 244a 245 246e 248a 248a 250e 251 F 7 6e 2212e 2545e F 13 1049 1331 1333 1339 1368 1374 1410 1413 2382 2384 F 15 331 985 1181 F 16 30 149x 163 287 458 995a 1442 1700a 1786a 2087a 2087a 2090 2091 2092 WRITESECBLK 000051D9 F 16 1944 2029 2036= WRU0CPUSUB 00001040 F 5 74= WRU0DD 00000D20 F 5 73= WRU0INT 00000A10 F 5 72= WRU0MREV 00003080 F 5 76= WRU0SMUDEV 00000001 F 5 85= WRU0TYPE 00000040 F 5 66= WRUMEMBAD 00002E10 F 5 99= WRUMEMDEVT 00001040 F 5 83= WRUMEMHERE 00003080 F 5 100= WRUMEMINC 00002040 F 5 86= WRUMEMNO0 00002E10 F 5 90= WRUMEMNONE 00002C10 F 5 98= XALOG 00000007 F 6 255= XREQERAIR 000000BA F 10 183= XREQERBFN 0000008F F 10 129= XREQERBSBL 0000009E F 10 149= XREQERBVAR 00000097 F 10 142= XREQERDAA 000000B0 F 10 173= XREQERDCM 000000C3 F 10 192= XREQERDIO 000000C4 F 10 194= XREQERDNA 000000AF F 10 172= XREQERDNC 000000B1 F 10 174= XREQERDNR 000000AE F 10 171= XREQERDSE 0000009F F 10 150= XREQERDSKL 00000087 F 10 117= XREQERESDL 000000C5 F 10 196= XREQERFAU 00000089 F 10 119= XREQERFBZ 0000008A F 10 121= XREQERFHBD 00000090 F 10 130= XREQERFIP 000000A8 F 10 163= XREQERFNF 0000008D F 10 124= XREQERFPRG 00000092 F 10 132= XREQERIAUT 000000A7 F 10 162= XREQERILOP 00000091 F 10 131= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 235 F 0 Cref listing XREQERILR 00000080 F 10 109= XREQERINHI 000000A9 F 10 164= XREQERISAV 00000088 F 10 118= XREQERISYR 00000093 F 10 133= XREQERITK 000000C9 F 10 200= XREQERITM 000000CA F 10 201= XREQERLAE 00000083 F 10 113= XREQERLAS 0000008B F 10 122= XREQERLBZ 000000C6 F 10 197= XREQERLNE 00000081 F 10 111= XREQERLNS 0000008C F 10 123= XREQERLPE 00000095 F 10 137= XREQERMNRP 000000A2 F 10 157= XREQERMWNA 00000086 F 10 116= XREQERNAE 0000008E F 10 128= XREQERNDS 000000B6 F 10 179= XREQERNDT 000000B7 F 10 180= XREQERNFSV 0000009D F 10 148= XREQERNR 000000AC F 10 169= XREQERNSE 000000AB F 10 168= XREQERNSL 000000AA F 10 167= XREQERNSPP 000000A3 F 10 158= XREQERNSS 000000B5 F 10 178= XREQERNSV 000000A6 F 10 161= XREQEROFC 000000A0 F 10 155= XREQEROIO 000000B9 F 10 182= XREQERPFM 00000084 F 10 114= XREQERPNS 00000094 F 10 136= XREQERPOB 00000082 F 10 112= XREQERPWW 00000096 F 10 138= XREQERREOD 000000A4 F 10 159= XREQERRIB 000000B8 F 10 181= XREQERRNA 00000085 F 10 115= XREQERSCU 000000C7 F 10 198= XREQERSDE 000000C0 F 10 189= XREQERSIB 000000BD F 10 186= XREQERSIO 000000BB F 10 184= XREQERSIU 00000099 F 10 144= XREQERSPB 000000BF F 10 188= XREQERSUSP 000000AD F 10 170= XREQERTMD 000000C2 F 10 191= XREQERUAM 0000009A F 10 145= XREQERUIB 000000BE F 10 187= XREQERUKC 000000B3 F 10 176= XREQERUKF 000000B4 F 10 177= XREQERUKP 000000BC F 10 185= XREQERUKS 000000B2 F 10 175= XREQERULT 000000C1 F 10 190= XREQERVBB 000000C8 F 10 199= XREQERVIU 000000A1 F 10 156= XREQERVLB 0000009B F 10 146= XREQERVNMR 0000009C F 10 147= XREQERWANA 000000A5 F 10 160= XREQERWPT 00000098 F 10 143= XREQRSTR 00000050 F 7 1594= XRFLDCODE 00002CA0 F 10 266= 1 Assembler C9208 Disk Peeker and Poker, Version A9306 30-Jun-93 15:10 PAGE 236 F 0 Cref listing XRFLDNRWD 00002210 F 10 270= 271e XRFLDREQ 00002C60 F 10 268= XRFLDSUBOP 00003840 F 10 267= XRFLDSUSP 00001E20 F 10 272= 273e 274e XRMAIFLD 00002630 F 10 1168= 1169e 1170e 1171e XRNOERRS 00000800 F 10 1170= XRNOREWND 00004000 F 10 271= XRNOSUB 00001000 F 10 1169= XRSUSPERR 00008000 F 10 274= XRSUSPNORM 00000000 F 10 273= XRWWCHK 00000400 F 10 1171= ZERO 00000000 F 3 11= 12e 155e F 6 214a 218e 221e 225e 229e 232e 235e 238e 242e 246e 250e 655 END of PEEK&POKE 656