MDS TO PDP 11/60 LINK MACRO M1110 07-JUN-79 11:27 TABLE OF CONTENTS 4- 2 HEADER PAGE 5- 30 MAIN CONTROL 7- 351 FCS ROUTINES 11- 501 PROCESS DATA BUFFER MDS TO PDP 11/60 LINK MACRO M1110 07-JUN-79 11:27 PAGE 4 1 .TITLE MDS TO PDP 11/60 LINK 2 .SBTTL HEADER PAGE 3 ; 4 ; 5 ; 6 ; 7 ; DEVELOPED BY: BRUCE E. SEBELL 8 ; 9 ; LAST UP DATE: 6-7-79 10 ; 11 ; THIS MODULE IS FULLY SELF CONTAINED ON NEEDS NO SPECIAL 12 ; OPTIONS IN IT'S ASSEMBLY. 13 ; 14 ; MAC BYMDS,BYMDS/-SP=BYMDS 15 ; 16 ; AT TASK BUILD TIME, TWO OTHER MODULES ARE NECESSARY 17 ; TTIO.OBJ SYSERR.OBJ 18 ; 19 ; TKB BYMDS,BYMDS/-SP=BYMDS,TTIO,SYSERR 20 ; / 21 ; ASG=SY0:1 22 ; ASG=TI:2 23 ; ASG=NL:5 24 ; 25 ; 26 ; 27 ; CONTRL--MDS TO PDP11/60 LINK MACRO M1110 07-JUN-79 11:27 PAGE 5 HEADER PAGE 29 .TITLE CONTRL--MDS TO PDP11/60 LINK 30 .SBTTL MAIN CONTROL 31 000000 .PSECT MAIN 32 .GLOBL NEXFIL, STOP 33 .MCALL QIO$,DIR$,QIOW$,WTSE$,EXIT$S 34 ; 35 ; 36 000377 BUFSIZ==255. ; 255 IS THE MAXIMUM 37 000375 BFSZM1==BUFSIZ-2 ; BUFFER SIZE MINUS CHECK SUM LOCATION 38 ; CHECKSUM IS LAST 2 BYTES 39 ; 40 ; 41 000371 NOVSIZ==BUFSIZ-6 ; BUFFER SIZE MINUS CHECKSUM LOCATION 42 ; FOR 11 TO MDS XMISSION 43 ; CHECKSUM LOCATION IS LAST 6 BYTES 44 ; 45 000002 LNKLUN==2 ; DEVICE TO BE LINKED TO 46 000002 LNKEFN==2 ; EVENT FLAG OF LINK 47 000010 ERRCNT=8. ; # OF ERROR CHECKING SEQUENCES 48 000200 PARITY=200 ; PARITY BIT MASK 49 ; 50 ; 51 ; 52 ;;;;;;;;;;;;;;;;;;;;;;;;;;; 53 ; 54 ; QIO$ STATEMENTS 55 ; 56 ; 57 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 58 ; 59 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 60 ; 61 ; READ A BUFFER FROM THE MDS 62 ; 63 ; ENTRY: R0 CONTAINS ADDRESS OF 64 ; BYTE BUFFER 65 ; 66 ; R1 CONTAINS SIZE OF 67 ; BUFFER 68 ; 69 ; 70 ; 71 ; BESURE TO TEST EVENT FLAG BEFORE 72 ; ATTEMPTING TO USE BUFFER 73 ; 74 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 75 ; 76 77 ; ; READ A BUFFER 78 000000 GETBUF::QIOW$ IO.RPR!TF.RNE!TF.RAL,LNKLUN,LNKEFN,,,, 79 ; 80 000030 PUTBUF: QIOW$ IO.WLB!TF.WAL,LNKLUN,LNKEFN,,,, 81 000060 GETCHR: QIOW$ IO.RNE!TF.RAL,LNKLUN,LNKEFN,,,, 82 000110 ATTACH: QIOW$ IO.ATT,LNKLUN,LNKEFN ; ATTACH MDS TO 11 83 000140 SNDTRM: QIOW$ IO.WLB,LNKLUN,LNKEFN,,,, 84 ; 85 .NLIST MEB CONTRL--MDS TO PDP11/60 LINK MACRO M1110 07-JUN-79 11:27 PAGE 5-1 MAIN CONTROL 86 ; 87 ; 88 ;;;;;;;;;;;;;;;;;;;;;;;;;;; 89 ; 90 ; PROMPT CODES 91 ; 92 ;;;;;;;;;;;;;;;;;;;;;;;;;;; 93 ; 94 000001 NBFPMT=1 ; SEND NEXT BUFFER PROMPT 95 000002 CKERR=2 ; CHECK SUM ERROR PROMPT 96 000003 TERMIN=3 ; TERMINATE XMISSION PROMPT 97 ; 98 ; 99 ;;;;;;;;;;;;;;;;;;;;;;;;; 100 ; 101 ; STATUS BYTE FLAGS 102 ; 103 ;;;;;;;;;;;;;;;;;;;;;;;;; 104 ; 105 000041 NAME='! ; NAME BUFFER 106 000043 DATA='# ; DATA BUFFER 107 000044 EOF='$ ; END OF FILE 108 000045 ABORT='% ; ABORT TRANSMISSION 109 000046 EXIT='& ; TERMINATE LINK 110 000047 OUTPUT='' ; TRANSMIT TO THE MDS 111 ; 112 ; 113 ; 114 ;;;;;;;;;;;;;;;;;;;;;;;;;; 115 ; 116 ; FLAG REGISTER STATUS BITS 117 ; 118 ;;;;;;;;;;;;;;;;;;;;;;;;; 119 ; 120 000001 FILOPN==1 ; A FILE IS OPEN 121 000002 CNTFLG==2 ; RECORD CROSSES BUFFER BOUNDRIES 122 000004 MDS==4 ; TRANSMISSION IS TO THE MDS 123 000010 ENDOF==8. ; END OF FILE 124 000020 ADDLF==16. ; ADD A LINE FEED TO THE NEXT BUFFER 125 000040 FINISH==32. ; ALL INFO HAS BEEN SENT 126 ; 127 ; 128 ; 129 000170 KRSNA:: 130 000170 012746 001204' MOV #ERROR,-(SP) ; MOVE MCR COMMAND BLOCK ONTO STACK 131 000174 012746 001214' MOV #UP,-(SP) 132 000200 010605 MOV SP,R5 ; SET MCR COMMAND BLOCK POINTER 133 000202 CALL MCR ; UP THE BAUD RATE 134 000206 022767 000000G 000770 CMP #IS.SUC,ERROR ; WAS IT DONE? 135 000214 001402 BEQ 1$ ; BRANCH IF YES 136 000216 000167 000452 JMP EXIT1 ; GET OUT IF NOT 137 000222 062706 000004 1$: ADD #4,SP ; ZERO OUT COMMAND BLOCK 138 000226 DIR$ #ATTACH 139 000234 103474 BCS ERRDSW ; JUMP IF ERROR 140 ; 141 000236 105067 000745 NEXFIL::CLRB FLAG ; CLEAR STATUS FLAGS 142 000242 105067 000740 CLRB XFRERR ; CLEAR CHECKSUM ERROR COUNT CONTRL--MDS TO PDP11/60 LINK MACRO M1110 07-JUN-79 11:27 PAGE 5-2 MAIN CONTROL 143 000246 012767 000001 000734 NEXBUF: MOV #NBFPMT,PROMPT ; SET TO SEND 'SEND NEXT BUFFER' PROMPT 144 000254 NEXBF1: DIR$ #GETBUF 145 000262 103461 BCS ERRDSW ; BRANCH IF ERROR 146 000264 012702 001254' MOV #BUF1,R2 ; GET STATUS BYTE 147 000270 012701 000375 MOV #BFSZM1,R1 ; GET BUFFER SIZE MINUS 1 148 000274 CALL CHKSUM 149 000300 103543 BCS CHKERR ; CHECKSUM ERROR IF CARRY SET 150 000302 012702 001254' MOV #BUF1,R2 ; SETUP TO PROCESS BUFFER 151 000306 121227 000041 STATUS: CMPB (R2),#NAME ; IS THIS A FILENAME BLOCK 152 000312 001011 BNE 2$ 153 000314 132767 000001 000665 BITB #FILOPN,FLAG ; IS THERE A FILE OPEN 154 000322 001023 BNE 100$ ; FILE OPEN ERROR 155 000324 005202 INC R2 156 000326 CALL OPNFIL ; OPEN THE FILE 157 000332 103345 BCC NEXBUF ; BRANCH IF NO ERROR 158 000334 000416 BR 100$ 159 000336 121227 000044 2$: CMPB (R2),#EOF ; IS THIS AN END OF FILE 160 000342 001547 BEQ END1 ; CLOSE OUT 161 000344 121227 000043 CMPB (R2),#DATA ; IS THIS A DATA BUFFER 162 000350 001005 BNE 3$ ; 163 000352 CALL PROCESS ; WRITE TO DISK 164 000356 103405 BCS 100$ ; CARRY WILL BE SET IF ERROR OCCURED 165 000360 000167 177662 JMP NEXBUF ; NO! GO GET ANOTHER BUFFER FULL 166 000364 121227 000045 3$: CMPB (R2),#ABORT ; IS THIS AN ABORT PROMPT 167 000370 001002 BNE 4$ ; BRANCH IF NO 168 000372 000167 000240 100$: JMP STOP 169 000376 121227 000046 4$: CMPB (R2),#EXIT ; IS THIS A TERMINATE LINK 170 000402 001534 BEQ EXIT1 ; YES 171 000404 122712 000047 CMPB #OUTPUT,(R2) ; IS THIS AN 11/60 TO MDS TRANSMISSION 172 000410 001077 BNE CHKERR ; STATUS BYTE UNRECOGNIZABLE, RESEND BUFFER 173 000412 000167 000332 JMP TOMDS 174 000416 DONE: CALL CLOSE 175 000422 000167 177610 JMP NEXFIL 176 ; 177 ; 178 000426 000167 000204 ERRDSW: JMP STOP 179 ; 180 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 181 ; 182 ; CALCULATE CHECKSUM ROUTINE 183 ; 184 ; ENTRY: R2 BUFFER ADDRESS 185 ; R1 BUFFER SIZE-2 186 ; 187 ; EXIT: CARRY SET IF ERROR FOUND 188 ; 189 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 190 ; 191 000432 005067 000544 CHKSUM: CLR CHKSM ; CLEAR SUM BYTE 192 000436 005003 1$: CLR R3 193 000440 112203 MOVB (R2)+,R3 ; GET CHAR 194 000442 042703 177600 BIC #177600,R3 195 000446 060367 000530 ADD R3,CHKSM ; ADD A CHAR. 196 000452 SOB R1,1$ ; KEEP GOING UNTIL ENTIRE BUFFER ADDED 197 000456 005003 CLR R3 198 000460 132767 000004 000521 BITB #MDS,FLAG ; IS THIS AN 11 TO MDS TRANSMISSION 199 000466 001017 BNE 3$ ; YES CONTRL--MDS TO PDP11/60 LINK MACRO M1110 07-JUN-79 11:27 PAGE 5-3 MAIN CONTROL 200 000470 112203 MOVB (R2)+,R3 ; SETUP LOWER BYTE OF CHECKSUM 201 000472 042703 177400 BIC #177400,R3 ; MASK OUT BIT EXTENSION 202 000476 111201 MOVB (R2),R1 ; GET UPPER BYTE 203 000500 000301 SWAB R1 204 000502 074103 XOR R1,R3 ; ASSEMBLE CHECKSUM 205 000504 020367 000472 CMP R3,CHKSM ; COMPARE TOTAL WITH XMITTED SUM 206 000510 001402 BEQ 2$ ; WAS O.K. 207 000512 000261 SEC ; SET CARRYY SIGNIFING ERROR 208 000514 RETURN 209 000516 000241 2$: CLC ; BE SURE CARRY IS CLEAR 210 000520 105067 000462 CLRB XFRERR ; CLEAR CHECK SUM ERROR COUNTER 211 000524 RETURN 212 000526 012701 000005 3$: MOV #5,R1 ; SETUP CYCLE 213 000532 016700 000444 4$: MOV CHKSM,R0 ; GET CHECKSUM TOTAL 214 000536 042700 177770 BIC #177770,R0 ; GET LEAST SIGNIFICANT DIGIT 215 000542 052700 000060 BIS #60,R0 ; MAKE VALUE ASCII 216 000546 110022 MOVB R0,(R2)+ ; STORE IT 217 000550 006267 000426 ASR CHKSM 218 000554 006267 000422 ASR CHKSM 219 000560 006267 000416 ASR CHKSM 220 000564 SOB R1,4$ ; DONE? 221 000570 016700 000406 MOV CHKSM,R0 222 000574 042700 177776 BIC #177776,R0 223 000600 052700 000060 BIS #60,R0 224 000604 110012 MOVB R0,(R2) 225 000606 000743 BR 2$ 226 ; 227 ; 228 ;;;;;;;;;;;;;;;;;;;;;;;;;;; 229 ; 230 ; ERROR RECOVERY ROUTINES 231 ; 232 ;;;;;;;;;;;;;;;;;;;;;;;;;;;; 233 ; 234 ; 235 000610 122767 000010 000370 CHKERR: CMPB #ERRCNT,XFRERR ; IS ERROR COUNT UP TO TOTAL 236 000616 001407 BEQ STOP ; SEND TRANSMITTION TERMINATION 237 000620 005267 000362 INC XFRERR ; KEEP TRACK OF NO. OF TRYS 238 000624 012767 000002 000356 MOV #CKERR,PROMPT ; SET TO SEND CHECKSUM ERROR PROMPT 239 000632 000167 177416 JMP NEXBF1 240 ; 241 ; 242 000636 112767 000003 000345 STOP: MOVB #TERMIN,TRMPMT 243 000644 DIR$ #SNDTRM 244 ; SEND TERMINATE XMISSION PROMPT 245 000652 105067 000330 CLRB XFRERR ; CLEAR CHECKSUM ERROR COUNT 246 000656 000167 177534 JMP DONE 247 ; 248 ; 249 ; 250 000662 142767 000040 000317 END1: BICB #FINISH,FLAG ; CLEAR DONE FLAG 251 000670 000167 177522 JMP DONE 252 ; 253 000674 EXIT1: 254 000674 112767 000003 000307 MOVB #TERMIN,TRMPMT 255 000702 DIR$ #SNDTRM ; SEND TERMINATION PROMPT 256 000710 012746 001204' MOV #ERROR,-(SP) ; SETUP MCR COMMAND BLOCK TO REDUCE BAUD RATE CONTRL--MDS TO PDP11/60 LINK MACRO M1110 07-JUN-79 11:27 PAGE 5-4 MAIN CONTROL 257 000714 012746 001233' MOV #DOWN,-(SP) 258 000720 010605 MOV SP,R5 259 000722 1$: CALL MCR 260 000726 022767 000000G 000250 CMP #IS.SUC,ERROR ; DID IT DO IT 261 000734 001372 BNE 1$ ; NO! TRY AGAIN 262 000736 062706 000004 ADD #4,SP 263 000742 EXIT$S 264 ; 265 ; 266 ; 267 ;;;;;;;;;;;;;;;;;;;;;;;;;;; 268 ; 269 ; TRANSMISSION TO MDS 270 ; 271 ;;;;;;;;;;;;;;;;;;;;;;;;;;; 272 ; 273 000750 132767 000001 000231 TOMDS: BITB #FILOPN,FLAG ; IS THERE A FILE OPEN 274 000756 001030 BNE 100$ ; YES 275 000760 152767 000004 000221 BISB #MDS,FLAG ; SET 11 TO MDS TRANSMISSION FLAG 276 000766 005202 INC R2 ; MOVE PAST STATUS BYTE 277 000770 CALL OPNFIL ; OPEN THE FILE FOR READING 278 000774 103421 BCS 100$ ; BRANCH IF ERROR 279 000776 112767 000001 000205 20$: MOVB #NBFPMT,TRMPMT 280 001004 DIR$ #SNDTRM 281 001012 103461 BCS 5$ 282 001014 6$: DIR$ #GETCHR ; GET MDS READY 283 001022 103455 BCS 5$ ; BRANCH IF DIRECTIVE ERROR 284 001024 105367 000160 DECB PROMPT ; WAS PROMPT A READY 285 001030 001405 BEQ 3$ ; BRANCH IF YES 286 001032 105367 000152 DECB PROMPT ; IS IT A CHECKSUM PROMPT 287 001036 001436 BEQ 10$ ; YES, MDS MISSED FIRST PROMPT 288 ; SEND IT AGAIN 289 001040 000167 177572 100$: JMP STOP 290 ; 291 ; 292 001044 132767 000010 000135 3$: BITB #ENDOF,FLAG ; SHOULD I SEND THE END OF FILE PROMPT 293 001052 001043 BNE 30$ ; BRANCH IF YES 294 001054 012700 001254' MOV #BUF1,R0 ; SETUP TO CLEAR OUTPUT BUFFER 295 001060 012701 000377 MOV #BUFSIZ,R1 296 001064 105020 1$: CLRB (R0)+ 297 001066 SOB R1,1$ 298 001072 012702 001254' MOV #BUF1,R2 299 001076 112712 000043 MOVB #DATA,(R2) ; INSERT STATUS BYTE FOR DATA BUFFER 300 001102 CALL PROCES ; GET A BUFFER FULL 301 001106 103004 BCC 2$ ; BRANCH IF NO ERROR 302 001110 132767 000010 000071 BITB #ENDOF,FLAG ; IS IT AN END OF FILE ERROR 303 001116 001750 BEQ 100$ ; NO 304 001120 012702 001254' 2$: MOV #BUF1,R2 305 001124 012701 000371 MOV #NOVSIZ,R1 306 001130 004767 177276 JSR PC,CHKSUM ; ADD THE CHECKSUM 307 001134 10$: DIR$ #PUTBUF ; OUTPUT THE BUFFER 308 001142 103405 BCS 5$ ; JUMP IF NO ERROR 309 001144 132767 000040 000035 BITB #FINISH,FLAG ; IS EVERYTHING COMPLETE 310 001152 001243 BNE END1 ; BRANCH IF YES 311 001154 000717 BR 6$ 312 001156 000167 177244 5$: JMP ERRDSW 313 ; CONTRL--MDS TO PDP11/60 LINK MACRO M1110 07-JUN-79 11:27 PAGE 5-5 MAIN CONTROL 314 ; 315 001162 012702 001254' 30$: MOV #BUF1,R2 ; SETUP EOF BUFFER 316 001166 112712 000044 MOVB #EOF,(R2) ; 317 001172 152767 000040 000007 BISB #FINISH,FLAG ; SET TO SAY EVERYTHING COMPLETE 318 001200 000747 BR 2$ 319 ; 320 ; 321 ;;;;;;;;;;;;;;;;;;;;;;;; 322 ; 323 ; STORAGE 324 ; 325 ;;;;;;;;;;;;;;;;;;;;;;;; 326 ; 327 ; 328 ; 329 .EVEN 330 001202 CHKSM: .BLKW 331 001204 ERROR: .BLKW 332 001206 XFRERR: .BLKB 333 001207 FLAG:: .BLKB 334 001210 PROMPT::.BLKB 335 001211 TRMPMT: .BLKB TERMIN 336 ; 337 ; 338 .NLIST BEX 339 ; 340 001214 123 105 124 UP: .ASCIZ *SET /SLAVE=TI:* 341 001233 123 105 124 DOWN: .ASCIZ *SET /NOSLAVE=TI:* 342 ; 343 ; 344 001254 BUF1: .BLKB BUFSIZ 345 ; 346 ; 347 ; WRKFIL-WORKING FILES MACRO M1110 07-JUN-79 11:27 PAGE 7 MAIN CONTROL 350 .TITLE WRKFIL-WORKING FILES 351 .SBTTL FCS ROUTINES 352 000000 .PSECT WRKFIL 353 .GLOBL OPNFIL,WRTREC,CLOSE,GETBUF 354 .MCALL FINIT$,OPEN$W,FDOP$A,FSRSZ$ 355 .MCALL FDAT$A,FDRC$A,FDBDF$,PUT$,GET$ 356 .MCALL CLOSE$,QIOW$S,QIO$S,OPEN$R 357 ; 358 ; 359 000001 OUTLUN=1 ; LUN FOR DEVICE TO BE WRITTEN TO (DM0) 360 000001 OUTEFN=1 361 000204 RECSZ=132. ; MAXIMUM RECORD SIZE 362 000040 UPCSE=040 ; ASCII UPPER CASE MASK BIT 363 000056 PERIOD='. ; NAME/TYPE SEPARATOR 364 000073 SEMI='; ; TYPE/VERSION SEPARATOR 365 ; 366 ;;;;;;;;;;;;;;;;;;;;;;;;; 367 ; 368 ; THIS ROUTINE WILL OPEN AN 369 ; ASCII FILENAME 370 ; 371 ; ENTRY:R2 MUST CONTAIN FILENAME 372 ; BUFFER ADDRESS. 373 ; 374 ; EXIT: CARRY WILL BE SET IF AN ERROR 375 ; WAS FOUND. R0 WILL CONTAIN 376 ; THE ERROR CODE. 377 ; 378 ;;;;;;;;;;;;;;;;;;;;;;;;;;; 379 ; 380 000000 010146 OPNFIL::MOV R1,-(SP) ; SAVE CONTENTS OF R1 381 000002 010267 000316 MOV R2,TEMP ; SAVE STARTING ADDRESS OF FILENAME 382 000006 012701 000326' MOV #NAMBUF,R1 ; GET THE LOCATION OF WHERE ITS GOING 383 000012 112211 MOVE: MOVB (R2)+,(R1) ; MOVE IT OVER 384 000014 121127 000056 CMPB (R1),#PERIOD ; IS CHAR A DELIMITOR 385 000020 001410 BEQ 1$ ; YES 386 000022 121127 000073 CMPB (R1),#SEMI ; IS CHAR A DELIMITOR 387 000026 001405 BEQ 1$ 388 000030 121127 000100 CMPB (R1),#100 ; IS CHAR A NUMBER 389 000034 002402 BLT 1$ ; BRANCH IF YES 390 000036 142711 000040 BICB #UPCSE,(R1) ; MAKE SURE ITS IN UPPER CASE 391 000042 005201 1$: INC R1 392 000044 121227 000000 CMPB (R2),#0 ; IS IT THE END 393 000050 001360 BNE MOVE ; CONTINUE IF NOT DONE 394 000052 166702 000246 SUB TEMP,R2 ; FIGURE FILNAME SIZE 395 000056 010267 000640 MOV R2,FDBSPT+10 ; STORE THE SIZE OF THE NAME 396 000062 132767 000004 001207' BITB #MDS,FLAG ; IS THIS AN XFER TO THE MDS 397 000070 001021 BNE 3$ ; YES 398 000072 OPEN$W #FDB ; OPEN THE FILE 399 000110 103004 BCC 2$ ; BRANCH IF ALLS WELL 400 000112 016700 000506 5$: MOV FDB+F.ERR,R0 ; SET UP FOR ERROR RECOVERY 401 000116 012601 MOV (SP)+,R1 402 000120 RETURN 403 000122 012601 2$: MOV (SP)+,R1 ; REPLACE R1 404 000124 152767 000001 001207' BISB #FILOPN,FLAG ; SET 'A FILE HAS BEEN OPENED' FLAG 405 000132 RETURN 406 ; WRKFIL-WORKING FILES MACRO M1110 07-JUN-79 11:27 PAGE 7-1 FCS ROUTINES 407 000134 3$: OPEN$R #FDB ; OPEN FILE FOR READING 408 000152 103757 BCS 5$ ; BRANCH IF ERROR 409 000154 105067 000373 CLRB FDB+F.RATT ; STOP CARRIAGE CONTROL 410 000160 000760 BR 2$ ; 411 ; WRKFIL-WORKING FILES MACRO M1110 07-JUN-79 11:27 PAGE 8 FCS ROUTINES 413 ; 414 ; 415 ;;;;;;;;;;;;;;;;;;;;;;;;;; 416 ; 417 ; READ AND WRITE A RECORD TO 418 ; DISK ROUTINE 419 ; 420 ; ENTRY: R1 MUST CONTAIN 421 ; ADDRESS OF THE RECORD 422 ; 423 ; RECSIZ MUST CONTAIN THE 424 ; RECORD LENGTH 425 ; 426 ; EXIT: R0 WILL CONTAIN ERROR CODE 427 ; CARRY WILL BE SET IF AN 428 ; ERROR WAS FOUND 429 ; 430 ;;;;;;;;;;;;;;;;;;;;;;;;;; 431 ; 432 000162 WRTREC::PUT$ #FDB,R1,RECSIZ ; WRITE THE RECORD 433 000204 103002 BCC 1$ ; BRANCH IF NO ERROR 434 000206 016700 000412 MOV FDB+F.ERR,R0 ; SET UP FOR ERROR RECOVERY 435 000212 1$: RETURN 436 ; 437 ; 438 ; 439 ; 440 000214 GETREC: GET$ #FDB ; READ A RECORD 441 000224 103014 BCC 1$ ; BRANCH IF NO ERROR 442 000226 122767 000000G 000370 CMPB #IE.EOF,FDB+F.ERR ; IS IT AN EOF 443 000234 000261 SEC 444 000236 001403 BEQ 2$ ; YES 445 000240 016700 000360 MOV FDB+F.ERR,R0 ; GET ERROR CODE 446 000244 000403 BR 3$ 447 000246 152767 000010 001207' 2$: BISB #ENDOF,FLAG ; SET END OF FILE FLAG 448 000254 3$: RETURN 449 000256 016701 000316 1$: MOV FDB+F.NRBD+2,R1 ; GET RECORD LOCATION 450 000262 016767 000310 000430' MOV FDB+F.NRBD,RECSIZ ; STORE RECORD SIZE 451 000270 000771 BR 3$ WRKFIL-WORKING FILES MACRO M1110 07-JUN-79 11:27 PAGE 9 FCS ROUTINES 453 ; 454 ;;;;;;;;;;;;;;;;;;;;;;;;;;; 455 ; 456 ; CLOSE FILE ROUTINE 457 ; 458 ; EXIT: CARRY WILL BE SET 459 ; ON ERROR 460 ; 461 ; R0 WILL CONTAIN 462 ; THE ERROR CODE 463 ; 464 ;;;;;;;;;;;;;;;;;;;;;;;;;;; 465 ; 466 000272 CLOSE:: CLOSE$ #FDB 467 000302 103002 BCC 1$ ; BRANCH IF NO ERROR INCURRED 468 000304 016700 000314 MOV FDB+F.ERR,R0 469 000310 142767 000001 001207' 1$: BICB #FILOPN,FLAG ; CLEAR 'A FILE IS OPEN' FLAG 470 000316 RETURN 471 ; WRKFIL-WORKING FILES MACRO M1110 07-JUN-79 11:27 PAGE 10 FCS ROUTINES 473 ; 474 ; 475 .EVEN 476 000320 123 131 060 DEV: .ASCII /SY0:/ 477 000004 DEVSIZ=.-DEV 478 .EVEN 479 000324 TEMP: .BLKW 480 000326 NAMBUF: .BLKB 15. 481 000345 RECBUF::.BLKB RECSZ 482 .EVEN 483 ; 484 ; 485 000552 FDB: FDBDF$ 486 000712 FDAT$A R.VAR,FD.CR,,-5. 487 000712 FDRC$A FD.PLC,RECBUF,RECSZ 488 000712 FDOP$A OUTLUN,FDBSPT 489 000712 FSRSZ$ 1,512.,WRKFIL 490 ; 491 ; 492 .EVEN 493 000712 000004 000320' FDBSPT: .WORD DEVSIZ,DEV 494 000716 000000 000000 .WORD 0,0 495 000722 000000 000326' .WORD 0,NAMBUF 496 ; 497 ; 498 ; PROCES-PROCESS DATA BUFFER MACRO M1110 07-JUN-79 11:27 PAGE 11 FCS ROUTINES 500 .TITLE PROCES-PROCESS DATA BUFFER 501 .SBTTL PROCESS DATA BUFFER 502 000000 .PSECT PROCES 503 .GLOBL PROCES 504 ; 505 ; 506 000015 RTN=015 ; RETURN 507 000012 LF=012 ; LINE FEED 508 000215 PARRTN==215 ; RETURN WITH PARITY 509 000212 PARLF==212 ; LINE FEED WITH PARITY 510 ; 511 ; 512 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 513 ; 514 ; THIS ROUTINE WILL BREAK A BUFFER UP INTO 515 ; SINGLE RECORDS AND WRITE THEN TO DISK. 516 ; OR READ RECORDS AND ASSEMBLE THEM INTO 517 ; A BUFFER 518 ; 519 ; ENTRY: R2 MUST CONTAIN THE BUFFER ADDRESS 520 ; 521 ; EXIT: IF AN ERROR OCCURED CARRY WILL BE SET 522 ; THE ERROR CODE WILL BE IN R0 523 ; 524 ; IF END OF FILE WAS FOUND THEN THE FLAG 525 ; BIT IN THE FLAG STATUS BYTE 526 ; WILL BE SET. 527 ; 528 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 529 ; 530 000000 010146 PROCES::MOV R1,-(SP) ; SAVE R1 531 000002 016701 000414 MOV LOCAL,R1 ; GET LAST LOCATION OUTPUT BUFFER 532 000006 010267 000412 MOV R2,STRBUF ; SAVE THE BUFFER LOCATION 533 000012 062702 000375 ADD #BFSZM1,R2 ; CALCULATE CHECKSUM LOCATION 534 000016 010267 000404 MOV R2,ENDBUF ; SAVE IT 535 000022 016702 000376 MOV STRBUF,R2 ; REPLACE BUFFER POSITION 536 000026 005202 INC R2 ; MOVE PAST THE STATUS BYTE 537 000030 132767 000004 001207' BITB #MDS,FLAG ; IS THIS AN 11 TO MDS TRANSFER 538 000036 001106 BNE NOVBUF ; YES 539 000040 132767 000002 001207' 1$: BITB #CNTFLG,FLAG ; IS BUFFER CONTINUATION SET 540 000046 001014 BNE NEXCHR ; YES! DONT TOUCH ANTHING 541 000050 132767 000020 001207' BITB #ADDLF,FLAG ; DID LAST BUFFER END WITH A 542 000056 001404 BEQ NEXREC ; BRANCH IF NO 543 000060 005202 INC R2 ; MOVE PAST LINE FEED 544 000062 142767 000020 001207' BICB #ADDLF,FLAG ; CLEAR MARKER 545 000070 105067 000334 NEXREC: CLRB RECSIZ ; RESET RECORD SIZE COUNTER 546 000074 012701 000345' MOV #RECBUF,R1 ; RESET RECORD BUFFER LOCATION 547 000100 121227 000015 NEXCHR: CMPB (R2),#RTN ; IS CHAR. A RETURN 548 000104 001426 BEQ WRITE ; WRITE RECORD TO DISK 549 000106 105712 TSTB (R2) ; IS CHAR A NULL 550 000110 001421 BEQ ADD1 ; FORGET IT 551 000112 112221 MOVB (R2)+,(R1)+ ; MOV CHAR TO RECORD BUFFER 552 000114 105267 000310 INCB RECSIZ ; REMEMBER IT WAS MOVED 553 000120 020267 000302 ENDYET: CMP R2,ENDBUF ; IS THE NEXT CHAR THE CHECK SUM 554 000124 001365 BNE NEXCHR ; NO! GET THE NEXT CHAR. 555 000126 022701 000345' CMP #RECBUF,R1 ; IS THERE DATA IN THE BUFFER 556 000132 001405 BEQ DONE1 ; NO! GET LOST PROCES-PROCESS DATA BUFFER MACRO M1110 07-JUN-79 11:27 PAGE 11-1 PROCESS DATA BUFFER 557 000134 152767 000002 001207' BISB #CNTFLG,FLAG ; SET CONTINUATION FLAG 558 000142 010167 000254 MOV R1,LOCAL ; STORE LOCAL OF OUTPUT BUFFER 559 000146 000241 DONE1: CLC 560 000150 012601 DEAD: MOV (SP)+,R1 ; POP R1 OFF THE STACK 561 000152 RETURN 562 ; 563 000154 005202 ADD1: INC R2 564 000156 000167 177736 JMP ENDYET 565 ; 566 000162 005202 WRITE: INC R2 ; MOVE TO THE NEXT CHARACTER 567 000164 020267 000236 CMP R2,ENDBUF ; IS POINTER PAST LAST CHAR 568 000170 002404 BLT 10$ ; BRANCH IF NO 569 000172 152767 000020 001207' BISB #ADDLF,FLAG ; REMEMBER TO REMOVE LF FROM NEXT BUFFER 570 000200 000404 BR 1$ 571 000202 121227 000012 10$: CMPB (R2),#LF ; IS IT A LINE FEED 572 000206 001001 BNE 1$ ; NO! 573 000210 005202 INC R2 574 000212 142767 000002 001207' 1$: BICB #CNTFLG,FLAG ; BE SURE BUF CONTINUE FLAG CLR 575 000220 010246 MOV R2,-(SP) ; SAVE R2 576 000222 012701 000345' MOV #RECBUF,R1 ; SET RECORD BUFFER ADD. FOR WRT 577 000226 016702 000176 MOV RECSIZ,R2 ; SET RECORD LENGTH FOR WRITE 578 000232 CALL WRTREC ; WRITE A RECORD 579 000236 012602 MOV (SP)+,R2 ; REPLACE BUFFER LOCATION 580 000240 103743 BCS DEAD ; BRANCH IF ERROR OCCURED 581 000242 020267 000160 2$: CMP R2,ENDBUF ; IS POINTER AT CHECKSUM 582 000246 002337 BGE DONE1 ;YES 583 000250 000167 177614 JMP NEXREC ; GO PROCES REST OF BUFFER 584 ; 585 ; 586 000254 162767 000004 000144 NOVBUF: SUB #4,ENDBUF ; ACCOUNT FOR SIX BYTE CHECKSUM 587 000262 132767 000020 001207' BITB #ADDLF,FLAG ; SHOULD A LINE FEED BE ADDED FORM 588 ; PREVIOUS BUFFER 589 000270 001050 BNE 12$ ; YES 590 000272 132767 000002 001207' BITB #CNTFLG,FLAG ; IS A RECORD ALREADY IN PROCESS 591 000300 001003 BNE 2$ ; YES 592 000302 004767 000214' 1$: JSR PC,GETREC ; GET A NEW RECORD 593 000306 103720 BCS DEAD ; BRANCH IF ERROR 594 000310 105767 000114 2$: TSTB RECSIZ ; IS ENTIRE RECORD MOVED 595 000314 001417 BEQ 4$ ; YES 596 000316 105367 000106 DECB RECSIZ 597 000322 152711 000200 BISB #PARITY,(R1) ; SET PARITY BIT 598 000326 112122 MOVB (R1)+,(R2)+ ; MOVE THE CHARACTER OVER 599 000330 026702 000072 CMP ENDBUF,R2 ; IS THE BUFFER FULL YET 600 000334 001365 BNE 2$ ; NO 601 000336 010167 000060 MOV R1,LOCAL ; SAVE LOCATION OF RECORD 602 000342 152767 000002 001207' BISB #CNTFLG,FLAG ; SET BUFFER CONTINUATION FLAG 603 000350 000167 177572 5$: JMP DONE1 604 000354 112722 000215 4$: MOVB #PARRTN,(R2)+ ; INSERT A RETURN CODE 605 000360 026702 000042 CMP ENDBUF,R2 ; IS THE BUFFER FULL 606 000364 001004 BNE 10$ ; NO! GO ADD A LINE FEED 607 000366 152767 000020 001207' BISB #ADDLF,FLAG ; SET 'ADD A LINE FEED TO NEXT BUFFER' 608 000374 000765 BR 5$ ; GET LOST 609 000376 112722 000212 10$: MOVB #PARLF,(R2)+ ; ADD LINE FEED 610 000402 026702 000020 CMP ENDBUF,R2 ; END OF BUFFER 611 000406 001335 BNE 1$ ; NO 612 000410 000757 BR 5$ ; YES 613 ; PROCES-PROCESS DATA BUFFER MACRO M1110 07-JUN-79 11:27 PAGE 11-2 PROCESS DATA BUFFER 614 000412 142767 000020 001207' 12$: BICB #ADDLF,FLAG 615 000420 000766 BR 10$ 616 ; 617 ; 618 ; 619 .EVEN 620 000422 LOCAL: .BLKW 621 000424 STRBUF: .BLKW 622 000426 ENDBUF::.BLKW 623 000430 RECSIZ::.BLKB 624 ; 625 ; 626 000170' .END KRSNA PROCES-PROCESS DATA BUFFER MACRO M1110 07-JUN-79 11:27 PAGE 11-3 SYMBOL TABLE ABORT = 000045 FD.CR = ****** GX GETBUF 000000RG 002 N.DID = 000024 STATUS 000306R 002 ADDLF = 000020 G FD.PLC= ****** GX GETCHR 000060R 002 N.DVNM= 000032 STOP 000636RG 002 ADD1 000154R 005 FILOPN= 000001 G GETREC 000214R 003 N.FID = 000000 STRBUF 000424R 005 ATTACH 000110R 002 FINISH= 000040 G G$$TPP= 000000 N.FNAM= 000006 S$$WPC= 000036 A$$CHK= 000000 FLAG 001207RG 002 G$$TTK= 000000 N.FTYP= 000014 S$$WPR= 000005 A$$CPS= 000000 FO.RD = ****** GX H$$RTZ= 000074 N.FVER= 000016 S$$YSZ= 004000 A$$NSI= 000000 FO.WRT= ****** GX IE.EOF= ****** GX N.NEXT= 000022 S.BFHD= 000020 A$$PRI= 000000 F$$LPP= 000000 IO.ATT= ****** GX N.STAT= 000020 S.FATT= 000016 A$$TRP= 000000 F$$LVL= 000001 IO.RNE= ****** GX N.UNIT= 000034 S.FDB = 000140 BFSZM1= 000375 G F.ACTL= 000076 IO.RPR= ****** GX OPNFIL 000000RG 003 S.FNAM= 000006 BUFSIZ= 000377 G F.ALOC= 000040 IO.WLB= ****** GX OUTEFN= 000001 S.FNB = 000036 BUF1 001254R 002 F.BBFS= 000062 IS.SUC= ****** GX OUTLUN= 000001 S.FNBW= 000017 CHKERR 000610R 002 F.BDB = 000070 I$$RAR= 000000 OUTPUT= 000047 S.FNTY= 000004 CHKSM 001202R 002 F.BGBC= 000057 I$$RDN= 000000 PARITY= 000200 S.FTYP= 000002 CHKSUM 000432R 002 F.BKDN= 000026 KRSNA 000170RG 002 PARLF = 000212 G S.NFEN= 000020 CKERR = 000002 F.BKDS= 000020 K$$CNT= 177546 PARRTN= 000215 G TEMP 000324R 003 CLOSE 000272RG 003 F.BKEF= 000050 K$$CSR= 177546 PAR$$$= 000027 TERMIN= 000003 CNTFLG= 000002 G F.BKP1= 000051 K$$IEN= 000115 PERIOD= 000056 TF.RAL= ****** GX C$$CDA= 000003 F.BKST= 000024 K$$LDC= 000001 PROCES 000000RG 005 TF.RNE= ****** GX C$$CKP= 000000 F.BKVB= 000064 K$$TPS= 000074 PROMPT 001210RG 002 TF.WAL= ****** GX C$$CSR= 172522 F.CHR = 000075 LD$DM = 000000 PUTBUF 000030R 002 TOMDS 000750R 002 C$$INT= 000000 F.CNTG= 000034 LD$DR = 000000 P$$D70= 000000 TRMPMT 001211R 002 C$$ORE= 004000 F.DFNB= 000046 LD$DX = 000000 P$$GMX= 000000 T$$ACR= 000000 C$$RSH= 177564 F.DSPT= 000044 LD$LP = 000000 P$$LAS= 000000 T$$BTW= 000000 C$$RUN= 000000 F.DVNM= 000134 LD$MT = 000000 P$$P11= 000001 T$$BUF= 000000 C$$TTY= 177564 F.EFBK= 000010 LD$PP = 000000 P$$RFL= 000000 T$$CCA= 000000 DATA = 000043 F.EFN = 000050 LD$PR = 000000 P$$RTY= 000000 T$$CCO= 000000 DEAD 000150R 005 F.EOBB= 000032 LD$TT = 000000 P$$R11= 000001 T$$CTR= 000000 DEV 000320R 003 F.ERR = 000052 LF = 000012 P$$SRF= 000000 T$$GMC= 000000 DEVSIZ= 000004 F.FACC= 000043 LNKEFN= 000002 G Q$$OPT= 000017 T$$GTS= 000000 DONE 000416R 002 F.FFBY= 000014 LNKLUN= 000002 G Q.IOAE= 000012 T$$KMG= 000000 DONE1 000146R 005 F.FNAM= 000110 LOCAL 000422R 005 Q.IOEF= 000006 T$$LWC= 000000 DOWN 001233R 002 F.FNB = 000102 L$$ASG= 000000 Q.IOFN= 000002 T$$M11= 000001 D$$H11= 000001 F.FTYP= 000116 L$$DRV= 000000 Q.IOLU= 000004 T$$RNE= 000000 D$$IAG= 000000 F.FVER= 000120 L$$PTO= 000036 Q.IOPL= 000014 T$$RPR= 000000 D$$ISK= 000000 F.HIBK= 000004 L$$P11= 000002 Q.IOPR= 000007 T$$RST= 000000 D$$L11= 000001 F.LUN = 000042 MCR = ****** GX Q.IOSB= 000010 T$$RUB= 000000 D$$SHF= 000000 F.MBCT= 000054 MDS = 000004 G RECBUF 000345RG 003 T$$SYN= 000000 D$$WCK= 000000 F.MBC1= 000055 MOVE 000012R 003 RECSIZ 000430RG 005 T$$TRW= 000000 D$$YNC= 000000 F.MBFG= 000056 M$$CRB= 000124 RECSZ = 000204 T$$VBF= 000000 D$$YNM= 000000 F.NRBD= 000024 M$$CRX= 000000 RTN = 000015 UP 001214R 002 ENDBUF 000426RG 005 F.NREC= 000030 M$$FCS= 000000 R$$DER= 000000 UPCSE = 000040 ENDOF = 000010 G F.OVBS= 000030 M$$MGE= 000000 R$$EXV= 000000 V$$CTR= 000404 ENDYET 000120R 005 F.RACC= 000016 M$$MUP= 000000 R$$LKL= 000001 V$$RSN= 000031 END1 000662R 002 F.RATT= 000001 M$$OVR= 000000 R$$MOF= 000000 WRITE 000162R 005 EOF = 000044 F.RCNM= 000034 NAMBUF 000326R 003 R$$M11= 000001 WRTREC 000162RG 003 ERRCNT= 000010 F.RCTL= 000017 NAME = 000041 R$$NDC= 000006 XFRERR 001206R 002 ERRDSW 000426R 002 F.RSIZ= 000002 NBFPMT= 000001 R$$NDH= 000144 X$$DBT= 000000 ERROR 001204R 002 F.RTYP= 000000 NEXBF1 000254R 002 R$$NDL= 000001 $$$ARG= 000002 EXIT = 000046 F.SEQN= 000100 NEXBUF 000246R 002 R$$SND= 000000 $$$OST= 000014 EXIT1 000674R 002 F.SPDV= 000072 NEXCHR 000100R 005 R$$X11= 000001 .CLOSE= ****** G E$$DVC= 000000 F.SPUN= 000074 NEXFIL 000236RG 002 R$$11M= 000000 .FSRCB= ****** G E$$NSI= 000000 F.STBK= 000036 NEXREC 000070R 005 R$$6OF= 000000 .GET = ****** G E$$PER= 000000 F.UNIT= 000136 NOVBUF 000254R 005 R$$611= 000001 .OPEN = ****** G E$$XPR= 000000 F.URBD= 000020 NOVSIZ= 000371 G R.VAR = ****** GX .PUT = ****** G FDB 000552R 003 F.VBN = 000064 N$$LDV= 000001 SEMI = 000073 ...PC1= 000552R 003 FDBSPT 000712R 003 F.VBSZ= 000060 N$$MOV= 000041 SNDTRM 000140R 002 ...PC2= 000712R 003 PROCES-PROCESS DATA BUFFER MACRO M1110 07-JUN-79 11:27 PAGE 11-4 SYMBOL TABLE ...TPC= 000020 . ABS. 000000 000 000000 001 MAIN 001653 002 WRKFIL 000726 003 $$FSR1 001020 004 PROCES 000431 005 ERRORS DETECTED: 0 VIRTUAL MEMORY USED: 6310 WORDS ( 25 PAGES) DYNAMIC MEMORY: 7028 WORDS ( 27 PAGES) ELAPSED TIME: 00:01:53 BYMDS,BYMDS/-SP=SY:[1,1]EXEMC/ML,[200,200]RSXMC/PA:1,SY:[5,3]LIB/ML,BYMDS