REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 2 1 .TITLE REAL TIME OPERATING SYSTEM 2 .LIST SYM 3 .NLIST ME 4 .MCALL ACTBT$,INSTAL$,QUEIO$C 5 .MCALL OR,PUSH,POP,CALL,RET,AND 6 .MCALL JCC,JCS,JEQ,JGE,JGT,JHI,JHIS,JLE,JLO,JLOS,JLT 7 .MCALL JMI,JNE,JPL,JVC,JVS 8 .MCALL ADDF$,ATOF$,ATOI$,CLRF$,CMPF$,COS$,DIVF$,ETOA$ 9 .MCALL EXP$,FIX$,FLT$,FTOA$,ITOA$,JTOA$,LOG$,MOVF$,MULF$ 10 .MCALL NEGF$,RDIV$,SIN$,SQRT$,SUBF$,TRANSI$,TRANSF$ 11 .MCALL PFOR,BPOS 12 .ENABL CRF 13 .ENABL AMA 14 000000 .PSECT 15 ; 16 177564 XCSRT=177564 17 177566 XBUFT=177566 18 ; 19 177560 RCSR3=177560 20 177562 RBUF3=177562 21 177564 XCSR3=177564 22 177566 XBUF3=177566 23 ; 24 177570 RCSR2=177570 25 177572 RBUF2=177572 26 177574 XCSR2=177574 27 177576 XBUF2=177576 28 ; 29 176510 RCSR1=176510 30 176512 RBUF1=176512 31 176514 XCSR1=176514 32 176516 XBUF1=176516 33 ; 34 176500 RCSR0=176500 35 176502 RBUF0=176502 36 176504 XCSR0=176504 37 176506 XBUF0=176506 38 ; 39 172520 MTS=172520 40 172522 MTC=172522 41 172524 MTBRC=172524 42 172526 MTCMA=172526 43 ; 44 002020 RECLEN=1040. 45 ; 46 ;.=4 47 000004' .=.+4 48 000004 005246' 000340 .WORD TOUT,340 49 000010 005270' 000340 .WORD ILLG,340 REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 2-1 50 000014 005312' 000340 .WORD BPT,340 51 000020 005332' 000340 .WORD IOT,340 52 ;.=24 53 000024 005234' 000340 .WORD POWER,340 ;POWER UP RESTART 54 ; 55 ;.=30 56 000030 007214' 000300 .WORD M.EMT,300 57 ; 58 ;.=34 59 000034 004572' 000340 .WORD TP,340 60 ; 61 ;.=60 62 000060' .=.+20 63 000060 006660' 000000 .WORD INP3,0 64 ; 65 ; 66 000064 005632' 000000 .WORD OUT3,0 ;CRT DISPLAY VECTOR 67 ; 68 ; 69 ;.=100 70 000100' .=.+10 71 000100 004070' LTC: .WORD CLK ;CLOCK LEVEL INT 72 ; 73 000102 000000 .WORD 0 ;PSW 74 ; 75 ;.=114 76 000114' .=.+10 77 ; 78 000114 000000G 000340 .WORD REC,340 79 ; 80 ;.=124 81 000124' .=.+4 82 000124 000000G 000000 .WORD TODC,0 83 ;.=140 84 000140' .=.+10 85 ; 86 000140 006066' 000340 .WORD INP2,340 87 000144 005722' 000340 .WORD OUT2,340 88 ;.=224 89 000224' .=.+54 90 000224 005426' 000340 .WORD TINT,340 ;USED TO BE SHADES 91 000230 006066' 000340 .WORD INP2,340 92 000234 005722' 000340 .WORD OUT2,340 93 ;.=244 94 000244' .=.+4 95 000244 005354' 000340 .WORD FIS,340 96 ;.=300 97 000300' .=.+30 98 000300 004462' 000340 .WORD OFTI,340 REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 2-2 99 000304 004462' 000340 .WORD OFTI,340 100 ; 101 000310 004462' 000340 .WORD OFTI,340 102 000314 004462' 000340 .WORD OFTI,340 REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 3 104 ;.=400 105 000400' .=.+60 106 ; 107 ; START UP 108 ; 109 000400 000005 STA:: RESET 110 000402 012706 117770 MOV #117770,SP ;INITIALIZE STACK(TOP OF 20K-8) 111 ; 112 ; INITIALIZATION OF RAM AREA 113 ; 114 000406 012700 000060 MOV #48.,R0 ;BASE LEVEL VECTORS 115 000412 012701 015244' MOV #BTSK,R1 116 000416 012721 004460' 1$: MOV #OFT,(R1)+ 117 000422 077003 SOB R0,1$ 118 ; 119 000424 005037 015404' CLR BSTAT 120 000430 005037 015406' CLR BSTAT+2 121 000434 005037 015410' CLR BSTAT+4 122 ; 123 000440 012700 001154' MOV #28$,R0 124 000444 012701 000054 MOV #44.,R1 125 000450 012702 015412' MOV #AVLB,R2 126 000454 112022 2$: MOVB (R0)+,(R2)+ 127 000456 077102 SOB R1,2$ 128 ; 129 000460 012700 000047 MOV #39.,R0 130 000464 012701 015446' MOV #DAY,R1 131 000470 112721 000040 3$: MOVB #40,(R1)+ 132 000474 077003 SOB R0,3$ 133 000476 112737 000072 015454' MOVB #72,HR+2 134 000504 112737 000072 015457' MOVB #72,MIN+2 135 ; 136 000512 012737 177777 015524' MOV #177777,LAVL0 ;QUEIO POINTERS 137 000520 012737 177777 015640' MOV #177777,LAVL1 138 000526 012737 015526' 015526' MOV #HEAD0,HEAD0 139 000534 012737 015632' 015530' MOV #TAIL0,HEAD0+2 140 000542 012737 015526' 015634' MOV #HEAD0,TAIL0+2 141 000550 012737 015632' 015632' MOV #TAIL0,TAIL0 142 000556 012737 015642' 015642' MOV #HEAD1,HEAD1 143 000564 012737 015746' 015644' MOV #TAIL1,HEAD1+2 144 000572 012737 015642' 015750' MOV #HEAD1,TAIL1+2 145 000600 012737 015746' 015746' MOV #TAIL1,TAIL1 146 000606 012737 177777 015754' MOV #177777,LAVL2 ;QUEIO POINTERS 147 000614 012737 177777 016070' MOV #177777,LAVL3 148 000622 012737 015756' 015756' MOV #HEAD2,HEAD2 149 000630 012737 016062' 015760' MOV #TAIL2,HEAD2+2 150 000636 012737 015756' 016064' MOV #HEAD2,TAIL2+2 151 000644 012737 016062' 016062' MOV #TAIL2,TAIL2 152 000652 012737 016072' 016072' MOV #HEAD3,HEAD3 REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 3-1 153 000660 012737 016176' 016074' MOV #TAIL3,HEAD3+2 154 000666 012737 016072' 016200' MOV #HEAD3,TAIL3+2 155 000674 012737 016176' 016176' MOV #TAIL3,TAIL3 156 ; 157 ; 158 000702 012700 000004 MOV #4,R0 159 000706 012701 016202' MOV #BSEC,R1 160 000712 005021 4$: CLR (R1)+ 161 000714 077002 SOB R0,4$ 162 ; 163 000716 012700 000024 MOV #20.,R0 164 000722 012701 016212' MOV #ALLK,R1 165 000726 012721 004460' 5$: MOV #OFT,(R1)+ 166 000732 077003 SOB R0,5$ 167 000734 012737 004322' 016232' MOV #RTCLK,UNOS 168 ; 169 000742 012737 000006 016262' MOV #6,HUNK 170 000750 012737 000012 016264' MOV #10.,UNOK 171 000756 012737 000003 016266' MOV #3,TRIK 172 000764 012737 000005 016270' MOV #5,FIFTK 173 ; 174 000772 012700 000010 MOV #8.,R0 175 000776 012701 016272' MOV #FRST0,R1 176 001002 005021 6$: CLR (R1)+ 177 001004 077002 SOB R0,6$ 178 ; 179 001006 012700 000142 MOV #98.,R0 180 001012 012701 016320' MOV #IBUF3,R1 181 001016 112721 000040 7$: MOVB #40,(R1)+ 182 001022 077003 SOB R0,7$ 183 001024 012737 016320' 016312' MOV #IBUF3,CRSR3 184 001032 012737 016352' 016344' MOV #IBUF2,CRSR2 185 001040 012737 016404' 016376' MOV #IBUF1,CRSR1 186 001046 012737 016436' 016430' MOV #IBUF0,CRSR0 187 ; 188 001054 012700 000010 MOV #8.,R0 189 001060 012701 016462' MOV #FPTPF,R1 190 001064 005021 8$: CLR (R1)+ 191 001066 077002 SOB R0,8$ 192 ; 193 001070 012737 016516' 016504' MOV #TAIL,HEAD ;TAPE GUY 194 001076 012737 170000 016502' MOV #170000,TAVL 195 001104 012737 016530' 016520' MOV #TBUF,TBUFP 196 001112 012737 020550' 016522' MOV #TBUF+RECLEN,TBUFP+2 197 001120 013737 016522' 016524' MOV TBUFP+2,TBUFP+4 198 001126 062737 002020 016524' ADD #RECLEN,TBUFP+4 199 001134 013737 016524' 016526' MOV TBUFP+4,TBUFP+6 200 001142 062737 002020 016526' ADD #RECLEN,TBUFP+6 201 ; REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 3-2 202 ; END OF RAM INITIALIZATION 203 ; 204 001150 000137 000000G JMP BEGIN 205 ; 206 001154 015 012 28$: .BYTE 15,12 207 001156 115 101 103 .ASCII *MACHINE USAGE: * 208 001175 040 040 040 .ASCII * %* 209 001202 015 012 .BYTE 15,12 REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 4 211 ; 212 001204 015 012 29$: .BYTE 15,12 213 001206 124 101 123 .ASCII *TASK # TIMEOUT* 214 001226 015 012 .BYTE 15,12 215 ; 216 ; BASE LEVEL 217 ; 218 ; 219 ; BASE LEVEL LOOP 220 ; 221 001230 005037 000000G BASEL: CLR BFLAG ;CLEAR TASK ACTIVE FLAG 222 001234 005737 015404' TST BSTAT 223 001240 001402 BEQ 10$ ;NOTASKS ACTIVE 224 001242 CALL BASES ;TASK ACTIVE, FIND IT & DO IT 225 001246 005737 015406' 10$: TST BSTAT+2 226 001252 001402 BEQ 20$ 227 001254 CALL BASES 228 001260 005737 015410' 20$: TST BSTAT+4 229 001264 001402 BEQ 30$ 230 001266 CALL BASES 231 001272 005237 016464' 30$: INC USAGE 232 001276 001354 BNE BASEL ;LOOP COMPLETE 233 001300 005237 016466' INC USAGE+2 ;CARRY OVER 234 001304 000751 BR BASEL 235 ; 236 ; BASE LEVEL SEARCH AND EXECUTE 237 ; 238 ; 239 001306 005037 000000G BASES:: CLR BFLAG ;CLEAR TASK ACTIVE FLAG 240 001312 PFOR BSTAT,R0 241 001352 000405 BR 10$ ;NO TASK FOUND 242 001354 010037 000000G MOV R0,ACTTSK ;ACTIVE TASK-1 243 001360 CALL @BTSK(R0) ;CALL TASK 244 001364 000750 BR BASES ;SCAN AGAIN 245 001366 10$: PFOR BSTAT+2,R0 246 001426 000407 BR 20$ ;NO TASK FOUND 247 001430 062700 000040 ADD #32.,R0 248 001434 010037 000000G MOV R0,ACTTSK ;ACTIVE TASK-1 249 001440 CALL @BTSK(R0) ;CALL TASK 250 001444 000720 BR BASES ;SCAN ENTIRE TASK LIST AGAIN 251 001446 20$: PFOR BSTAT+4,R0 252 001506 RET ;NO TASK FOUND 253 001510 062700 000100 ADD #64.,R0 254 001514 010037 000000G MOV R0,ACTTSK ;ACTIVE TASK-1 255 001520 CALL @BTSK(R0) ;CALL TASK 256 001524 000670 BR BASES ;LOOP BACK 257 ; 258 ; 259 ; TABLE USED FOR BIT INDEXING REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 4-1 260 ; 261 ; LEFT TO RIGHT SCAN 262 ; 263 001526 100000 BPOS:: .WORD 100000 264 001530 040000 .WORD 40000 265 001532 020000 .WORD 20000 266 001534 010000 .WORD 10000 267 001536 004000 .WORD 4000 268 001540 002000 .WORD 2000 269 001542 001000 .WORD 1000 270 001544 000400 .WORD 400 271 001546 000200 .WORD 200 272 001550 000100 .WORD 100 273 001552 000040 .WORD 40 274 001554 000020 .WORD 20 275 001556 000010 .WORD 10 276 001560 000004 .WORD 4 277 001562 000002 .WORD 2 278 001564 000001 .WORD 1 279 ; 280 ; 281 001566 013701 016202' RFCLK: MOV BSEC,R1 282 001572 012702 015460' MOV #SEC,R2 283 001576 CALL BTOA 284 001602 013701 016204' MOV BMIN,R1 285 001606 012702 015455' MOV #MIN,R2 286 001612 CALL BTOA 287 001616 013701 016206' MOV BHR,R1 288 001622 012702 015452' MOV #HR,R2 289 001626 CALL BTOA 290 001632 005000 CLR R0 291 001634 013701 016210' MOV BDAY,R1 292 001640 071027 000144 DIV #100.,R0 293 001644 052700 000060 BIS #60,R0 294 001650 110037 015446' MOVB R0,DAY 295 001654 012702 015447' MOV #DAY+1,R2 296 001660 CALL BTOA 297 001664 RET 298 ; 299 ; BINARY BYTE TO ASCII 300 ; TAKES NUMBER IN R1(LESS THAN 100.) 301 ; AND PUTS ASCII INTO (R2) AND 1(R2) 302 ; THRASHES R0,R1,R2 303 ; 304 001666 005000 BTOA: CLR R0 305 001670 071027 000012 DIV #10.,R0 306 001674 052700 000060 BIS #60,R0 307 001700 052701 000060 BIS #60,R1 308 001704 110012 MOVB R0,(R2) REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 4-2 309 001706 110162 000001 MOVB R1,1(R2) 310 001712 RET 311 ; 312 ; 313 ; THIS IS THE ECHO FOR MONITOR 314 ; 315 ; TELETYPE ECHOS 316 ; 317 001714 ECOT0: QUEIO$C 0,CRSR0,CRSR0 318 002022 RET 319 ; 320 002024 ECOT1: QUEIO$C 1,CRSR1,CRSR1 321 002132 RET 322 ; 323 002134 ECOT2: QUEIO$C 2,CRSR2,CRSR2 324 002242 RET 325 ; 326 002244 ECOT3: QUEIO$C 3,CRSR3,CRSR3 327 002352 RET 328 ; 329 ; VIDEO ECHOS 330 ; 331 002354 ECOV0: QUEIO$C 0,#BBK0,#LMT0 332 002462 RET 333 ; 334 002464 ECOV1: QUEIO$C 1,#BBK1,#LMT1 335 002572 RET 336 ; 337 002574 ECOV2: QUEIO$C 2,#BBK2,#LMT2 338 002702 RET 339 ; 340 002704 ECOV3: QUEIO$C 3,#BBK3,#LMT3 341 003012 RET 342 ; 343 ; 344 ; 345 003014 176504 176514 177574 XCSR: .WORD XCSR0,XCSR1,XCSR2,XCSR3 346 ; 347 ; 348 ; 349 ; 350 ; INSERT TASK - INSERTS A TASK INTO THE LINKED LIST BEHIND 351 ; THE LAST LINK INTO THE NEXT AVAILABLE LINK 352 ; AND RESETS THE AVAILABLE FLAG FOR THAT LINK. 353 ; CALLED BY QUEIOX. 354 ; R0 IS WORK REG 355 ; R1 IS WORK REG 356 ; R3 IS TASK POINTER 357 ; R4 IS PORT # REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 4-3 358 ; R5 IS WORK REG 359 ; 360 ; 361 003024 INSRT: PUSH R0 362 003026 PUSH R1 363 003030 PUSH R2 364 003032 PUSH R5 365 003034 012700 000021 MOV #21,R0 ;LINK SEARCH LIMIT 366 003040 016401 003224' MOV PHEAD(R4),R1 ;IST LINK IS (R1) 367 003044 062701 000002 ADD #2,R1 368 003050 021164 003244' 15$: CMP (R1),PTAIL(R4) ;LAST LINK? 369 003054 001406 BEQ 10$ ;YES 370 003056 011101 MOV (R1),R1 ;NEXT LINK INTO R1 371 003060 062701 000002 ADD #2,R1 ;FOLLOWING LINK POINTER 372 003064 005300 DEC R0 ;CHECK OVERRUN 373 003066 001444 BEQ 20$ ;LINK OVERRUN 374 003070 000767 BR 15$ ;NEXT LINK 375 003072 10$: PFOR @PLAVL(R4),R2 ;FIND FREE LINK 376 003132 000420 BR 24$ ;TRAP OUT 377 003134 006302 ASL R2 ;DOUBLE WORD ADJUSTMENT 378 003136 016405 003234' MOV PLNK(R4),R5 379 003142 060205 ADD R2,R5 380 003144 010315 MOV R3,(R5) ;INSERT TASK 381 003146 066402 003234' ADD PLNK(R4),R2 ;R2 IS POINTER 382 003152 010211 MOV R2,(R1) ;PREDESSESOR'S POINTER 383 003154 016462 003244' 000002 MOV PTAIL(R4),2(R2) ;TAIL POINTER 384 003162 23$: POP R5 385 003164 POP R2 386 003166 POP R1 387 003170 POP R0 388 003172 RET 389 003174 104461 24$: TRAP 61 ;NO LINKS AVAILABLE 390 003176 000771 BR 23$ 391 003200 104462 20$: TRAP 62 ;LINK SEARCH OVERRUN 392 003202 000767 BR 23$ 393 ; 394 ; 395 003204 015522' 015636' 015752' PSCR: .WORD SCR0,SCR1,SCR2,SCR3 396 003214 015524' 015640' 015754' PLAVL: .WORD LAVL0,LAVL1,LAVL2,LAVL3 397 003224 015526' 015642' 015756' PHEAD: .WORD HEAD0,HEAD1,HEAD2,HEAD3 398 003234 015532' 015646' 015762' PLNK: .WORD LNK0,LNK1,LNK2,LNK3 399 003244 015632' 015746' 016062' PTAIL: .WORD TAIL0,TAIL1,TAIL2,TAIL3 400 ; 401 ; 402 ; 403 ; 404 ; EXECUTE ROUTINES - EXECUTES THE FIRST TASK OF THE LINKED LIST 405 ; AND FREEES THE LINK 406 ; REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 4-4 407 003254 005037 177560 EXC3: CLR RCSR3 408 003260 005337 016312' DEC CRSR3 ;FOR TTY ECHO 409 003264 012704 000006 MOV #6,R4 410 003270 CALL EXC 411 003274 005237 016312' INC CRSR3 412 003300 012737 000100 177560 MOV #100,RCSR3 413 003306 RET 414 ; 415 003310 005037 177570 EXC2: CLR RCSR2 416 003314 005337 016344' DEC CRSR2 ;FOR TTY ECHO 417 003320 012704 000004 MOV #4,R4 418 003324 CALL EXC 419 003330 005237 016344' INC CRSR2 420 003334 012737 000100 177570 MOV #100,RCSR2 421 003342 RET 422 ; 423 003344 005037 176510 EXC1: CLR RCSR1 424 003350 005337 016376' DEC CRSR1 ;FOR TTY ECHO 425 003354 012704 000002 MOV #2,R4 426 003360 CALL EXC 427 003364 005237 016376' INC CRSR1 428 003370 012737 000100 176510 MOV #100,RCSR1 429 003376 RET 430 ; 431 003400 005037 176500 EXC0: CLR RCSR0 432 003404 005337 016430' DEC CRSR0 ;FOR TTY ECHO 433 003410 012704 000000 MOV #0,R4 434 003414 CALL EXC 435 003420 005237 016430' INC CRSR0 436 003424 012737 000100 176500 MOV #100,RCSR0 437 003432 RET 438 ; 439 ; R0 IS WORK REG 440 ; R1 IS WORK REG 441 ; R4 IS PORT # 442 ; R5 IS WORK REG 443 ; 444 003434 012737 000004 000000G EXC: MOV #4,TPKNT ;THIS IS SPECIAL FOR TELIM 445 003442 016401 003224' MOV PHEAD(R4),R1 ;ADDRESS OF FIRST LINK INTO R1 446 003446 062701 000002 ADD #2,R1 447 003452 010105 MOV R1,R5 ;SAVE @POINTER OF FIRST LINK ADDRESS 448 003454 011101 MOV (R1),R1 ;R1 HAS ADDRESS OF FIRST LINK 449 003456 020164 003244' CMP R1,PTAIL(R4) ;ANY REQUESTS? 450 003462 001415 BEQ 22$ ;NO REQUESTS 451 003464 010102 MOV R1,R2 ;SAVE ADDRESS OF LINK 452 003466 012174 003204' MOV (R1)+,@PSCR(R4) ;TASK POINTER TO SCR1 453 003472 011115 MOV (R1),(R5) ;QUEUE NEXT LINK 454 003474 166402 003234' SUB PLNK(R4),R2 ;FIND LINK # 455 003500 006202 ASR R2 ;ADJUST TO WORD INDEX FROM DWORD REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 4-5 456 003502 056274 001526' 003214' BIS BPOS(R2),@PLAVL(R4) ;SET LINK AVAILABLE 457 003510 017405 003204' MOV @PSCR(R4),R5 458 003514 CALL (R5) ;DO TASK 459 003516 22$: RET 460 ; REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 5 462 ; 463 ; TAPE LINK FIND 464 ; RETURNS LINK # IN R2 465 ; SKIPS ONE WORD ON RETURN IF NO LINK FOUND 466 ; 467 003520 012702 000004 TFIND: MOV #4,R2 ;COUNTER 468 003524 012700 016504' MOV #HEAD,R0 469 003530 021027 016516' 1$: CMP (R0),#TAIL ;LAST LINK? 470 003534 001404 BEQ 2$ 471 003536 005302 DEC R2 472 003540 001433 BEQ 3$ 473 003542 011000 MOV (R0),R0 ;NEXT GUY 474 003544 000771 BR 1$ 475 003546 2$: PFOR TAVL,R1 ;WHICH LINK AVL? 476 003606 000414 BR 4$ 477 003610 010102 MOV R1,R2 ;SAVE 478 003612 012761 016516' 016506' MOV #TAIL,TLNK(R1) ;CONNECT NEW LINK 479 003620 062701 016506' ADD #TLNK,R1 ;FORM ADDRESS 480 003624 010110 MOV R1,(R0) ;REPOINT OLD LINK 481 003626 RET ;LINK IN R2 482 ; 483 003630 104463 3$: TRAP 63 ;LINK SEARCH OVR 484 003632 062716 000002 5$: ADD #2,(SP) ;ERROR RETURN 485 003636 RET 486 ; 487 003640 104464 4$: TRAP 64 ;NO FREE LINKS 488 003642 000773 BR 5$ 489 ; 490 003644 032737 000004 172520 TDO: BIT #4,MTS ;WRITE RING PRESENT? 491 003652 001402 BEQ 1$ ;YES, ITS KOOL 492 003654 104470 TRAP 70 ;#8 - NO WRITE RING 493 003656 RET 494 003660 023727 016504' 016516' 1$: CMP HEAD,#TAIL ;ANY MORE? 495 003666 001431 BEQ 7$ ;NO BYE 496 003670 013700 016504' MOV HEAD,R0 497 003674 010003 MOV R0,R3 ;SAVE 498 003676 162700 016506' SUB #HEAD+2,R0 ;LINK # 499 003702 032737 000001 172520 BIT #1,MTS ;TAPE READY 500 003710 001421 BEQ 6$ ;ERROR 501 003712 011337 016504' MOV (R3),HEAD ;BYPASS LINK 502 003716 056037 001526' 016502' BIS BPOS(R0),TAVL ;MAKE AVL 503 003724 016037 016520' 172526 MOV TBUFP(R0),MTCMA ;LOAD ADDRESS 504 003732 012702 002020 MOV #RECLEN,R2 ;RECORD LENGTH(1026. FOR TELEM) 505 003736 005402 NEG R2 ;2'S COMP 506 003740 010237 172524 MOV R2,MTBRC ;COUNTER 507 003744 012737 060105 172522 MOV #60105,MTC ;DO IT 508 003752 7$: RET 509 ; 510 003754 104465 6$: TRAP 65 REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 5-1 511 003756 RET 512 ; 513 003760 SNITCH: QUEIO$C 3,#BBY,#BBYE 514 004066 RET REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 6 516 ; 517 ; CLOCK LEVEL TURF 518 ; 519 ; CLOCK LEVEL MONITOR - OVERSEER OF REAL TIME TASKS 520 ; 521 ; 522 ; FIRST TASKS LIST IS THE 16.6 MS TASKS 523 004070 CLK: PUSH R0 524 004072 PUSH R1 525 004074 PUSH R2 526 004076 PUSH R3 527 004100 PUSH R4 528 004102 PUSH R5 529 004104 CALL @ALLK 530 004110 CALL @ALLK+2 531 004114 CALL @ALLK+4 532 004120 CALL @ALLK+6 533 004124 005337 016262' DEC HUNK ;TIME FOR 100MS TASKS? 534 004130 001065 BNE 10$ ;NO 535 004132 012737 000006 016262' MOV #6,HUNK ;RESET HUNDREDS COUNTER 536 004140 CALL @HUNM 537 004144 CALL @HUNM+2 538 004150 CALL @HUNM+4 539 004154 CALL @HUNM+6 540 004160 005337 016264' DEC UNOK ;TIME FOR 1 SECOND TASKS? 541 004164 001047 BNE 10$ ;NO 542 004166 012737 000012 016264' MOV #10.,UNOK ;RESET SECOND COUNTER 543 004174 CALL @UNOS ;REAL TIME CLOCK 544 004200 CALL @UNOS+2 545 004204 CALL @UNOS+4 546 004210 CALL @UNOS+6 547 004214 005337 016266' DEC TRIK ;TIME FOR 3 SECOND TASKS? 548 004220 001031 BNE 10$ ;NO 549 004222 012737 000003 016266' MOV #3,TRIK 550 004230 CALL @TRIS 551 004234 CALL @TRIS+2 552 004240 CALL @TRIS+4 553 004244 CALL @TRIS+6 554 004250 005337 016270' DEC FIFTK ;TIME FOR 15 SECOND TASKS? 555 004254 001013 BNE 10$ ;NO 556 004256 012737 000005 016270' MOV #5,FIFTK 557 004264 CALL @FIFTS ;COOLING TOWER CONTROL LOOPS 558 004270 CALL @FIFTS+2 559 004274 CALL @FIFTS+4 560 004300 CALL @FIFTS+6 561 004304 10$: POP R5 562 004306 POP R4 563 004310 POP R3 564 004312 POP R2 REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 6-1 565 004314 POP R1 566 004316 POP R0 567 004320 000002 RTI 568 ; REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 7 570 ; 571 ; REAL TIME TICKY-TICKY 572 ; 573 004322 RTCLK: ACTBT$ 1 ;REFRESH ASCII CLOCK 574 004344 ACTBT$ 2 ;TIME CHECK 575 004366 005237 016202' INC BSEC 576 004372 022737 000074 016202' CMP #60.,BSEC 577 004400 001401 BEQ 10$ 578 004402 000425 BR 16$ ;RREFRESH 579 004404 005037 016202' 10$: CLR BSEC 580 004410 005237 016204' INC BMIN 581 004414 022737 000074 016204' 15$: CMP #60.,BMIN 582 004422 001401 BEQ 17$ 583 004424 000414 BR 16$ 584 004426 005037 016204' 17$: CLR BMIN 585 004432 005237 016206' INC BHR 586 004436 022737 000030 016206' CMP #24.,BHR 587 004444 003004 BGT 16$ 588 004446 005037 016206' CLR BHR 589 004452 005237 016210' INC BDAY 590 004456 16$: RET 591 ; 592 ; 593 004460 OFT: RET 594 004462 000002 OFTI: RTI 595 ; 596 004464 005737 000000G BAUD: TST BFLAG ;TASK ACTIVE? 597 004470 001431 BEQ 1$ ;NO 598 004472 005337 000000G DEC TSKKT 599 004476 001034 BNE 2$ ;ITS COOL 600 ; 601 004500 013701 000000G MOV ACTTSK,R1 ;SOMEBODY IN TROUBLE 602 004504 005201 INC R1 ;JIVE IT 603 004506 012702 000000G MOV #BBOY,R2 ;POINTER 604 004512 CALL BTOA 605 004516 ACTBT$ 35. ;MUST QUEIO IN BASE LEVEL 606 004544 012737 004460' 016212' MOV #OFT,ALLK ;SHUT SELF OFF 607 004552 RET 608 ; 609 004554 012737 000777 000000G 1$: MOV #777,BFLAG ;START TIMER 610 004562 013737 000000G 000000G MOV MAXTSK,TSKKT ;SET COUNTER 611 004570 2$: RET 612 ; REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 8 614 ; 615 ; TRAP HANDLER 616 ; 617 004572 TP:: PUSH R2 618 004574 010602 MOV SP,R2 619 004576 062702 000002 ADD #2,R2 ;SKIP OVER OLD VALUE 620 004602 011202 MOV (R2),R2 ;RETURN ADDRESS IN R2 621 004604 162702 000002 SUB #2,R2 ;POINTS TO ASCII # 622 004610 PUSH R0 623 004612 PUSH R1 624 004614 012700 004760' MOV #START,R0 625 004620 012701 000016 MOV #14.,R1 626 004624 032737 000200 177564 10$: BIT #200,XCSRT ;TRANSMITT READY? 627 004632 001774 BEQ 10$ ;NO 628 004634 112037 177566 MOVB (R0)+,XBUFT ;TRANSMIT 629 004640 077107 SOB R1,10$ 630 004642 032737 000200 177564 20$: BIT #200,XCSRT 631 004650 001774 BEQ 20$ 632 004652 111237 177566 MOVB (R2),XBUFT ;TRAP # 633 004656 032737 000200 177564 21$: BIT #200,XCSRT 634 004664 001774 BEQ 21$ 635 004666 112737 000040 177566 MOVB #40,XBUFT 636 004674 012701 000014 MOV #12.,R1 ;TIME 637 004700 012700 015446' MOV #DAY,R0 638 004704 032737 000200 177564 22$: BIT #200,XCSRT 639 004712 001774 BEQ 22$ 640 004714 112037 177566 MOVB (R0)+,XBUFT 641 004720 077107 SOB R1,22$ 642 004722 012700 004776' MOV #END-1,R0 643 004726 012701 000002 MOV #2,R1 ;FOR 644 004732 032737 000200 177564 30$: BIT #200,XCSRT 645 004740 001774 BEQ 30$ 646 004742 112037 177566 MOVB (R0)+,XBUFT 647 004746 077107 SOB R1,30$ 648 004750 POP R1 649 004752 POP R0 650 004754 POP R2 651 004756 000002 RTI 652 ; 653 004760 012 015 START: .BYTE 12,15 654 004762 052 052 052 .ASCII /*** ALARM # / 655 004776 012 015 .BYTE 12,15 656 004777' END=.-1 657 ; 658 ; 659 ; 660 005000 041710 000000 FPHUN: .FLT2 100. 661 ; 662 005004 042550 140000 FREE: .FLT2 931 REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 8-1 663 ; 664 005010 005746 DUMP: TST -(SP) 665 005012 010616 MOV SP,(SP) 666 005014 PUSH R5 667 005016 PUSH R4 668 005020 PUSH R3 669 005022 PUSH R2 670 005024 PUSH R1 671 005026 PUSH R0 672 005030 012705 000022 MOV #18.,R5 ;18 GUYS ON STACK 673 005034 010601 MOV SP,R1 674 005036 012102 10$: MOV (R1)+,R2 675 005040 CALL PUKE 676 005044 077504 SOB R5,10$ 677 005046 062706 000016 ADD #14.,SP ;READJUST 678 005052 RET 679 ; 680 005054 000241 PUKE: CLC 681 005056 006102 ROL R2 682 005060 103003 BCC 1$ 683 005062 012700 000061 MOV #61,R0 684 005066 000402 BR 2$ 685 005070 012700 000060 1$: MOV #60,R0 686 005074 032737 000200 177564 2$: BIT #200,XCSRT 687 005102 001774 BEQ 2$ 688 005104 110037 177566 MOVB R0,XBUFT 689 005110 012704 000005 MOV #5,R4 690 005114 010203 10$: MOV R2,R3 691 005116 AND #160000,R3 692 005130 012700 000015 MOV #13.,R0 693 005134 000241 3$: CLC 694 005136 006003 ROR R3 695 005140 077003 SOB R0,3$ 696 005142 052703 000060 BIS #60,R3 697 005146 032737 000200 177564 11$: BIT #200,XCSRT 698 005154 001774 BEQ 11$ 699 005156 110337 177566 MOVB R3,XBUFT 700 005162 012700 000003 MOV #3,R0 701 005166 000241 12$: CLC 702 005170 006102 ROL R2 703 005172 077003 SOB R0,12$ 704 005174 077431 SOB R4,10$ 705 005176 032737 000200 177564 13$: BIT #200,XCSRT 706 005204 001774 BEQ 13$ 707 005206 112737 000015 177566 MOVB #15,XBUFT 708 005214 032737 000200 177564 14$: BIT #200,XCSRT 709 005222 001774 BEQ 14$ 710 005224 112737 000012 177566 MOVB #12,XBUFT 711 005232 RET REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 8-2 712 ; 713 005234 012706 117770 POWER: MOV #117770,SP ;(20 K-8) 714 005240 104520 TRAP 120 715 005242 000137 000400' JMP STA 716 ; 717 005246 005337 000000G TOUT: DEC TPKNT 718 005252 001001 BNE .+4 ;SKIP HALT 719 005254 000000 HALT ;SYSTEM A GONER 720 005256 104515 TRAP 115 721 005260 CALL DUMP 722 005264 000137 000400' JMP STA 723 ; 724 005270 005337 000000G ILLG: DEC TPKNT 725 005274 001001 BNE .+4 ;SKIP HALT 726 005276 000000 HALT ;SYSTEM A GONER 727 005300 104505 TRAP 105 728 005302 CALL DUMP 729 005306 000137 000400' JMP STA 730 ; 731 005312 005337 000000G BPT: DEC TPKNT 732 005316 001001 BNE .+4 ;SKIP HALT 733 005320 000000 HALT ;SYSTEM A GONER 734 005322 104502 TRAP 102 735 005324 CALL DUMP 736 005330 000002 RTI 737 ; 738 005332 005337 000000G IOT: DEC TPKNT 739 005336 001001 BNE .+4 ;SKIP HALT 740 005340 000000 HALT ;SYSTEM A GONER 741 005342 104511 TRAP 111 742 005344 CALL DUMP 743 005350 000137 000400' JMP STA 744 ; 745 005354 005337 000000G FIS: DEC TPKNT 746 005360 001001 BNE .+4 ;SKIP HALT 747 005362 000000 HALT ;SYSTEM A GONER 748 005364 104506 TRAP 106 749 005366 CALL DUMP 750 005372 012737 000777 016462' MOV #777,FPTPF ;SET FLAG 751 005400 011666 000004 MOV (SP),4(SP) ;ERASE SOURCE 752 005404 016666 000002 000006 MOV 2(SP),6(SP) ;DESTINATION SAME 753 005412 062706 000004 ADD #4,SP 754 005416 042766 000002 000002 BIC #2,2(SP) ;CLEAR V 755 005424 000002 RTI 756 ; 757 ; INTERRUPT DRIVERS 758 ; 759 ; TAPE INTERRUPT - TURNS ON TASK 15. 760 ; REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 8-3 761 005426 TINT: ACTBT$ 15. 762 005450 000002 RTI 763 ; 764 ; OUTPUT ROUTINE - ADDRESS OF FIRST CHARACTER IN FRST AND ADDRESS OF 765 ; LAST CHARACTER IN LST. UPON COMPLETION WILL SHUT 766 ; OFF INTERUPT AND SET QIO FLAG. 767 ; 768 005452 OUT1: PUSH R4 769 005454 005037 176514 CLR XCSR1 770 005460 013704 016276' MOV FRST1,R4 771 005464 112437 176516 MOVB (R4)+,XBUF1 772 005470 010437 016276' MOV R4,FRST1 773 005474 020437 016300' CMP R4,LST1 774 005500 003413 BLE 10$ 775 005502 ACTBT$ 4 776 005524 POP R4 777 005526 000002 RTI 778 005530 012737 000100 176514 10$: MOV #100,XCSR1 ; ENABLE INTERRUPTS 779 005536 POP R4 780 005540 000002 RTI 781 ; 782 ; 783 ; 784 005542 OUT0: PUSH R4 785 005544 005037 176504 CLR XCSR0 786 005550 013704 016272' MOV FRST0,R4 787 005554 112437 176506 MOVB (R4)+,XBUF0 788 005560 010437 016272' MOV R4,FRST0 789 005564 020437 016274' CMP R4,LST0 790 005570 003413 BLE 10$ 791 005572 ACTBT$ 3 792 005614 POP R4 793 005616 000002 RTI 794 005620 012737 000100 176504 10$: MOV #100,XCSR0 ; ENABLE INTERRUPTS 795 005626 POP R4 796 005630 000002 RTI 797 ; 798 005632 OUT3: PUSH R4 799 005634 005037 177564 CLR XCSR3 ;DISABLE INTERUPTS 800 005640 013704 016306' MOV FRST3,R4 ;ADDRESS OF FIRST CHAR 801 005644 112437 177566 MOVB (R4)+,XBUF3 ;WRITE CHARACTER 802 005650 010437 016306' MOV R4,FRST3 ;READJUST CURSER 803 005654 020437 016310' CMP R4,LST3 ;LAST CHAR? 804 005660 003413 BLE 10$ 805 005662 ACTBT$ 6 ;ACTIVATE BASE TASK #6, NEXT QUEUED RECORD 806 005704 POP R4 807 005706 000002 RTI 808 005710 012737 000100 177564 10$: MOV #100,XCSR3 ;ENAVLE INTERUPTS 809 005716 POP R4 REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 8-4 810 005720 000002 RTI 811 ; 812 005722 OUT2: PUSH R4 813 005724 005037 177574 CLR XCSR2 814 005730 013704 016302' MOV FRST2,R4 815 005734 020437 016304' CMP R4,LST2 816 005740 001411 BEQ 1$ 817 005742 121427 000015 CMPB (R4),#15 ;? 818 005746 001006 BNE 1$ ;NO 819 005750 012737 006042' 000234 MOV #OUT2N,234 ;CHANGE VECTOR 820 005756 012737 000010 016474' MOV #8.,OUT2K ;LOAD KOUNT 821 005764 112437 177576 1$: MOVB (R4)+,XBUF2 822 005770 010437 016302' MOV R4,FRST2 823 005774 020437 016304' CMP R4,LST2 824 006000 003413 BLE 10$ 825 006002 ACTBT$ 5 ;ACTIVATE BASE TASK #5,QUEIO PORT 2 826 006024 POP R4 827 006026 000002 RTI 828 006030 012737 000100 177574 10$: MOV #100,XCSR2 ; ENABLE INTERRUPTS 829 006036 POP R4 830 006040 000002 RTI 831 ; 832 006042 112737 000000 177576 OUT2N: MOVB #0,XBUF2 ;OUT NULL 833 006050 005337 016474' DEC OUT2K 834 006054 001003 BNE 1$ ;BYE 835 006056 012737 005722' 000234 MOV #OUT2,234 836 006064 000002 1$: RTI 837 ; 838 ; 839 ; 840 ; INPUT DRIVER 841 ; 842 006066 000240 INP2: NOP 843 006070 PUSH R4 ;WORK REGISTER 844 006072 013704 177572 MOV RBUF2,R4 ;INPUT CHMARACTER 845 006076 AND #177,R4 ;MASK OUT PARITY SHIT 846 006110 020427 000015 CMP R4,#15 ;? 847 006114 001443 BEQ 15$ ;YES 848 006116 020427 000010 CMP R4,#10 ;? 849 006122 001426 BEQ 10$ 850 006124 020427 000177 CMP R4,#177 ; 851 006130 001423 BEQ 10$ 852 006132 110477 010206 MOVB R4,@CRSR2 ;INPUT CHAR 853 006136 005237 016344' INC CRSR2 854 006142 023727 016344' 016375' CMP CRSR2,#LMT2 855 006150 001425 BEQ 15$ 856 006152 16$: ACTBT$ 9. ;ACTIVATE ECHO 857 006174 POP R4 858 006176 000002 RTI REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 8-5 859 ; 860 ; OR 861 ; 862 006200 023727 016344' 016352' 10$: CMP CRSR2,#IBUF2 ;FIRST POSITION? 863 006206 003761 BLE 16$ ;IGNORE IF YES 864 006210 005337 016344' DEC CRSR2 865 006214 112777 000040 010122 MOVB #40,@CRSR2 866 006222 000753 BR 16$ 867 ; 868 ; 869 ; 870 006224 110477 010114 15$: MOVB R4,@CRSR2 ; PUT CARRAGE RETURN IN BUFFER 871 006230 012737 016352' 016344' MOV #IBUF2,CRSR2 ;RESET CURSER 872 006236 ACTBT$ 13. ;SET MONITOR FLAG 873 006260 POP R4 874 006262 000002 RTI 875 ; 876 ; INPUT DRIVER 877 ; 878 006264 000240 INP1: NOP 879 006266 PUSH R4 ;WORK REGISTER 880 006270 013704 176512 MOV RBUF1,R4 ;INPUT CHMARACTER 881 006274 AND #177,R4 ;MASK OUT PARITY SHIT 882 006306 020427 000015 CMP R4,#15 ;? 883 006312 001443 BEQ 15$ ;YES 884 006314 020427 000010 CMP R4,#10 ;? 885 006320 001426 BEQ 10$ 886 006322 020427 000177 CMP R4,#177 ; 887 006326 001423 BEQ 10$ 888 006330 110477 010042 MOVB R4,@CRSR1 ;INPUT CHAR 889 006334 005237 016376' INC CRSR1 890 006340 023727 016376' 016427' CMP CRSR1,#LMT1 891 006346 001425 BEQ 15$ 892 006350 16$: ACTBT$ 8. ;ACTIVATE ECHO 893 006372 POP R4 894 006374 000002 RTI 895 ; 896 ; OR 897 ; 898 006376 023727 016376' 016404' 10$: CMP CRSR1,#IBUF1 ;FIRST POSITION? 899 006404 003761 BLE 16$ ;IGNORE IF YES 900 006406 005337 016376' DEC CRSR1 901 006412 112777 000040 007756 MOVB #40,@CRSR1 902 006420 000753 BR 16$ 903 ; 904 ; 905 ; 906 006422 110477 007750 15$: MOVB R4,@CRSR1 ; PUT CARRAGE RETURN IN BUFFER 907 006426 012737 016404' 016376' MOV #IBUF1,CRSR1 ;RESET CURSER REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 8-6 908 006434 ACTBT$ 12. ;SET MONITOR FLAG 909 006456 POP R4 910 006460 000002 RTI 911 ; 912 ; 913 ; 914 ; INPUT DRIVER 915 ; 916 006462 000240 INP0: NOP 917 006464 PUSH R4 ;WORK REGISTER 918 006466 013704 176502 MOV RBUF0,R4 ;INPUT CHMARACTER 919 006472 AND #177,R4 ;MASK OUT PARITY SHIT 920 006504 020427 000015 CMP R4,#15 ;? 921 006510 001443 BEQ 15$ ;YES 922 006512 020427 000010 CMP R4,#10 ;? 923 006516 001426 BEQ 10$ 924 006520 020427 000177 CMP R4,#177 ; 925 006524 001423 BEQ 10$ 926 006526 110477 007676 MOVB R4,@CRSR0 ;INPUT CHAR 927 006532 005237 016430' INC CRSR0 928 006536 023727 016430' 016461' CMP CRSR0,#LMT0 929 006544 001425 BEQ 15$ 930 006546 16$: ACTBT$ 7 ;ACTIVATE ECHO 931 006570 POP R4 932 006572 000002 RTI 933 ; 934 ; OR 935 ; 936 006574 023727 016430' 016436' 10$: CMP CRSR0,#IBUF0 ;FIRST POSITION? 937 006602 003761 BLE 16$ ;IGNORE IF YES 938 006604 005337 016430' DEC CRSR0 939 006610 112777 000040 007612 MOVB #40,@CRSR0 940 006616 000753 BR 16$ 941 ; 942 ; 943 ; 944 006620 110477 007604 15$: MOVB R4,@CRSR0 ; PUT CARRAGE RETURN IN BUFFER 945 006624 012737 016436' 016430' MOV #IBUF0,CRSR0 ;RESET CURSER 946 006632 ACTBT$ 11. ;SET MONITOR FLAG 947 006654 POP R4 948 006656 000002 RTI 949 ; 950 006660 000240 INP3: NOP 951 006662 PUSH R4 ;WORK REGISTER 952 006664 013704 177562 MOV RBUF3,R4 ;INPUT CHMARACTER 953 006670 AND #177,R4 ;MASK OUT PARITY SHIT 954 006702 020427 000015 CMP R4,#15 ;? 955 006706 001443 BEQ 15$ ;YES 956 006710 020427 000010 CMP R4,#10 ;? REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 8-7 957 006714 001426 BEQ 10$ 958 006716 020427 000177 CMP R4,#177 ; 959 006722 001423 BEQ 10$ 960 006724 110477 007362 MOVB R4,@CRSR3 ;INPUT CHAR 961 006730 005237 016312' INC CRSR3 962 006734 023727 016312' 016343' CMP CRSR3,#LMT3 963 006742 001425 BEQ 15$ 964 006744 16$: ACTBT$ 10. ;ACTIVATE ECHO 965 006766 POP R4 966 006770 000002 RTI 967 ; 968 ; OR 969 ; 970 006772 023727 016312' 016320' 10$: CMP CRSR3,#IBUF3 ;FIRST POSITION? 971 007000 003761 BLE 16$ ;IGNORE IF YES 972 007002 005337 016312' DEC CRSR3 973 007006 112777 000040 007276 MOVB #40,@CRSR3 974 007014 000753 BR 16$ 975 ; 976 ; 977 ; 978 007016 110477 007270 15$: MOVB R4,@CRSR3 ; PUT CARRAGE RETURN IN BUFFER 979 007022 012737 016320' 016312' MOV #IBUF3,CRSR3 ;RESET CURSER 980 007030 ACTBT$ 14. ;SET MONITOR FLAG 981 007052 POP R4 982 007054 000002 RTI 983 ; 984 ; 985 007056 012 015 BRPLY: .BYTE 12,15 986 007060 052 052 052 .ASCII /*** COMMAND ERROR ***/ 987 007105 012 015 .BYTE 12,15 988 007106' BRPLYE=.-1 989 ; 990 .EVEN 991 ; REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 10 2 ; 3 ; AUTHOR: RIC C. DAVIES 4 ; INEL 5 ; 550 2ND STREET 6 ; IDAHO FALLS, IDAHO 83401 7 ; 8 ; PH: (208) 526-4131 9 ; 10 ; 11 ; FLOATING POINT INTERPRETER (FINT): 12 ; 13 ; THE ADDRESS PORTION OF AN INSTRUCTION IS 6-BITS AND 14 ; HAS THE FORM "MODE(3 BITS) REGISTER(3 BITS)". 15 ; THE INSTRUCTION DETERMINES IF THE ADDRESS IS THE 16 ; SOURCE OR DESTINATION. THE FAC(FLOATING ACCUMULATOR) 17 ; THEN BECOMES THE DESTINATION OR SOURCE RESPECTIVELY. 18 ; 19 ; INSTRUCTION FORMAT 20 ; BIT 15 MUST =0 BIT 15 =1 MEANS EXIT 21 ; 22 ; 0OOOOOOOOOMMMRRR 23 ; OP-CODE ADDRESS 24 ; MODE = 1 THRU 7 REGISTER = R0 THRU R5 AND R7 25 ; 26 ; INSTRUCTION OP-CODE ADDRESS DESCRIPTION 27 ; (SOURCE OR DEST) 28 ; 29 ; STO 000 DESTINATION STORE FAC INTO DEST 30 ; ADDF 001 SOURCE ADD SEFA TO FAC 31 ; SUBF 002 SOURCE SUBTRACT SEFA FROM FAC 32 ; NEGF 003 - NOT NEEDED - NEGATE FAC 33 ; MULF 004 SOURCE SOURCE TIMES FAC 34 ; DIVF 005 SOURCE FAC DIVIDED BY SEFA 35 ; RDIV 006 SOURCE SEFA DIVIDED BY FAC 36 ; **RESULT GOES TO FAC** 37 ; MOVF 007 SOURCE LOAD FAC FROM SEFA 38 ; CMPF 010 SOURCE COMPARES FAC AND SEFA 39 ; **MUST BE FOLLOWED BY 3 BR INST- 40 ; RUCTIONS. EXECUTION OF BRANCHE 41 ; DONE IN THE INTERPRETER. 42 ; 1ST BR IF FACSEFA 45 ; FIX 011 DESTINATION STORE INTEGER IN DEST 46 ; FIXD 012 DESTINATION STORE DOUBLE INTEGER 47 ; FLT 013 SOURCE CONVERT INTEGER TO FAC 48 ; 49 ; ITOA 015 50 ; JTOA 016 REAL TIME OPERATING SYSTEM MACRO M1113 31-DEC-80 12:57 PAGE 10-1 51 ; FTOA 017 52 ; ETOA 020 53 ; 54 ; ATOI 022 55 ; ATOF 023 56 ; 57 ; COS 025 - NOT NEEDED- TAKE COSINE OF FAC 58 ; SIN 026 - NOT NEEDED- TAKE SINE OF FAC 59 ; ATAN 027 - NOT NEEDED - TAKE ARC TANGENT OF FAC 60 ; LOG 030 - NOT NEEDED - LOG BASE E OF FAC 61 ; EXP 031 - NOT NEEDED - EXPONENTIAL OF FAC 62 ; SQRT 032 - NOT NEEDED - TAKE SQUARE ROOT OF FAC 63 ; FINT 077 - NOT NEEDED - ENTER FINT 64 007110 005721 FINT: TST (R1)+ 65 007112 010105 MOV R1,R5 66 007114 005266 000020 INC 20(SP) ; INDICATE FINT 67 007120 012516 MOV (R5)+,@SP ; ADR OF FAC 68 007122 012504 FINT1: MOV (R5)+,R4 ; GET INSTRUCTION & 6 BIT ADR FIELD 69 007124 100557 BMI F.RET ; EXIT 70 007126 010446 MOV R4,-(SP) ; SAVE R4 71 007130 004737 007616' JSR PC,M.ADDR ; CALC SEFA 72 007134 012604 MOV (SP)+,R4 73 007136 105004 CLRB R4 74 007140 000304 SWAB R4 ; GET OP-CODE FOR DESIRED FUNCTION. 75 007142 020427 000011 CMP R4,#11 ; FIX FUNCTION? 76 007146 001420 BEQ F.FIX ; YES 77 007150 020427 000012 CMP R4,#12 ; FIXD? 78 007154 001415 BEQ F.FIX ; YES 79 007156 020427 000003 CMP R4,#3 ; NEGF? 80 007162 001411 BEQ F.FIX-2 ; YES 81 007164 020427 000025 CMP R4,#25 ; OP-CODE BETWEEN 25 & 32? 82 007170 002403 BLT .+10 ; NO 83 007172 020427 000032 CMP R4,#32 84 007176 003403 BLE F.FIX-2 ; QES 85 007200 010001 MOV R0,R1 ; SEFA 86 007202 011600 MOV @SP,R0 ; DEFA 87 007204 000432 BR M.PP1 88 007206 011600 MOV @SP,R0 89 007210 011601 F.FIX: MOV @SP,R1 ; SEFA TO R1 - R0 HAS DEFA 90 007212 000427 BR M.PP1 91 .TITLE EMT HANDLER EMT HANDLER MACRO M1113 31-DEC-80 12:57 PAGE 11 93 ; THE EMT TRAP HANDLER WORKS AS DESCRIBED 94 ; IN DEC'S PAPER TAPE SOFTWARE PROGRAMMING HANDBOOK. 95 ; THIS PACKAGE FUNCTIONS SIMILAR TO FPP-11. 96 ; 97 ; HOWEVER, THIS PACKAGE USES TWO-WORD FLOATING #S 98 ; INSTEAD OF THREE-WORD. 99 ; 100 ; FLOATING POINT FORMAT: 101 ; 102 ; S 14 EXP 7 6 HIGH PART 0 103 ; 15 FRACTION LOW PART 0 104 ; 105 ; EMT TRAP HANDLER 106 ; 107 ; MODULES 108 ; 109 ; 1. M.EMT 110 ; 2. M.ADDR 111 ; 112 007214 005046 M.EMT: CLR -(SP) ; FLAG=0 MEANS NOT IN FINT. 113 007216 005746 TST -(SP) ; SAVE ROOM FOR DEFA 114 007220 010546 MOV R5,-(SP) ; SAVE REGISTERS 115 007222 010446 MOV R4,-(SP) 116 007224 010346 MOV R3,-(SP) 117 007226 010246 MOV R2,-(SP) 118 007230 010146 MOV R1,-(SP) 119 007232 010046 MOV R0,-(SP) 120 007234 016603 000022 MOV 22(SP),R3 ; GET STATUS WORD. 121 007240 042703 000020 BIC #20,R3 ; CLEAR T BIT THAT COMPUTER 122 007244 106403 MTPS R3 ; SAW FIT TO IGNORE. 123 007246 010603 MOV SP,R3 124 007250 016601 000020 MOV 20(SP),R1 ; GET USER PC 125 007254 014104 M.PP3: MOV -(R1),R4 ; GET TRAP INSTRUCTION 126 007256 042704 177700 BIC #177700,R4 ; CALCULATE OFFSET TO ADR OF ROUTINE 127 007262 005046 CLR -(SP) ; RESERVE LOC. FOR FAC ADR. 128 007264 022704 000077 CMP #77,R4 ; ENTER FINT? 129 007270 001707 BEQ FINT ; YES 130 007272 006304 M.PP1: ASL R4 ; TO PERFORM REQUESTED FUNC. 131 007274 005046 CLR -(SP) ; SET SWITCH FOR CMPF KLUDGE. 132 007276 042766 000017 000026 BIC #17,26(SP) ; CLEAR ALL CONDITION CODES. 133 007304 020427 000020 CMP R4,#M.CMPF-M.ATAB ; COMPARE OP-CODE VS CMPF 134 007310 001001 BNE M.PP6 ; BRANCH IF NOT CMPF 135 007312 005216 INC @SP ; LEAVE A TRAIL 136 007314 060704 M.PP6: ADD PC,R4 137 007316 016404 000462 MOV M.ATAB-.(R4),R4 ; ADR OF ROUTINE 138 007322 001476 BEQ M.ERR 139 007324 060704 ADD PC,R4 ; RELOCATE ADR 140 007326 010446 M.PP4: MOV R4,-(SP) 141 007330 001472 BEQ M.ERR1 ; OH BOY AN ERROR EMT HANDLER MACRO M1113 31-DEC-80 12:57 PAGE 11-1 142 007332 005766 000024 TST 24(SP) 143 007336 001024 BNE M.CALL 144 007340 012104 MOV (R1)+,R4 ; GET DEST FIELD 145 007342 010105 MOV R1,R5 ; USER PC FOR M.ADDR 146 007344 032704 000100 BIT #100,R4 ; CHECK FLAVOR BITS FOR POLISH(FORTRAN) 147 007350 001111 BNE M.POL 148 007352 032704 000200 BIT #200,R4 ; CHECK FLAVOR BITS FOR FAST ADR 149 007356 001114 BNE M.FAST 150 007360 012504 MOV (R5)+,R4 ; GET ADR FIELDS. 151 007362 010446 MOV R4,-(SP) ; SAVE R4 152 007364 006104 ROL R4 153 007366 006104 ROL R4 154 007370 000304 SWAB R4 ; R4 HAS SOURCE FIELD IN BITS 5-0. 155 007372 004737 007616' JSR PC,M.ADDR ; GENERATE SEFA 156 007376 012604 MOV (SP)+,R4 ; RESTORE R4 (DEST FIELD IN BITS 5-0). 157 007400 010046 MOV R0,-(SP) ; SAVE SEFA 158 007402 004737 007616' JSR PC,M.ADDR ; GENERATE DEFA 159 007406 012601 MOV (SP)+,R1 ; R0 NOW HAS DEFA & R1 HAS SEFA. 160 007410 010566 000026 M.CALL: MOV R5,26(SP) ; FIX UP USER PC. 161 007414 010066 000022 MOV R0,22(SP) ; SAVE DEFA TO SET CONDITIONS LATER. 162 007420 004736 JSR PC,@(SP)+ ; CALL ROUTINE 163 007422 102431 BVS M.PP2 ; OVERFLOW 164 007424 106704 MFPS R4 ; SAVE STATUS 165 007426 016605 000024 M.PP5: MOV 24(SP),R5 ; MOVE USER PC TO R5 166 007432 005726 TST (SP)+ ; SEE HOW TO SET CONDITION CODES 167 007434 001036 BNE M.CMPE ; IF NON ZERO DO AS A CMP. 168 007436 042766 000001 000016 BIC #1,16(SP) ; MAKE A WORD ADR. 169 007444 005776 000016 TST @16(SP) ; SET CONDITION CODES. 170 ; 171 ; DO NOT SET BREAK POINT ON NEXT INSTRUCTION. 172 ; 173 007450 106746 MFPS -(SP) 174 007452 052666 000024 BIS (SP)+,24(SP) ; SET THE BITS IN USER STATUS 175 007456 005766 000020 M.PP7: TST 20(SP) 176 007462 001217 BNE FINT1 177 007464 005726 F.RET: TST (SP)+ ; REMOVE ADR OF FAC 178 007466 012600 MOV (SP)+,R0 ; RESTORE REGISTERS 179 007470 012601 MOV (SP)+,R1 180 007472 012602 MOV (SP)+,R2 181 007474 012603 MOV (SP)+,R3 182 007476 012604 MOV (SP)+,R4 183 007500 012605 MOV (SP)+,R5 184 007502 022626 CMP (SP)+,(SP)+ ; REMOVE GARBAGE. 185 007504 000002 RTI 186 007506 052766 000002 000026 M.PP2: BIS #2,26(SP) ; SET OVERFLOW IN USER STATUS. 187 007514 000744 BR M.PP5 188 007516 005726 M.ERR1: TST (SP)+ ; POP SUBROUTINE ADR 189 007520 012700 000006 M.ERR: MOV #6,R0 ; SET ERROR CODE (FATAL) 190 007524 000137 000040 JMP @#40 EMT HANDLER MACRO M1113 31-DEC-80 12:57 PAGE 11-2 191 007530 000002 RTI 192 007532 050466 000024 M.CMPE: BIS R4,24(SP) ; SET STATUS 193 007536 005766 000020 TST 20(SP) 194 007542 001750 BEQ F.RET ; RESTORE REGISTERS 195 007544 106466 000024 MTPS 24(SP) 196 007550 100403 BMI .+10 197 007552 001401 BEQ .+4 198 007554 005725 TST (R5)+ ; + 199 007556 005725 TST (R5)+ ; = 200 007560 111500 MOVB @R5,R0 ; - 201 007562 006300 ASL R0 202 007564 060005 ADD R0,R5 ; UPDATE USER PC 203 007566 005725 TST (R5)+ 204 007570 000137 007122' JMP FINT1 205 ; FORTRAN POLISH ADDRESSING 206 ; SEFA = (R0)+ DEFA = @R0 207 007574 011301 M.POL: MOV @R3,R1 208 007576 010100 MOV R1,R0 209 007600 022020 CMP (R0)+,(R0)+ 210 007602 062713 000004 ADD #4,@R3 211 007606 000700 BR M.CALL 212 ; FAST ADDRESSING MODE 213 ; SEFA = @R1 DEFA = @R0 214 007610 012300 M.FAST: MOV (R3)+,R0 ; MOVE USER R0 TO R0 215 007612 012301 MOV (R3)+,R1 ; MOVE USER R1 TO R1 216 007614 000675 BR M.CALL 217 ;GENERAL ADDRESS FIELD DECODER 218 ;INPUTS: R3-POINTER TO SAVED REGISTERS BLOCK STARTING WITH R0 219 ; R4-6 BIT FIELD IN BITS 5-0 TO BE DECODED 220 ; R5- USER'S PC 221 ;OUTPUT: R0-CONTAINS THE EFFECTIVE ADDRESS(EFA) OF THE DECODED FIELD 222 ;DECODER WILL DECODE THE FOLLOWING FIELDS: @R0-R5,(R0-R5)+,-(R0-R5), 223 ;@(R0-R5)+,@-(R0-R5),K(R0-R5),@K(R0-R5),(PC)+,K(PC),@(PC)+,@K(PC) 224 ;IF R6 IS EVER SPECIFIED PC WILL BE USED IN IT'S PLACE 225 ;WHEN THE PC IS USED AS THE REGISTER 226 ; ONLY (PC)+,K(PC),@(PC)+ OR @K(PC) 227 ;ARE ALLOWED.IF AUTO-INCREMENTING IS NOT SPECIFIED WHEN USING THE PC 228 ;INDEXING IS AUTOMATICALLY ASSUMED. 229 007616 010402 M.ADDR: MOV R4,R2 230 007620 005001 CLR R1 231 007622 012746 177774 MOV #-4,-(SP) 232 007626 072426 ASH (SP)+,R4 233 007630 005501 ADC R1 ;INDIRECT BIT IN R1 234 007632 042704 177774 BIC #177774,R4 ;ADDRESSING MODE IN R4 235 007636 042702 177770 BIC #177770,R2 ;REGISTER NUMBER IN R2 236 007642 006302 ASL R2 237 007644 020227 000014 CMP R2,#14 238 007650 002031 BGE M.AD01 ;HANDLE R6-R7 DIFFERENTLY 239 007652 060302 ADD R3,R2 EMT HANDLER MACRO M1113 31-DEC-80 12:57 PAGE 11-3 240 007654 011200 MOV @R2,R0 ;PICK UP THE USERS REGISTER 241 007656 020427 000001 CMP R4,#1 242 007662 001417 BEQ M.M1 243 007664 103407 BCS M.M0 ; MODE 1 IS DONE AT THIS POINT 244 007666 020427 000002 CMP R4,#2 ; MODE 0 WILL BE TREATED AS 1. 245 007672 001405 BEQ M.M2 246 007674 062500 M.M3: ADD (R5)+,R0 ; MODE 6 OR 7 ADDRESSING 247 007676 005701 M.M3B: TST R1 248 007700 001401 BEQ M.M0 249 007702 011000 M.MD: MOV @R0,R0 250 007704 000207 M.M0: RTS PC 251 007706 005701 M.M2: TST R1 ; MODE 4 OR 5 ADDRESSING 252 007710 001424 BEQ M.M2A 253 007712 162712 000002 SUB #2,@R2 ; MODE 5 254 007716 005740 TST -(R0) 255 007720 000770 BR M.MD 256 007722 005701 M.M1: TST R1 ; MODE 2 OR 3 ADDRESSING 257 007724 001422 BEQ M.M1A 258 007726 062712 000002 ADD #2,@R2 ; MODE 3 259 007732 000763 BR M.MD 260 007734 010500 M.AD01: MOV R5,R0 261 007736 005725 TST (R5)+ 262 007740 005304 DEC R4 263 007742 001004 BNE M.AD02 264 007744 005701 TST R1 265 007746 001355 BNE M.MD 266 007750 022525 CMP (R5)+,(R5)+ 267 007752 000207 RTS PC 268 007754 011000 M.AD02: MOV @R0,R0 269 007756 060500 ADD R5,R0 270 007760 000746 BR M.M3B 271 007762 162712 000004 M.M2A: SUB #4,@R2 ; MODE 4 272 007766 024040 CMP -(R0),-(R0) ; SUBT 4 FROM R0 273 007770 000207 RTS PC 274 007772 062712 000004 M.M1A: ADD #4,@R2 ; MODE 2 275 007776 000207 RTS PC 276 010000 000560 001100 001132 M.ATAB: .WORD STOF-M.PP4,ADDF-M.PP4,SUBF-M.PP4,NEGF-M.PP4 277 010010 001142 001152 001166 .WORD MULF-M.PP4,DIVF-M.PP4,RDVF-M.PP4,MOVF-M.PP4 278 010020 000600 000644 000636 M.CMPF: .WORD CMPF-M.PP4,FIX-M.PP4,FIXD-M.PP4,FLT-M.PP4 279 010030 000000 001536 001620 .WORD 0,ITOA-M.PP4,JTOA-M.PP4,FTOA-M.PP4 280 010040 002722 000000 001212 .WORD ETOA-M.PP4,0,ATOI-M.PP4,ATOF-M.PP4 281 010050 000000 004204 004014 .WORD 0,COS-M.PP4,SIN-M.PP4,ATAN-M.PP4 282 010060 005464 005202 004564 .WORD LOG-M.PP4,EXP-M.PP4,SQRT-M.PP4,0 283 010070 000000 000000 000000 .WORD 0,0,0,0,0,0,0 284 .TITLE TWO-WORD FLOATING PACKAGE 285 ; 286 ; FLOATING POINT MOVE 287 ; FLOATING POINT COMPARE 288 ; FLOATING POINT TO INTEGER CONVERSION TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-4 289 ; INTEGER TO FLOATING POINT CONVERSION 290 ; 291 ; MODULES: 292 ; 0. STOF 293 ; 1. MOVF 294 ; 2. CMPF 295 ; 3. FLT 296 ; 4. FIXD 297 ; 5. FIX 298 ; 6. M.MOVE 299 ; 300 010106 010104 STOF: MOV R1,R4 ; MOVES DEST TO SOURCE 301 010110 010002 MOV R0,R2 302 010112 000402 BR .+6 303 010114 010102 MOVF: MOV R1,R2 304 010116 010004 MOV R0,R4 305 010120 012224 MOV (R2)+,(R4)+ 306 010122 012224 MOV (R2)+,(R4)+ 307 010124 000207 RTS PC 308 010126 022121 CMPF: CMP (R1)+,(R1)+ 309 010130 014146 MOV -(R1),-(SP) 310 010132 014146 MOV -(R1),-(SP) 311 010134 004737 010152' JSR PC,M.MOVE ; PLACE DEST. ON STACK. 312 010140 075016 FSUB SP ; S-D TO TOP OF STACK. 313 010142 011601 MOV @SP,R1 ; SAVE HIGH ORDER IN R1. 314 010144 022626 CMP (SP)+,(SP)+ ; GET RID OF TRASH ON STACK. 315 010146 005701 TST R1 316 010150 000207 RTS PC 317 010152 012601 M.MOVE: MOV (SP)+,R1 ; RETURN ADDRESS. 318 010154 022020 CMP (R0)+,(R0)+ 319 010156 014046 MOV -(R0),-(SP) ; MOVE # 320 010160 014046 MOV -(R0),-(SP) 321 010162 010107 MOV R1,PC 322 010164 012705 177637 FIXD: MOV #177637,R5 323 010170 000402 BR FIX1 324 010172 012705 177617 FIX: MOV #177617,R5 325 010176 012102 FIX1: MOV (R1)+,R2 ; EXPONENT & HIGH ORDER 326 010200 011103 MOV @R1,R3 ; LOW ORDER 327 010202 006302 ASL R2 328 010204 000302 SWAB R2 ; SWAP EXP AND HIGH ORDER 329 010206 110204 MOVB R2,R4 ; EXP TO R4 330 010210 105002 CLRB R2 ; CLEAR EXP OUT OF R2 331 010212 000261 SEC ; SET HIDDEN BIT 332 010214 006002 ROR R2 333 010216 000302 SWAB R2 334 010220 012746 000007 MOV #7,-(SP) 335 010224 073226 ASHC (SP)+,R2 ; SHIFT MANTISSA 336 010226 005741 TST -(R1) ; NEGATIVE #? 337 010230 100003 BPL FIX2 ; NO TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-5 338 010232 005402 NEG R2 339 010234 005403 NEG R3 ; 2-WORD NEGATE 340 010236 005602 SBC R2 341 010240 020405 FIX2: CMP R4,R5 342 010242 101014 BHI FIX5 ; EXPONENT TOO LARGE. 343 010244 001405 BEQ FIX3 ; EXPONENT = 15 OR 31 BITS. 344 010246 022704 177600 CMP #177600,R4 345 010252 101012 BHI FIX6 ; NUMBER LESS THAN 1. 346 010254 160504 SUB R5,R4 347 010256 073204 ASHC R4,R2 ; SHIFT MANTISSA. 348 010260 022705 177617 FIX3: CMP #177617,R5 349 010264 001401 BEQ FIX4 ; SINGLE FIX 350 010266 010320 MOV R3,(R0)+ ; LOW BITS 351 010270 010210 FIX4: MOV R2,@R0 ; HIGH BITS 352 010272 000207 RTS PC 353 010274 000262 FIX5: SEV ; NUMBER TOO BIG. 354 010276 000207 RTS PC 355 010300 005002 FIX6: CLR R2 ; ZERO MANTISSA 356 010302 005003 CLR R3 357 010304 000765 BR FIX3 358 010306 012720 045600 FLT: MOV #45600,(R0)+ 359 010312 011110 MOV @R1,@R0 360 010314 100004 BPL M.LT2 ; NEGATIVE #? 361 010316 005410 NEG @R0 ; YES 362 010320 062740 100000 ADD #100000,-(R0) 363 010324 000401 BR M.LT2+2 364 010326 005740 M.LT2: TST -(R0) 365 010330 010001 MOV R0,R1 366 010332 012103 MOV (R1)+,R3 ; EXP 367 010334 011102 MOV @R1,R2 ; MANTISSA 368 010336 006302 ASL R2 369 010340 006103 ROL R3 370 010342 105703 TSTB R3 ; HIGH BIT OF MANTISSA SET? 371 010344 100412 BMI M.NOR4 ; YES 372 010346 001004 BNE M.NORL ; HIGH ORDER NOT ZERO. 373 010350 005702 TST R2 ; LOW ORDER ZERO? 374 010352 001002 BNE M.NORL ; NO 375 010354 005003 CLR R3 376 010356 000410 BR M.RET2 377 010360 162703 000400 M.NORL: SUB #400,R3 ; REDUCE EXP BY ONE 378 010364 006302 ASL R2 ; SHIFT LOW 379 010366 106103 ROLB R3 ; ROTATE HIGH 380 010370 102373 BVC M.NORL 381 010372 106103 M.NOR4: ROLB R3 382 010374 006141 ROL -(R1) ; GET SIGN BIT 383 010376 006003 ROR R3 384 010400 010320 M.RET2: MOV R3,(R0)+ 385 010402 010210 MOV R2,@R0 386 010404 000207 RTS PC TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-6 387 010406 012602 SR.DST: MOV (SP)+,R2 388 010410 022020 CMP (R0)+,(R0)+ 389 010412 022121 CMP (R1)+,(R1)+ 390 010414 014046 MOV -(R0),-(SP) ; MOVE DEST TO STACK. 391 010416 014046 MOV -(R0),-(SP) 392 010420 014146 MOV -(R1),-(SP) ; MOVE SOURCE TO STACK. 393 010422 014146 MOV -(R1),-(SP) 394 010424 010207 MOV R2,PC 395 ; 396 ; FLOATING POINT ADD 397 ; FLOATING POINT SUBTRACT 398 ; FLOATING POINT MULTIPLY 399 ; FLOATING POINT DIVIDE 400 ; FLOATING POINT REVERSE DIVIDE 401 ; FLOATING POINT NEGATE 402 ; 403 ; MODULES INCLUDED: 404 ; 405 ; 1. ADDF 406 ; 2. SUBF 407 ; 3. MULF 408 ; 4. DIVF 409 ; 5. RDVF 410 ; 6. NEGF 411 ; 412 010426 004737 010406' ADDF: JSR PC,SR.DST ; MOVE DEST & SOURCE TO STACK 413 010432 075006 FADD SP ; ADD 414 010434 102006 FUNCR: BVC FUNC ; NO V BIT 415 010436 062706 000010 ADD #10,SP 416 010442 005020 CLR (R0)+ 417 010444 005020 CLR (R0)+ 418 010446 000262 SEV 419 010450 000207 RTS PC 420 010452 012620 FUNC: MOV (SP)+,(R0)+ 421 010454 012620 MOV (SP)+,(R0)+ ; MOVE RESULT TO DESTINATION 422 010456 000207 RTS PC 423 010460 004737 010406' SUBF: JSR PC,SR.DST 424 010464 075016 FSUB SP ; SUBTRACT 425 010466 000762 BR FUNCR 426 010470 004737 010406' MULF: JSR PC,SR.DST 427 010474 075026 FMUL SP ; MULTIPLY 428 010476 000756 BR FUNCR 429 010500 004737 010406' DIVF: JSR PC,SR.DST 430 010504 005711 TST (R1) 431 010506 001753 BEQ FUNCR+2 ; DIVIDE BY 0 EQUALS 0 432 010510 075036 FDIV SP ; DIVIDE 433 010512 000750 BR FUNCR 434 010514 010003 RDVF: MOV R0,R3 ; PUSH THE SOURCE THEN 435 010516 010100 MOV R1,R0 ; THE DEST ON TO THE STACK. TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-7 436 010520 010301 MOV R3,R1 437 010522 004737 010406' JSR PC,SR.DST 438 010526 010300 MOV R3,R0 ; RESTORE DEFA 439 010530 000765 BR DIVF+4 ; DO REVERSE DIVIDE. 440 010532 062710 100000 NEGF: ADD #100000,@R0 ; NEGATE DEST. 441 010536 000207 RTS PC 442 ; 443 ; INTEGER TOO ASCII AND 444 ; ASCII TO INTEGER COONVERSION 445 ; 446 ; MODULES: 447 ; 448 ; 1. ATOI 449 ; 2. ITOA 450 ; 3. JTOA 451 ; 452 010540 010046 ATOI: MOV R0,-(SP) ; SAVE THE DEFA 453 010542 005046 CLR -(SP) ; SWITCHES 454 010544 005002 CLR R2 ; ZERO TO START (R2 & R3 WILL BE RESULT) 455 010546 005003 CLR R3 456 010550 112100 M.AINX: MOVB (R1)+,R0 ; GET A CHAR. 457 010552 042700 177600 BIC #177600,R0 ; AND TO 7-BITS 458 010556 122700 000015 CMPB #15,R0 459 010562 001502 BEQ M.AIXT ; BRANCH IF CR 460 010564 122700 000054 CMPB #54,R0 461 010570 001477 BEQ M.AIXT ; BRANCH IF COMMA 462 010572 122700 000053 CMPB #53,R0 463 010576 001442 BEQ M.AIPL ; BRANCH IF PLUS 464 010600 122700 000055 CMPB #55,R0 465 010604 001435 BEQ M.AIMI ; BRANCH IF MINUS 466 010606 122700 000040 CMPB #40,R0 467 010612 001442 BEQ M.AISP ; BRANCH IF SPACE 468 010614 122700 000060 CMPB #60,R0 469 010620 003056 BGT M.AIVS ; OUT OF RANGE 470 010622 122700 000071 CMPB #71,R0 471 010626 002453 BLT M.AIVS ; OUT OF RANGE 472 010630 162700 000060 SUB #60,R0 ; CREATE BINARY # FROM ASCII. 473 010634 010204 MOV R2,R4 ; MULT BY 10 AND 474 010636 010305 MOV R3,R5 475 010640 006103 ROL R3 476 010642 006102 ROL R2 477 010644 103444 BCS M.AIVS ; -OVERFLOW- 478 010646 006103 ROL R3 479 010650 006102 ROL R2 480 010652 060503 ADD R5,R3 481 010654 005502 ADC R2 482 010656 060402 ADD R4,R2 483 010660 006103 ROL R3 484 010662 006102 ROL R2 TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-8 485 010664 103434 BCS M.AIVS ;-OVERFLOW- 486 010666 060003 ADD R0,R3 ; ADD IN NEW DIGIT. 487 010670 005502 ADC R2 488 010672 052716 000001 BIS #1,@SP ; SET SIGNIFICANCE SWITCH. 489 010676 000724 BR M.AINX 490 010700 052716 000010 M.AIMI: BIS #10,@SP ; SET MINUS SIGN. 491 010704 032716 000005 M.AIPL: BIT #5,@SP ; TEST SIGNIFICANCE. 492 010710 001022 BNE M.AIVS ; SIGNS ILLEGAL IF EMBEDDED IN #. 493 010712 052716 000004 BIS #4,@SP ; SET PLUS 494 010716 000714 BR M.AINX 495 010720 032716 000001 M.AISP: BIT #1,@SP ; CAN'T HAVE EMBEDDED BLANKS. 496 010724 001711 BEQ M.AINX 497 010726 112100 M.AIX1: MOVB (R1)+,R0 ; ON ERROR, BYPASS REST OF #... 498 010730 042700 177600 BIC #177600,R0 499 010734 122700 000040 CMPB #40,R0 500 010740 001772 BEQ M.AIX1 ; SPACE 501 010742 122700 000015 CMPB #15,R0 502 010746 001410 BEQ M.AIXT ; CR 503 010750 122700 000054 CMPB #54,R0 504 010754 001405 BEQ M.AIXT ; COMMA 505 010756 042716 000001 M.AIVS: BIC #1,@SP ; CLEAR SIGNIFICANCE. 506 010762 052716 000002 BIS #2,@SP ; SET OVERFLOW 507 010766 000757 BR M.AIX1 508 010770 005716 M.AIXT: TST @SP ; IF NO SWITCHES, SKIP SIGNIFICANCE TEST 509 010772 001403 BEQ .+10 510 010774 032716 000001 BIT #1,@SP 511 011000 001426 BEQ M.AIVV ; ERROR IF NO SIGNIFICANCE. 512 011002 020227 100000 CMP R2,#100000 513 011006 101023 BHI M.AIVV ; # TOO LARGE. 514 011010 103405 BCS M.AIX2 ; # OK 515 011012 005703 TST R3 ; TEST LOW FOR # = 100000 000000 516 011014 001020 BNE M.AIVV ; OVERFLOW IF NOT 0 517 011016 032716 000010 BIT #10,@SP ; SEE IF FUNNY # ALLOWED 518 011022 001415 BEQ M.AIVV ; NO IF POSITIVE 519 011024 032716 000010 M.AIX2: BIT #10,@SP ; MINUS? 520 011030 001403 BEQ .+10 ; NO 521 011032 005402 NEG R2 ; NEGATE #. 522 011034 005403 NEG R3 523 011036 005602 SBC R2 524 011040 012604 MOV (SP)+,R4 ; SWITCHES 525 011042 012600 MOV (SP)+,R0 ; DEFA 526 011044 010320 MOV R3,(R0)+ ; STORE RESULT 527 011046 010210 MOV R2,@R0 528 011050 000257 CCC ; CLEAR CONDITION CODES 529 011052 106404 MTPS R4 ; SET CONDITION CODES 530 011054 000207 RTS PC 531 011056 052716 000002 M.AIVV: BIS #2,@SP ; SET V 532 011062 000760 BR M.AIX2 533 011064 010046 ITOA: MOV R0,-(SP) ; SAVE DEFA TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-9 534 011066 005046 CLR -(SP) ; CLEAR HIGH ORDER OF INTEGER 535 011070 011146 MOV @R1,-(SP) ; GET INTEGER 536 011072 002002 BGE .+6 ; BRANCH IF POSITIVE. 537 011074 005166 000002 COM 2(SP) ; PROPAGATE SIGN THRU HIGH ORDER 538 011100 010601 MOV SP,R1 ; SET SEFA 539 011102 162706 000014 SUB #14,SP ; EXPAND STACK 540 011106 010600 MOV SP,R0 541 011110 004737 011146' JSR PC,JTOA ; CONVERT 542 011114 010601 MOV SP,R1 543 011116 016600 000020 MOV 20(SP),R0 ; USERS DEFA 544 011122 062701 000005 ADD #5,R1 ; 1ST 5 ARE SPACES 545 011126 012702 000007 MOV #7,R2 ; SEVEN DIGITS 546 011132 112120 MOVB (R1)+,(R0)+ 547 011134 005302 DEC R2 ; MOVE ASCII STRING 548 011136 003375 BGT .-4 549 011140 062706 000022 ADD #22,SP ; REMOVE JUNK 550 011144 000207 RTS PC 551 011146 005046 JTOA: CLR -(SP) ; SIGN CONTROL WORD 552 011150 012103 MOV (R1)+,R3 ; LOW ORDER 553 011152 011102 MOV @R1,R2 ; HIGH ORDER 554 011154 002004 BGE .+12 ; NEGATIVE? 555 011156 005402 NEG R2 ; YES 556 011160 005403 NEG R3 ; COMPLEMENT BUT 557 011162 005602 SBC R2 558 011164 005216 INC @SP ; REMEMBER SIGN. 559 011166 005004 CLR R4 560 011170 012746 177777 MOV #-1,-(SP) ; FLAG 561 011174 012701 000012 M.JA01: MOV #12,R1 562 011200 004737 011312' JSR PC,DBL.DV ; DO DOUBLE PRECISION DIVIDE BY 10 563 011204 010346 MOV R3,-(SP) ; PUSH REMAINDER. 564 011206 010203 MOV R2,R3 ; PUT INTEGER IN LOW ORDER 565 011210 010502 MOV R5,R2 ; GET HIGH ORDER PART 566 011212 050305 BIS R3,R5 567 011214 005705 TST R5 ; TEST FOR ZERO QUOTIENT 568 011216 001366 BNE M.JA01 569 011220 010605 MOV SP,R5 ; NOW COUNT # OF DIGITS 570 011222 005204 INC R4 571 011224 005725 TST (R5)+ ; CHECK FOR FLAG 572 011226 002375 BGE .-4 573 011230 012703 000013 MOV #13,R3 574 011234 160403 SUB R4,R3 ; R3=# OF LEADING SPACES + SIGN 575 011236 005703 M.JA02: TST R3 ; COUNT EXHAUSTED? 576 011240 003404 BLE M.JA03 ; YES 577 011242 112720 000040 MOVB #40,(R0)+ ; INSERT SPACES 578 011246 005303 DEC R3 579 011250 000772 BR M.JA02 580 011252 005715 M.JA03: TST @R5 ; TEST FOR SIGN 581 011254 001403 BEQ M.JA04 582 011256 112720 000055 MOVB #55,(R0)+ ; MINUS TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-10 583 011262 000402 BR M.JA05 584 011264 112720 000040 M.JA04: MOVB #40,(R0)+ 585 011270 062716 000060 M.JA05: ADD #60,@SP ; CONVERT DIGITS TO ASCII 586 011274 112620 MOVB (SP)+,(R0)+ 587 011276 005716 TST @SP ; CHECK FLAG 588 011300 002373 BGE M.JA05 589 011302 112710 000040 MOVB #40,@R0 ; TRAILING SPACE 590 011306 022626 CMP (SP)+,(SP)+ 591 011310 000207 RTS PC 592 ; 593 ; DOUBLE PRECISION DIVIDE 594 ; 595 ; R1 CONTAINS DIVISOR 596 ; 597 ; ENTER WITH # IN R2 AND R3 598 ; 599 ; RESULT: HIGH ORDER IN R5 600 ; LOW ORDER IN R2 601 ; REMAINDER IN R3 602 ; 603 011312 006103 DBL.DV: ROL R3 604 011314 006102 ROL R2 605 011316 010305 MOV R3,R5 ; SAVE LOW ORDER 606 011320 010203 MOV R2,R3 607 011322 001402 BEQ DBL.D1 ; HIGH ORDER = 0. 608 011324 005002 CLR R2 609 011326 071201 DIV R1,R2 ; DIVIDE HIGH ORDER BY DIVISOR 610 011330 010246 DBL.D1: MOV R2,-(SP) ; SAVE HIGH ORDER QUOTIENT 611 011332 010302 MOV R3,R2 ; USE REMIANDER AS HIGH ORDER 612 011334 010503 MOV R5,R3 ; GET LOW ORDER 613 011336 006101 ROL R1 614 011340 071201 DIV R1,R2 615 011342 012605 MOV (SP)+,R5 616 011344 006003 ROR R3 617 011346 006205 ASR R5 618 011350 103002 BCC .+6 ; NEED TO SET HIGH BIT OF LOW ORDER? 619 011352 052702 100000 BIS #100000,R2 ; YES 620 011356 000207 RTS PC 621 ; FLOATING POINT INPUT/OUTPUT 622 ; 623 ; MODULES: 624 ; 1. ATOF 625 ; 2. FTOA 626 ; 3. ETOA 627 ; 628 011360 024646 ATOF: CMP -(SP),-(SP) ; TEMP AREA 629 011362 005046 CLR -(SP) ; CLEAR "ACCUMULATING" RESULT 630 011364 005046 CLR -(SP) 631 011366 005046 CLR -(SP) ; PUSH 10. ONTO STACK TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-11 632 011370 012746 041040 MOV #041040,-(SP) 633 011374 010646 10646 ; MOV SP,-(SP) ; ADD. OF 10. TO STACK 634 011376 010046 MOV R0,-(SP) ; SAVE DEFA. 635 011400 005046 CLR -(SP) ; CLEAR EXP1 636 011402 005046 CLR -(SP) ; CLEAR EXP2 637 011404 005046 CLR -(SP) ; CLEAR SWITCHES 638 011406 112102 M.AFXN: MOVB (R1)+,R2 ; GET A CHAR 639 011410 042702 177600 BIC #177600,R2 ; AND OFF UNUSED BITS. 640 011414 122702 000105 CMPB #105,R2 641 011420 001505 BEQ M.AFE ; BRANCH IF AN E IS FOUND. 642 011422 122702 000055 CMPB #55,R2 643 011426 001526 BEQ M.AFMI ; BRANCH IF MINUS SIGN. 644 011430 122702 000053 CMPB #53,R2 645 011434 001520 BEQ M.AFPL ; BRANCH IF PLUS SIGN. 646 011436 122702 000056 CMPB #56,R2 647 011442 001507 BEQ M.AFD ; BRANCH IF DECIMAL POINT. 648 011444 122702 000040 CMPB #40,R2 649 011450 001551 BEQ M.AFSP ; BRANCH IF SPACE. 650 011452 122702 000015 CMPB #15,R2 651 011456 001532 BEQ M.AFXT ; BRANCH IF CARRIAGE RETURN. 652 011460 122702 000054 CMPB #54,R2 653 011464 001527 BEQ M.AFXT ; BRANCH IF COMMA. 654 011466 122702 000060 CMPB #60,R2 655 011472 003157 BGT M.AFVS ; ERROR IF SMALLER THAN 0. 656 011474 122702 000071 CMPB #71,R2 657 011500 002554 BLT M.AFVS ; ERROR IF LARGER THAN 9. 658 011502 162702 000060 SUB #60,R2 ; CONVERT TO BINARY # 659 011506 010146 MOV R1,-(SP) ; SAVE THE SEFA OF INPUT DIGITS. 660 011510 032766 000004 000002 BIT #4,2(SP) ; TEST THE E SWITCH. 661 011516 001032 BNE M.AFXP ; BRANCH IF COLLECTING EXPONENT. 662 011520 016600 000012 MOV 12(SP),R0 663 011524 062700 000010 ADD #10,R0 ; OFFSET ADR OF 10 TO TEMP #. DEFA 664 011530 010246 MOV R2,-(SP) ; PUSH DIGIT ON THE STACK. 665 011532 010601 MOV SP,R1 ; SETUP SEFA FOR FLT. 666 011534 004737 010306' JSR PC,FLT 667 011540 005726 TST (SP)+ ; REMOVE DIGIT FROM STACK. 668 011542 016601 000012 MOV 12(SP),R1 ; GET ADR OF 10. 669 011546 075021 FMUL R1 ; MULT BY 10. 670 011550 010100 MOV R1,R0 ; SAVE ADR 671 011552 075001 FADD R1 ; ADD CURRENT DIGIT. 672 011554 012120 MOV (R1)+,(R0)+ 673 011556 011110 MOV @R1,@R0 ; MOVE TEMP TO RESULT. 674 011560 032766 000010 000002 BIT #10,2(SP) ; TEST D SWITCH 675 011566 001402 BEQ M.AFSS ; IF 0, DON'T TOUCH EXP2. 676 011570 005366 000004 DEC 4(SP) ; DECREMENT EXP2 677 011574 012601 M.AFSS: MOV (SP)+,R1 ; GET DIGIT SEFA 678 011576 052716 000001 BIS #1,@SP ; SET S SWITCH 679 011602 000701 BR M.AFXN ; GO GET ANOTHER DIGIT. 680 011604 016603 000006 M.AFXP: MOV 6(SP),R3 ; GET EXP1 TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-12 681 011610 020327 000127 CMP R3,#127 ; CHECK FOR LARGE EXPONENT. 682 011614 003111 BGT M.AFVU 683 011616 012746 000012 MOV #12,-(SP) 684 011622 070326 MUL (SP)+,R3 ; MULT BY 10 AND 685 011624 060203 ADD R2,R3 ; ADD NEW DIGIT. 686 011626 010366 000006 MOV R3,6(SP) ; SAVE EXP1 BACK ON STACK. 687 011632 000760 BR M.AFSS ; SET S SWITCH 688 011634 032716 000004 M.AFE: BIT #4,@SP ; 1ST E? 689 011640 001074 BNE M.AFVS ; NO ERROR 690 011642 052716 000004 BIS #4,@SP ; SET E 691 011646 032716 000001 BIT #1,@SP ; HAVE A FRACTION? 692 011652 001467 BEQ M.AFVS ; NO FRACTION 693 011654 042716 000011 BIC #11,@SP ; CLEAR S AND D SWITCHES. 694 011660 000652 BR M.AFXN ; GET NEXT CHAR. 695 011662 032716 000014 M.AFD: BIT #14,@SP ; TEST E AND D SWITCHES. 696 011666 001061 BNE M.AFVS ; EITHER ONE IS AN ERROR. 697 011670 052716 000010 BIS #10,@SP ; SET D 698 011674 000644 BR M.AFXN 699 011676 042716 000400 M.AFPL: BIC #400,@SP ; CLEAR M SWITCH 700 011702 000401 BR .+4 701 011704 052716 000400 M.AFMI: BIS #400,@SP ; SET M SWITCH 702 011710 032716 000004 BIT #4,@SP ; TEST E SWITCH 703 011714 001014 BNE M.AFSE ; BRANCH IF SIGN OF EXPONENT 704 011716 032716 000031 BIT #31,@SP ; TEST A, D AND S 705 011722 001043 BNE M.AFVS ; ERROR IF ANY SET. 706 011724 052716 000020 BIS #20,@SP ; SET A 707 011730 032716 000400 BIT #400,@SP 708 011734 001624 BEQ M.AFXN ; RETURN ON PLUS. 709 011736 052716 000100 BIS #100,@SP ; SET MINUS SIGN. 710 011742 000621 M.AFNX: BR M.AFXN ; PDP-11 BRANCHES 711 011744 000442 M.AFXT: BR M.AFTX ; DON'T REACH MORE THAN 128... 712 011746 032716 000051 M.AFSE: BIT #51,@SP ; TEST B, D AND S 713 011752 001027 BNE M.AFVS ; ERROR IF EITHER SET. 714 011754 052716 000040 BIS #40,@SP ; SET B 715 011760 032716 000400 BIT #400,@SP ; TEST FOR MINUS 716 011764 001766 BEQ M.AFNX ; EXIT IF PLUS 717 011766 052716 000200 BIS #200,@SP 718 011772 000763 BR M.AFNX 719 011774 032716 000011 M.AFSP: BIT #11,@SP ; TEST FOR START OF SIGNIFICANCE. 720 012000 001760 BEQ M.AFNX ; IF NONE IGNORE SPACES. 721 012002 112102 M.AFX1: MOVB (R1)+,R2 ; GET CHAR 722 012004 042702 177600 BIC #177600,R2 723 012010 122702 000040 CMPB #40,R2 ; SPACE? 724 012014 001772 BEQ M.AFX1 ; YES 725 012016 122702 000015 CMPB #15,R2 726 012022 001413 BEQ M.AFTX ; BRANCH ON CR. 727 012024 122702 000054 CMPB #54,R2 ; COMMA? 728 012030 001410 BEQ M.AFTX 729 012032 052716 000002 M.AFVS: BIS #2,@SP ; SET V TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-13 730 012036 000761 BR M.AFX1 731 012040 005726 M.AFVU: TST (SP)+ ; POP THE STACK. 732 012042 000773 BR M.AFVS 733 012044 052716 000002 M.AFVV: BIS #2,@SP ; SET V AND QUIT. 734 012050 000455 BR M.AFX5 735 012052 005716 M.AFTX: TST @SP ; ANY SWITCHES? 736 012054 001405 BEQ M.AFX6 ; NO 737 012056 032716 000001 BIT #1,@SP ; SIGNIFICANCE? 738 012062 001002 BNE M.AFX6 ; YES 739 012064 052716 000002 BIS #2,@SP 740 012070 010146 M.AFX6: MOV R1,-(SP) ; SAVE CHAR POINTER. 741 012072 032766 000100 000002 BIT #100,2(SP) 742 012100 001403 BEQ M.AFX2 ; NOT NEGATIVE 743 012102 062766 100000 000020 ADD #100000,20(SP) 744 012110 032766 000200 000002 M.AFX2: BIT #200,2(SP) ; NEGATIVE EXP? 745 012116 001407 BEQ M.AFX3 ; NO 746 012120 005466 000006 NEG 6(SP) 747 012124 102004 BVC M.AFX3 ; VALID EXP? 748 012126 052766 000002 000002 BIS #2,2(SP) ; NO 749 012134 000423 BR M.AFX5 750 012136 066666 000004 000006 M.AFX3: ADD 4(SP),6(SP) 751 012144 001417 BEQ M.AFX5 ; BRANCH IF EXP1+EXP2=0 752 012146 102736 BVS M.AFVV ; OVERFLOW 753 012150 002407 BLT M.AFDV ; IF LESS THAN 0 DIVIDE. 754 012152 016600 000012 M.AFX4: MOV 12(SP),R0 755 012156 075020 FMUL R0 756 012160 005366 000006 DEC 6(SP) ; DECREMENT AND TEST 757 012164 003372 BGT M.AFX4 ; FOR DONE. 758 012166 000406 BR M.AFX5 759 012170 016600 000012 M.AFDV: MOV 12(SP),R0 760 012174 075030 FDIV R0 761 012176 005266 000006 INC 6(SP) ; INCREMENT AND TEST 762 012202 002772 BLT M.AFDV ; FOR DONE 763 012204 012601 M.AFX5: MOV (SP)+,R1 ; RESTORE CHAR POINTER. 764 012206 012604 MOV (SP)+,R4 ; SAVE SWITCHES 765 012210 022626 CMP (SP)+,(SP)+ 766 012212 012600 MOV (SP)+,R0 ; DEFA 767 012214 062706 000006 ADD #6,SP 768 012220 012620 MOV (SP)+,(R0)+ ; MOVE RESULT TO DEFA 769 012222 012610 MOV (SP)+,@R0 770 012224 022626 CMP (SP)+,(SP)+ ; CLEAR STACK 771 012226 032704 000002 BIT #2,R4 772 012232 001401 BEQ .+4 773 012234 000262 SEV ; ERROR RETURN. 774 012236 000207 RTS PC ; NORMAL RETURN 775 012240 005046 FTOA: CLR -(SP) ; CLEAR SWITCHES & SET F MODE 776 012242 012702 000013 MOV #13,R2 ; COUNTER=11. 777 012246 000404 BR M.XAO 778 012250 005046 ETOA: CLR -(SP) ; CLEAR SWITCHES & SET E MODE TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-14 779 012252 005216 INC @SP 780 012254 012702 000017 MOV #17,R2 ; COUNTER=15 781 012260 010046 M.XAO: MOV R0,-(SP) ; SAVE DEFA 782 012262 005046 CLR -(SP) ; ZERO DECIMAL EXP. 783 012264 112720 000040 MOVB #040,(R0)+ 784 012270 077203 SOB R2,.-4 785 012272 012702 000564 MOV #M.TEN-.-6,R2 786 012276 060702 ADD PC,R2 ; ADDRESS OF FLOATING 10. 787 012300 012703 000004 MOV #4,R3 ; LENGTH OF FLOATING #. 788 012304 010304 MOV R3,R4 ; # OF CONTANTS IN TABLE. 789 012306 010246 MOV R2,-(SP) ; MOVE ADDRESS TO STACK 790 012310 060302 ADD R3,R2 ; COMPUTE NEXT ADDRESS 791 012312 077403 SOB R4,.-4 792 012314 160306 SUB R3,SP 793 012316 012116 MOV (R1)+,@SP ; MOVE OUR NUMBER TO STACK 794 012320 011166 000002 MOV @R1,2(SP) 795 012324 005716 TST @SP ; TEST FOR ZERO. 796 012326 001020 BNE M.XA1 ; NOT ZERO. 797 012330 016600 000016 MOV 16(SP),R0 ; PICK UP DEFA. 798 012334 005720 TST (R0)+ ; GO TO 3RD POSITION 799 012336 012702 000010 MOV #10,R2 ; INSERT 8 ZEROES 800 012342 112720 000060 MOVB #60,(R0)+ 801 012346 077203 SOB R2,.-4 802 012350 005366 000014 DEC 14(SP) ; ADJUST EXP 803 012354 005766 000020 TST 20(SP) ; TYPE E OR F? 804 012360 001121 BNE M.XA6 ; TYPE E 805 012362 005266 000014 INC 14(SP) ; MOVE DECIMAL POINT TO RIGHT 806 012366 000516 BR M.XA6 ; REJOIN MAIN STREAM 807 012370 003005 M.XA1: BGT M.XA2 ; MINUS? 808 012372 042716 100000 BIC #100000,@SP ; YES COMPLEMENT BUT 809 012376 052766 000004 000020 BIS #4,20(SP) ; REMEMBER IT WAS NEGATIVE. 810 012404 010601 M.XA2: MOV SP,R1 ; OUR NUMBER SOURCE 811 012406 016600 000012 MOV 12(SP),R0 ; 10 IS DEFA. 812 012412 004737 010126' JSR PC,CMPF ; COMPARE FPN:10. 813 012416 002016 BGE M.XA4 ; BRANCH IF HIGH 814 012420 010600 M.XA3: MOV SP,R0 ; OUR # IS DEFA AND 815 012422 016601 000010 MOV 10(SP),R1 ; 1 IS SEFA. 816 012426 004737 010126' JSR PC,CMPF ; COMPARE 1.: FPN 817 012432 003420 BLE M.XA5 ; BRANCH IF IN RANGE 818 012434 016600 000012 MOV 12(SP),R0 819 012440 004737 010152' JSR PC,M.MOVE ; SETUP TO MULTIPLY BY 10 820 012444 075026 FMUL SP 821 012446 005366 000014 DEC 14(SP) ; DECREMENT EXP 822 012452 000762 BR M.XA3 823 012454 016600 000012 M.XA4: MOV 12(SP),R0 824 012460 004737 010152' JSR PC,M.MOVE ; SETUP TO DIVIDE BY 10 825 012464 075036 FDIV SP 826 012466 005266 000014 INC 14(SP) ; INCREMENT EXP 827 012472 000744 BR M.XA2 ; REPEAT RANGE CHECK. TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-15 828 012474 016600 000006 M.XA5: MOV 6(SP),R0 829 012500 004737 010152' JSR PC,M.MOVE ; SETUP TO MULTIPLY BY 10 TO THE 7TH 830 012504 075026 FMUL SP ; TO GET 8 SIGNIFICANT FIGURES. 831 012506 016600 000004 MOV 4(SP),R0 832 012512 004737 010152' JSR PC,M.MOVE ; ADD .5 TO ROUND OFF #. 833 012516 075006 FADD SP 834 012520 010600 MOV SP,R0 835 012522 010001 MOV R0,R1 836 012524 004737 010164' JSR PC,FIXD ; CONVERT TO INTEGER IN PLACE. 837 012530 010601 MOV SP,R1 ; # IS TO BE SOURCE. 838 012532 162706 000014 SUB #14,SP ; TEMP AREA TO STACK. 839 012536 010600 MOV SP,R0 840 012540 004737 011146' JSR PC,JTOA ; FRACTION TO ASCII STRING 841 012544 010604 MOV SP,R4 842 012546 005724 TST (R4)+ ; SKIP 1ST TWO SPACES 843 012550 122714 000040 CMPB #40,@R4 ; SPACE? 844 012554 001403 BEQ M.XA7 ; YES 845 012556 005266 000030 INC 30(SP) ; MOVE DECIMAL POINT 846 012562 000401 BR M.XA7+2 847 012564 005204 M.XA7: INC R4 ; GOTO 3RD POSITION. 848 012566 016600 000032 MOV 32(SP),R0 ; DEFA 849 012572 032766 000004 000034 BIT #4,34(SP) ; NEGATIVE? 850 012600 001402 BEQ .+6 ; NO 851 012602 112710 000055 MOVB #55,@R0 ; INSERT - SIGN. 852 012606 005720 TST (R0)+ 853 012610 012703 000010 MOV #10,R3 ; SETUP COUNTER 854 012614 112420 MOVB (R4)+,(R0)+ 855 012616 077302 SOB R3,.-2 856 012620 062706 000014 ADD #14,SP ; REMOVE TEMP ASCII STRING 857 012624 062706 000014 M.XA6: ADD #14,SP ; REMOVE OUR # AND TABLE OF CONSTANTS. 858 012630 005216 INC @SP ; CORRECT FOR 8 SIGNIFICANT FIGURES. 859 012632 032766 000001 000004 BIT #1,4(SP) ; TYPE E OR F CONVERSION? 860 012640 001434 BEQ M.FA1 ; BRANCH IF F. 861 012642 010601 MOV SP,R1 ; EXP TO SOURCE 862 012644 162706 000010 SUB #10,SP ; EXPAND STACK FOR ITOA 863 012650 010600 MOV SP,R0 864 012652 004737 011064' JSR PC,ITOA ; CONVERT EXP TO ASCII 865 012656 016600 000012 MOV 12(SP),R0 ; GET DEFA 866 012662 005200 INC R0 ; POP POINTER POSITION 867 012664 112710 000056 MOVB #56,@R0 ; INSERT DECIMAL POINT. 868 012670 062700 000015 ADD #15,R0 ; POINT TO JUST PAST END 869 012674 010601 MOV SP,R1 870 012676 062701 000006 ADD #6,R1 871 012702 114140 MOVB -(R1),-(R0) ; MOVE UNITS 872 012704 114140 MOVB -(R1),-(R0) ; MOVE TENS 873 012706 114140 MOVB -(R1),-(R0) 874 012710 122711 000057 CMPB #57,@R1 ; COMPARE FOR MORE 875 012714 002774 BLT .-6 876 012716 112740 000105 MOVB #105,-(R0) ; INSERT AN E. TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-16 877 012722 062706 000016 ADD #16,SP ; ZOT THE STACK. 878 012726 000242 CLV 879 012730 000207 RTS PC 880 012732 016600 000002 M.FA1: MOV 2(SP),R0 ; PICK UP DEFA 881 012736 022716 000010 CMP #10,@SP 882 012742 002437 BLT M.FAV ; BRANCH IF EXP TOO LARGE. 883 012744 022716 177770 CMP #-10,@SP 884 012750 002034 BGE M.FAV ; BRANCH IF EXP TOO SMALL. 885 012752 005200 INC R0 ; MOVE TO 2ND POSITION. 886 012754 012603 MOV (SP)+,R3 ; TEST DIRECTION OF SHIFT 887 012756 003005 BGT M.FA4 ; LEFT 888 012760 100410 BMI M.FA5 ; RIGHT 889 012762 112710 000056 M.FA2: MOVB #56,@R0 ; INSERT DECIMAL POINT 890 012766 022626 M.FA3: CMP (SP)+,(SP)+ ; ZOT STACK 891 012770 000756 BR M.FA1-4 892 012772 116020 000001 M.FA4: MOVB 1(R0),(R0)+ ; SHIFT ONE DIGIT LEFT 893 012776 077303 SOB R3,M.FA4 894 013000 000770 BR M.FA2 895 013002 112710 000056 M.FA5: MOVB #056,@R0 ; INSERT DECIMAL POINT. 896 013006 012702 000010 MOV #10,R2 ; COMPUTE SIGNIFICANT DIGITS 897 013012 060302 ADD R3,R2 ; WHICH IS 8-EXP. 898 013014 062700 000011 ADD #11,R0 ; POINT TO END OF STRING+1 899 013020 010001 MOV R0,R1 900 013022 060301 ADD R3,R1 ; POINT TO LEAST SIGNIFICANT DIGIT 901 013024 114140 MOVB -(R1),-(R0) 902 013026 077202 SOB R2,.-2 903 013030 112740 000060 MOVB #60,-(R0) ; INSERT ZEROES 904 013034 005203 INC R3 905 013036 100774 BMI .-6 906 013040 000752 BR M.FA3 907 013042 012702 000012 M.FAV: MOV #12,R2 ; MOVE * INTO FIELD WHEN OVERFLOW. 908 013046 112720 000052 MOVB #52,(R0)+ ; 52=* 909 013052 077203 SOB R2,.-4 910 013054 062706 000006 ADD #6,SP ; REMOVE JUNK 911 013060 000262 SEV 912 013062 000207 RTS PC 913 013064 041040 000000 M.TEN: .WORD 041040,0 ; FLOATING 10 914 013070 040200 000000 .WORD 040200,0 ; FLOATING 1 915 013074 046030 113200 .WORD 046030,113200 ; 10**7 916 013100 040000 000000 .WORD 040000,0 ; FLOATING .5 917 ; 918 ; TRIGONOMETRIC, EXPONENTIAL AND 919 ; SQUARE ROOT FUNCTIONS 920 ; 921 ; MODULES: 922 ; 1. SIN 923 ; 2. COS 924 ; 3. ATAN 925 ; 4. SQRT TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-17 926 ; 5. EXP 927 ; 6. LOG 928 ; 929 ; COMPUTES FRACTIONAL PART OF: # TIME DESTINATION. 930 ; R1 POINTS TO # 931 ; SP+2 HAS DEFA 932 013104 012666 000002 M.FRAC: MOV (SP)+,2(SP) ; POP RETURN ADR. 933 013110 011600 MOV @SP,R0 934 013112 060701 M.FRA1: ADD PC,R1 935 013114 004737 010406' JSR PC,SR.DST ; MOVE SOURCE & DEST TO STACK 936 013120 010601 MOV SP,R1 937 013122 075021 FMUL R1 ; MULTIPLY 938 013124 005746 TST -(SP) ; MAKE ROOM FOR INTEGER. 939 013126 010600 MOV SP,R0 940 013130 004737 010172' JSR PC,FIX 941 013134 010001 MOV R0,R1 ; SET SEFA AND 942 013136 005720 TST (R0)+ ; DEFA 943 013140 004737 010306' JSR PC,FLT 944 013144 005740 TST -(R0) 945 013146 075010 FSUB R0 ; DEST=DEST-INT(DEST) 946 013150 000176 000014 JMP @14(SP) 947 ; 948 ; SUBROUTINE PERFORMS AN APPROXIMATION 949 ; OF THE FORM .5(Y0+X/Y0) 950 013154 012603 M.APPR: MOV (SP)+,R3 ; POP RETURN ADDRESS. 951 013156 010600 MOV SP,R0 952 013160 022020 CMP (R0)+,(R0)+ ; SET R0 TO X0 953 013162 010601 MOV SP,R1 954 013164 004737 010406' JSR PC,SR.DST ; MOVE X0 & X TO STACK. 955 013170 075036 FDIV SP 956 013172 075006 FADD SP ; X=X0/X+X 957 013174 162716 000200 SUB #200,@SP ; DECREMENT EXP OF X 958 013200 000242 CLV 959 013202 010307 MOV R3,PC 960 ; SETS UP DOPOL 961 ; POINTER TO DEST IN R0 962 ; AFTER POPING RET ADR SETS UP STACK AS SHOWN: 963 ; SP HIGH ORDER TEMP FLOATING # FOR CONSTANTS 964 ; +2 LOW ORDER 965 ; +4 HIGH ORDER DEST VALUE 966 ; +6 LOW ORDER 967 ; +10 HIGH ORDER OF DEST**2 968 ; +12 LOW ORDER (HAD RET ADR BEFORE POPPED) 969 ; +14 DUPLICATE OF SP+4 970 ; +16 DUPLICATE OF SP+6 971 013204 012603 M.SETU: MOV (SP)+,R3 ; POP RET ADR 972 013206 010001 MOV R0,R1 973 013210 004737 010406' JSR PC,SR.DST ; PUSH DEST ON TO STACK TWICE. 974 013214 010600 MOV SP,R0 ; PUT DEST**2 ON STACK IN PLACE OF TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-18 975 013216 075020 FMUL R0 ; ONE OF THE DEST VALUES. 976 013220 024646 CMP -(SP),-(SP) ; PUT TEMP # ON TO STACK 977 013222 010307 MOV R3,PC 978 ; EVALS A POLYNOMIAL ACCORDING TO PARAMETERS ON STACK(SEE M.SETU) 979 ; R3=* OF CONSTANTS 980 ; R5=STARTING ADR OF CONSTANTS 981 ; 982 ; DEST=(((((( C1*X)+C2)*X**2)+C3)*X**2)...)*X WHERE X=ORIGINAL DEST 983 ; 984 ; 985 013224 005743 M.DOPO: TST -(R3) ; SUB 2 FROM COUNTER 986 013226 010600 MOV SP,R0 987 013230 005720 TST (R0)+ ; SET R0 TO TEMP AREA ON STACK 988 013232 010501 MOV R5,R1 ; ADR OF 1ST CONSTANT 989 013234 004737 010114' JSR PC,MOVF ; MOVE CONSTANT INTO STACK TEMP AREA 990 013240 075020 FMUL R0 ; DEST=C1*DEST 991 013242 022525 M.LOOP: CMP (R5)+,(R5)+ ; MOVE TO NEXT CONSTANT 992 013244 010501 MOV R5,R1 993 013246 024040 CMP -(R0),-(R0) ; RESET R0 994 013250 004737 010114' JSR PC,MOVF 995 013254 075000 FADD R0 ; DEST=DEST+CONSTANT 996 013256 005703 TST R3 997 013260 001410 BEQ M.HANK ; BRANCH IF DONE 998 013262 010001 MOV R0,R1 999 013264 022121 CMP (R1)+,(R1)+ ; R1 POINTS TO X**2 1000 013266 024040 CMP -(R0),-(R0) 1001 013270 004737 010114' JSR PC,MOVF 1002 013274 075020 FMUL R0 ; DEST=DEST*X**2 1003 013276 005303 DEC R3 1004 013300 000760 BR M.LOOP ; DECREMENT COUNTER 1005 013302 012603 M.HANK: MOV (SP)+,R3 ; POP RETURN ADR. 1006 013304 022626 CMP (SP)+,(SP)+ ; POP TEMP FLOATING # 1007 013306 022020 CMP (R0)+,(R0)+ 1008 013310 012620 MOV (SP)+,(R0)+ ; MOVE DEST UP THE STACK 1009 013312 012620 MOV (SP)+,(R0)+ 1010 013314 075026 FMUL SP ; DEST=DEST*X 1011 ; STACK NOW HAS: 1012 ; SP DEST HIGH 1013 ; +2 DEST LOW 1014 013316 010307 MOV R3,PC 1015 ; INIT PUSHES POINTERS R0 AND R1 ON STACK ALONG WITH A FLAG. 1016 ; ALSO MOVES SOURCE # TO DEST # (FLOATING) 1017 013320 011603 M.INIT: MOV @SP,R3 ; RETURN ADR 1018 013322 005016 CLR @SP ; CLEAR A FALG 1019 013324 010146 M.INI3: MOV R1,-(SP) ; PUSH SOURCE POINTER 1020 013326 010046 MOV R0,-(SP) ; PUSH DEST POINTER 1021 013330 004737 010114' JSR PC,MOVF ; MOVE SOURCE TO DESTINATION. 1022 013334 010307 MOV R3,PC 1023 013336 012603 M.INI2: MOV (SP)+,R3 ; GET RET ADR TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-19 1024 013340 000771 BR M.INI3 1025 013342 004737 013320' SIN: JSR PC,M.INIT ; CLEAR FLAGS, PUSH R1 & R0 1026 013346 005710 M.SIN1: TST @R0 ; TEXT Y 1027 013350 002005 BGE M.NOTN ; Y>=0 1028 013352 042710 100000 BIC #100000,@R0 ; LET Y=-Y 1029 013356 005266 000004 INC 4(SP) ; SET NFLAG=1 1030 013362 000404 BR M.NOTE 1031 013364 001003 M.NOTN: BNE M.NOTE ; Y=0? 1032 013366 062706 000006 M.EXIT: ADD #6,SP ; YES 1033 013372 000207 RTS PC 1034 013374 012701 001224 M.NOTE: MOV #M.PIE2-M.FRA1-2,R1 ; LET Y=Y*(2/PI) 1035 013400 004737 013104' JSR PC,M.FRAC ; COMPUTE FRACTIONAL PART. 1036 ; STACK HAS: SP INT PART (NOT FLOATED) 1037 ; +2 INT PART (FLOATED) 1038 ; +4 1039 ; +6 FRACTIONAL PART (KNOWN AS F) 1040 ; +8 1041 013404 012603 MOV (SP)+,R3 1042 013406 012701 000730 MOV #M.ONE-.-6,R1 ; LET F=-(F-1) 1043 013412 060701 ADD PC,R1 1044 013414 010600 MOV SP,R0 1045 013416 004737 010114' JSR PC,MOVF 1046 013422 042703 177774 BIC #177774,R3 ; GET 2 LOW ORDER BITS. 1047 013426 010337 016500' MOV R3,QUAD ; SAVE QUADRANT 1048 013432 006303 ASL R3 ; MULT BY 2. 1049 013434 062703 000666 ADD #M.TAB-.-6,R3 ; COMPUTE ADR OF BRANCH TABLE. 1050 013440 060703 M.TTX: ADD PC,R3 1051 013442 061307 ADD @R3,PC ; BRANCH THRU TABLE. 1052 013444 075010 M.Q2: FSUB R0 1053 013446 062766 100000 000004 M.Q3: ADD #100000,4(SP) ; LET F=-F 1054 013454 000401 BR M.EVAL 1055 013456 075010 M.Q4: FSUB R0 ; LET F=(F-1) 1056 013460 022626 M.EVAL: CMP (SP)+,(SP)+ 1057 013462 010600 MOV SP,R0 1058 013464 012705 000656 MOV #M.ALL-.-6,R5 ; ADR OF CONSTANT TABLE 1059 013470 060705 ADD PC,R5 1060 013472 004737 013204' JSR PC,M.SETU ; SETUP DOPOL 1061 013476 012703 000006 MOV #6,R3 1062 013502 004737 013224' JSR PC,M.DOPO 1063 013506 016600 000004 MOV 4(SP),R0 ; GET DEFA FOR FUNCTION 1064 013512 012620 MOV (SP)+,(R0)+ ; MOVE RESULT TO DEST. 1065 013514 012620 MOV (SP)+,(R0)+ 1066 013516 005766 000004 TST 4(SP) ; NFLAG SET? 1067 013522 001721 BEQ M.EXIT ; NO 1068 013524 062740 100000 ADD #100000,-(R0) ; NEGATE RESULT 1069 013530 000716 BR M.EXIT 1070 013532 004737 013320' COS: JSR PC,M.INIT ; CLEAR FLAG & PUSH POINTERS 1071 013536 012701 000630 MOV #M.PI2-.-6,R1 1072 013542 060701 ADD PC,R1 TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-20 1073 013544 004737 010406' JSR PC,SR.DST ; PUSH SOURCE AND DEST ON STACK 1074 013550 075006 FADD SP ; LET Y=PI/2+Y 1075 013552 012620 MOV (SP)+,(R0)+ ; POP # TO DEST 1076 013554 012620 MOV (SP)+,(R0)+ 1077 013556 011600 MOV @SP,R0 1078 013560 000672 BR M.SIN1 1079 013562 005046 ATAN: CLR -(SP) ; CLEAR NFLAG 1080 013564 004737 013320' JSR PC,M.INIT ; CLEAR AFLAG,PUSH POINTERS 1081 013570 005710 TST (R0) ; DOES X=0? 1082 013572 001543 BEQ M.TT9 1083 013574 002004 BGE M.P2 ; NOT>0 - IS X<0 ? 1084 013576 005266 000006 INC 6(SP) ; X IS - SO SET NFLAG 1085 013602 042710 100000 BIC #100000,@R0 ; LET X=-X 1086 013606 012701 000530 M.P2: MOV #M.ONE-.-6,R1 ; IS X>1 OR IS X-1>0? 1087 013612 060701 ADD PC,R1 1088 013614 011600 MOV @SP,R0 1089 013616 004737 010126' JSR PC,CMPF 1090 013622 002017 BGE M.P 1091 013624 005266 000004 INC 4(SP) ; X IS>1,SET AFLAG 1092 013630 011601 MOV @SP,R1 1093 013632 012700 000504 MOV #M.ONE-.-6,R0 ; LET X=1/X 1094 013636 060700 ADD PC,R0 1095 013640 004737 010406' JSR PC,SR.DST ; MOVE ONE ON TO THE STACK 1096 013644 075036 FDIV SP 1097 013646 010601 MOV SP,R1 ; MOVE RESULT BACK INTO DEST 1098 013650 016600 000004 MOV 4(SP),R0 1099 013654 004737 010114' JSR PC,MOVF 1100 013660 022626 CMP (SP)+,(SP)+ ; POP PAST ONE 1101 013662 012701 000510 M.P: MOV #M.OT32-.-6,R1 ; IS X<2-SQT(3)? 1102 013666 060701 ADD PC,R1 1103 013670 011600 MOV @SP,R0 1104 013672 004737 010126' JSR PC,CMPF 1105 013676 003406 BLE M.BR4 1106 013700 005046 CLR -(SP) ; IT IS SO LET C=0 1107 013702 005046 CLR -(SP) 1108 013704 022020 CMP (R0)+,(R0)+ 1109 013706 014046 MOV -(R0),-(SP) ; PUSH DEST ON STACK 1110 013710 014046 MOV -(R0),-(SP) 1111 013712 000434 BR M.EVA1 1112 ; LET X=(X*SQT(3)-1)/(X+SQT(3)) 1113 ; LET C=PI/6 1114 013714 012700 000466 M.BR4: MOV #M.PI6-.-6,R0 1115 013720 060700 ADD PC,R0 1116 013722 004737 010152' JSR PC,M.MOVE ; MOVE PI6 ONTO THE STACK 1117 013726 016600 000004 MOV 4(SP),R0 1118 013732 012701 000444 MOV #M.ROT3-.-6,R1 1119 013736 060701 ADD PC,R1 1120 013740 004737 010406' JSR PC,SR.DST ; LET DEST=DEST*SQT(3) 1121 013744 075026 FMUL SP TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-21 1122 013746 012700 000370 MOV #M.ONE-.-6,R0 ; LET DEST=DEST-1 1123 013752 060700 ADD PC,R0 1124 013754 004737 010152' JSR PC,M.MOVE 1125 013760 075016 FSUB SP 1126 ; DEST IS NOW X*SQT(3)-1 1127 ; COMPUTE X+SQT(3) 1128 013762 016600 000010 MOV 10(SP),R0 1129 013766 012701 000410 MOV #M.ROT3-.-6,R1 1130 013772 060701 ADD PC,R1 1131 013774 004737 010406' JSR PC,SR.DST ; DIVIDE DEST BY X+SQT(3) 1132 014000 075006 FADD SP 1133 014002 075036 FDIV SP 1134 ; EVALUATE THE POLYNOMIAL 1135 014004 010600 M.EVA1: MOV SP,R0 ; POINTER TO DEST 1136 014006 012705 000400 MOV #M.TAB2-.-6,R5 ; POINTER TO CONSTANT TABLE 1137 014012 060705 ADD PC,R5 1138 014014 004737 013204' JSR PC,M.SETU ; SET UP DOPOL 1139 014020 012703 000005 MOV #5,R3 ; NUMBER OF CONSTANTS 1140 014024 004737 013224' JSR PC,M.DOPO 1141 014030 075006 FADD SP ; LET DEST=DEST+C 1142 014032 005766 000010 TST 10(SP) ; AFLAG=0? 1143 014036 001410 BEQ M.P6 1144 014040 012700 000326 MOV #M.PI2-.-6,R0 ; NO LET DEST=PI/2-DEST 1145 014044 060700 ADD PC,R0 1146 014046 004737 010152' JSR PC,M.MOVE 1147 014052 075016 FSUB SP 1148 014054 062716 100000 ADD #100000,@SP 1149 014060 005766 000012 M.P6: TST 12(SP) ; WAS NFLAG SET? 1150 014064 001402 BEQ .+6 1151 014066 062716 100000 ADD #100000,@SP ; LET DEST=-DEST 1152 014072 016600 000004 MOV 4(SP),R0 1153 014076 012620 MOV (SP)+,(R0)+ ; POP # TO DEST 1154 014100 012620 MOV (SP)+,(R0)+ 1155 014102 062706 000010 M.TT9: ADD #10,SP 1156 014106 000242 CLV ; OUT WITH OVERFLOW ON A BIG MACH 1157 014110 000207 RTS PC 1158 014112 004737 013320' SQRT: JSR PC,M.INIT ; CLEAR FLAG AND PUSH POINTERS. 1159 014116 005710 TST @R0 1160 014120 001476 BEQ M.BR3 ; IF ZERO, WE HAVE THE ANSWER. 1161 014122 002002 BGE M.BR1 ; NEGATIVE? 1162 014124 005266 000004 INC 4(SP) ; YES, SET FLAG. 1163 014130 005066 000002 M.BR1: CLR 2(SP) ; CLEAR ODD FLAG (EXP ODD OR EVEN) 1164 014134 011046 MOV @R0,-(SP) ; SAVE EXP ON STACK 1165 014136 042710 177600 BIC #177600,@R0 ; CLEAR EXP OF # 1166 014142 052710 040000 BIS #040000,@R0 ; SET EXP=200 1167 014146 010600 MOV SP,R0 ; ADR OF SAVED EXP. 1168 014150 006310 ASL @R0 1169 014152 062710 100000 ADD #100000,@R0 ; COMPLEMENT HIGH BIT OF EXP. 1170 014156 105720 TSTB (R0)+ ; GOTO ODD BYTE TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-22 1171 014160 106210 ASRB @R0 ; SAVED EXP ODD OR EVEN? 1172 014162 005566 000004 ADC 4(SP) ; LET OFLAG=CARRY BIT. 1173 014166 105016 CLRB @SP ; CLEAR LOW BYTE 1174 014170 006216 ASR @SP ; SAVED EXP=EXP/2 1175 014172 016600 000002 MOV 2(SP),R0 1176 014176 010001 MOV R0,R1 1177 014200 004737 010406' JSR PC,SR.DST ; MOVE # ON TO STACK TWICE 1178 014204 012700 000236 MOV #M.BB-.-6,R0 1179 014210 060700 ADD PC,R0 1180 014212 004737 010152' JSR PC,M.MOVE ; MOVE CONSTANT TO STACK 1181 014216 075026 FMUL SP ; LET X=B*X 1182 014220 012700 000216 MOV #M.AA-.-6,R0 1183 014224 060700 ADD PC,R0 1184 014226 004737 010152' JSR PC,M.MOVE ; LET X=X+A 1185 014232 075006 FADD SP 1186 014234 004737 013154' JSR PC,M.APPR ; DO 1ST APPROX. 1187 014240 004737 013154' JSR PC,M.APPR ; DO 2ND 1188 014244 004737 013154' JSR PC,M.APPR ; DO 3RD 1189 014250 066616 000010 ADD 10(SP),@SP ; ADD SAVED EXP TO EXP(DEST) 1190 014254 042716 100000 BIC #100000,@SP ; GET RID OF CARRY FROM EXP 1191 014260 005766 000014 TST 14(SP) ; WAS OFLAG SET? 1192 014264 001406 BEQ M.BR2 ; NO 1193 014266 012700 000144 MOV #M.ROOT-.-6,R0 ; MULT BY SQR(2) 1194 014272 060700 ADD PC,R0 1195 014274 004737 010152' JSR PC,M.MOVE 1196 014300 075026 FMUL SP 1197 014302 016600 000012 M.BR2: MOV 12(SP),R0 ; MOV RESULT TO DESTINATION 1198 014306 012620 MOV (SP)+,(R0)+ 1199 014310 012620 MOV (SP)+,(R0)+ 1200 014312 062706 000006 ADD #6,SP ; POP EXTRA STUFF 1201 014316 022626 M.BR3: CMP (SP)+,(SP)+ 1202 014320 005726 TST (SP)+ ; NFLAG SET? 1203 014322 001401 BEQ .+4 ; NO 1204 014324 000262 SEV ; SET V 1205 014326 000207 RTS PC 1206 ; STORAGE 1207 ; SIN 1208 014330 000014 000000 000002 M.TAB: .WORD M.EVAL-M.TTX-4,M.Q2-M.TTX-4,M.Q3-M.TTX-4 1209 014336 000012 .WORD M.Q4-M.TTX-4 1210 014340 040042 174604 M.PIE2: .WORD 040042,174604 ; 2/PI 1211 014344 040200 000000 M.ONE: .WORD 040200,0 ; 1. 1212 014350 133545 061701 M.ALL: .WORD 133545,061701 ;-.00000341817 1213 014354 035047 177766 .WORD 035047,177766 ; .00016021713 1214 014360 136231 064107 .WORD 136231,064107 ;-.00468162024 1215 014364 037243 032736 .WORD 037243,032736 ; .07969258729 1216 014370 140045 056747 .WORD 140045,056747 ;-.64596409264 1217 014374 040311 007733 M.PI2: .WORD 040311,007733 ; PI/2 1218 ; ARCTAN 1219 014400 037611 030243 M.OT32: .WORD 37611,30243 ; 2-SQT(3) TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-23 1220 014404 040335 131727 M.ROT3: .WORD 40335,131727 ; SQT(3) 1221 014410 040006 005222 M.PI6: .WORD 40006,5222 ; PI/6 1222 014414 037302 062456 M.TAB2: .WORD 37302,62456 ; .09491954952 1223 014420 137421 021340 .WORD 137421,21340 ; -.14173460613 1224 014424 037514 141667 .WORD 37514,141667 ; .19996534780 1225 014430 137652 125234 .WORD 137652,125234 ; -.33333289364 1226 014434 040177 177777 .WORD 40177,177777 ; .99999999843 1227 ; SQUARE ROOT 1228 014440 040265 002363 M.ROOT: .WORD 040265,002363 ; SQRT(2) 1229 014444 037725 124527 M.AA: .WORD 037725,124527 ; .41730760 1230 014450 040027 012335 M.BB: .WORD 040027,012335 ; .59016207 1231 ;; EXPONENTIAL 1232 014454 040270 125073 M.LOG2: .WORD 40270,125073 ; LOG(E) BASE 2. 1233 014460 037661 071030 M.LGB2: .WORD 37661,71030 ; (LN 2)/2 1234 014464 141100 036602 M.MA0: .WORD 141100,36602 ; -12.0150167539 1235 014470 142426 071571 M.AA1: .WORD 142426,71571 ; -601.804266698 1236 014474 041560 056133 M.BB1: .WORD 41560,56133 ; 60.09019073193 1237 ; LOG 1238 014500 040065 002363 M.RT2B: .WORD 40065,2363 ; SQT(2)/2 1239 014504 040061 071030 M.LOGE: .WORD 40061,71030 ; LN 2 1240 014510 037632 014525 M.TABL: .WORD 37632,14525 ; .300974506336 1241 014514 037714 120036 .WORD 37714,120036 ; .399659100019 1242 014520 040052 125332 .WORD 40052,125332 ; .000009470507 1243 014524 040400 000000 .WORD 40400,0 ; 2.0 1244 014530 005711 EXP: TST @R1 ; EXP(0)? 1245 014532 001005 BNE EXP1 ; NO 1246 014534 013720 014344' MOV M.ONE,(R0)+ ; YES MOVE 1.0 TO DEST. 1247 014540 013720 014346' MOV M.ONE+2,(R0)+ 1248 014544 000520 BR EXPRET 1249 014546 004737 013336' EXP1: JSR PC,M.INI2 ; PUSH R1 & R0 TO STACK 1250 014552 011046 MOV @R0,-(SP) ; MOVE EXP TO STACK 1251 014554 006316 ASL @SP 1252 014556 105016 CLRB @SP 1253 014560 022627 103000 CMP (SP)+,#103000 ; EXP>6? 1254 014564 101401 BLOS M.EHEE 1255 014566 000515 BR M.YY ; YES 1256 014570 012701 001340 M.EHEE: MOV #M.LOG2-M.FRA1-2,R1 1257 014574 004737 013104' JSR PC,M.FRAC ; COMPUTE FRACTIONAL PART. 1258 014600 012666 000012 MOV (SP)+,12(SP) ; SAVE INTEGER PART 1259 014604 022626 CMP (SP)+,(SP)+ ; POP EXTRA STUFF. 1260 014606 012700 177644 MOV #M.LGB2-.-6,R0 ; MOVE LN(2)/2 TO STACK 1261 014612 060700 ADD PC,R0 1262 014614 004737 010152' JSR PC,M.MOVE 1263 014620 075026 FMUL SP ; Y=FRAC(Y*LOG(E) BASE 2)*LN(2)/2 1264 014622 010602 MOV SP,R2 1265 014624 012700 177636 MOV #M.AA1-.-6,R0 1266 014630 060700 ADD PC,R0 1267 014632 004737 010152' JSR PC,M.MOVE ; PUSH A1 TO STACK 1268 014636 010200 MOV R2,R0 TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-24 1269 014640 010001 MOV R0,R1 1270 014642 004737 010406' JSR PC,SR.DST ; PUSH Y ONTO STACK TWICE 1271 014646 075026 FMUL SP ; Y**2 1272 014650 012700 177616 MOV #M.BB1-.-6,R0 1273 014654 060700 ADD PC,R0 1274 014656 004737 010152' JSR PC,M.MOVE ; PUSH B1 TO STACK 1275 014662 075006 FADD SP 1276 014664 075036 FDIV SP ; Y=A1/(Y**2+B1) 1277 014666 012701 177570 MOV #M.MA0-.-6,R1 1278 014672 060701 ADD PC,R1 1279 014674 010600 MOV SP,R0 1280 014676 022020 CMP (R0)+,(R0)+ 1281 014700 004737 010406' JSR PC,SR.DST ; MOVE A0 AND ORIGINAL Y TO STACK 1282 014704 075006 FADD SP ; X=A0+ORIGINAL Y 1283 014706 075016 FSUB SP ; Y=Y-X 1284 014710 062766 000200 000004 ADD #200,4(SP) ; 2* ORIG Y 1285 014716 075036 FDIV SP 1286 014720 012700 177416 MOV #M.ONE-.-6,R0 1287 014724 060700 ADD PC,R0 1288 014726 004737 010152' JSR PC,M.MOVE 1289 014732 075006 FADD SP ; Y=Y+1 1290 014734 010600 MOV SP,R0 1291 014736 004737 010152' JSR PC,M.MOVE ; DUPLICATE RESULT TO STACK 1292 014742 075026 FMUL SP ; RESULT**2 1293 014744 016601 000006 MOV 6(SP),R1 ; GET SAVED INTEGER PART 1294 014750 012746 000007 MOV #7,-(SP) 1295 014754 072126 ASH (SP)+,R1 ; SHIFT TO LINE UP WITH EXP. 1296 014756 061601 ADD @SP,R1 ; ADD EXP TO INTEGER. 1297 014760 016600 000004 MOV 4(SP),R0 ; GET DEFA 1298 014764 042701 100000 BIC #100000,R1 ; CLEAR SIGN BIT 1299 014770 005726 TST (SP)+ ; RESULT NEGATIVE? 1300 014772 100002 BPL .+6 ; NO 1301 014774 052701 100000 BIS #100000,R1 1302 015000 010120 MOV R1,(R0)+ ; PUT # INTO DEFA. 1303 015002 012620 MOV (SP)+,(R0)+ 1304 015004 022626 CMP (SP)+,(SP)+ 1305 015006 000242 EXPRET: CLV 1306 015010 000207 RTS PC 1307 015012 004737 013336' LOG: JSR PC,M.INI2 1308 015016 005710 TST @R0 ; Y .LE. 0? 1309 015020 003003 BGT M.XY 1310 015022 022626 M.YY: CMP (SP)+,(SP)+ ; YES, CLEAR STACK 1311 015024 000262 SEV 1312 015026 000207 RTS PC 1313 015030 010001 M.XY: MOV R0,R1 1314 015032 022127 040200 CMP (R1)+,#40200 ; DOES Y=1? 1315 015036 001005 BNE M.XX ; NO 1316 015040 005711 TST @R1 1317 015042 001003 BNE M.XX TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 11-25 1318 015044 005020 CLR (R0)+ ; YES CLEAR DESTINATION 1319 015046 005020 CLR (R0)+ 1320 015050 000755 BR EXPRET-2 1321 015052 011001 M.XX: MOV @R0,R1 ; EXP TO R1 (CALL THIS N) 1322 015054 006101 ROL R1 1323 015056 062701 100000 ADD #100000,R1 ; COMPLEMENT TO TRUE NOTATION 1324 015062 012746 177770 MOV #-10,-(SP) ; SHIFT TO LOW BYTE PROPAGATING THE SIGN 1325 015066 072126 ASH (SP)+,R1 1326 015070 010146 MOV R1,-(SP) ; SAVE N ON STACK 1327 015072 042710 077600 BIC #077600,@R0 ; LET EXP(Y)=0 1328 015076 052710 040000 BIS #040000,@R0 1329 015102 010601 MOV SP,R1 ; FLOAT N ONTO STACK 1330 015104 024646 CMP -(SP),-(SP) 1331 015106 010600 MOV SP,R0 1332 015110 004737 010306' JSR PC,FLT 1333 015114 016600 000006 MOV 6(SP),R0 1334 015120 012701 177352 MOV #M.RT2B-.-6,R1 1335 015124 060701 ADD PC,R1 1336 015126 004737 010406' JSR PC,SR.DST ; MOVE DEST & SQR(2)/2 TO STACK 1337 015132 075016 FSUB SP ; DEST=DEST-SQR(2)/2 1338 015134 004737 010406' JSR PC,SR.DST ; PUSH ORIGINAL DEST 4 SQR(2)/2 AGAIN 1339 015140 075006 FADD SP ; DEST(ORIG)=DEST(ORIG)+SQR(2)/2 1340 015142 075036 FDIV SP ; DEST=DEST/DEST(ORIGINAL) 1341 015144 012705 177336 MOV #M.TABL-.-6,R5 1342 015150 060705 ADD PC,R5 ; LOC OF CONSTANT TABLE. 1343 015152 010600 MOV SP,R0 ; LOC OF DEST. 1344 015154 004737 013204' JSR PC,M.SETU 1345 015160 012703 000004 MOV #4,R3 ; # OF CONSTANTS 1346 015164 004737 013224' JSR PC,M.DOPO ; EVALUATE POLYNOMIAL. 1347 015170 012700 177262 MOV #M.LGB2-.-6,R0 1348 015174 060700 ADD PC,R0 1349 015176 004737 010152' JSR PC,M.MOVE ; PUSH (LN 2)/2 TO STACK 1350 015202 075016 FSUB SP ; DEST=DEST-(LN 2)/2 1351 015204 010600 MOV SP,R0 1352 015206 022020 CMP (R0)+,(R0)+ ; SET R0 TO FLAOTED N 1353 015210 012701 177266 MOV #M.LOGE-.-6,R1 1354 015214 060701 ADD PC,R1 1355 015216 004737 010406' JSR PC,SR.DST ; PUSH N & LN 2 ON STACK 1356 015222 075026 FMUL SP ; LET N=N*LN 2 1357 015224 075006 FADD SP ; DEST=DEST+N 1358 015226 016600 000012 MOV 12(SP),R0 1359 015232 012620 MOV (SP)+,(R0)+ ; MOVE RESULT TO 1360 015234 012620 MOV (SP)+,(R0)+ ; USERS DEFA 1361 015236 062706 000012 ADD #12,SP 1362 015242 000661 BR EXPRET TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 12 1 ; 2 ; THIS IS THE RAM PART OF LSIRT 3 ; 4 ; 5 ; BASE LEVEL TASK VECTOR TABLE 6 ; 7 ; 8 015244 004460' BTSK: OFT ;TASK #01 RESERVED FOR RFCLK 9 015246 004460' OFT ;TASK #02 RESERVED FOR TIMCH 10 015250 004460' OFT ;TASK #03 RESERVED FOR EXECUTE QIO (EXC0) 0 11 015252 004460' OFT ;TASK #04 RESERVED FOR EXC1 12 015254 004460' OFT ;TASK #05 RESERVED FOR EXC2 13 015256 004460' OFT ;TASK #06 RESERVED FOR EXC3 14 015260 004460' OFT ;TASK #07 RESERVED FOR ECHO 0 15 015262 004460' OFT ;TASK #08 RESERVED FOR ECHO 1 16 015264 004460' OFT ;TASK #09 RESERVED FOR ECHO 2 17 015266 004460' OFT ;TASK #10 RESERVED FOR ECHO 3 18 015270 004460' OFT ;TASK #11 RESERVED FOR MONITOR 0 19 015272 004460' OFT ;TASK #12 RESERVED FOR MONITOR 1 20 015274 004460' OFT ;TASK #13 RESERVED FOR MONITOR 2 21 015276 004460' OFT ;TASK #14 RESERVED FOR MONITOR 3 22 015300 004460' OFT ;TASK #15 RESERVED FOR TAPE DRIVER 23 015302 004460' OFT ;TASK #16 24 015304 004460' OFT ;TASK #17 25 015306 004460' OFT ;TASK #18 26 015310 004460' OFT ;TASK #19 27 015312 004460' OFT ;TASK #20 28 015314 004460' OFT ;TASK #21 29 015316 004460' OFT ;TASK #22 30 015320 004460' OFT ;TASK #23 31 015322 004460' OFT ;TASK #24 32 015324 004460' OFT ;TASK #25 33 015326 004460' OFT ;TASK #26 34 015330 004460' OFT ;TASK #27 35 015332 004460' OFT ;TASK #28 36 015334 004460' OFT ;TASK #29 37 015336 004460' OFT ;TASK #30 38 015340 004460' OFT ;TASK #31 39 015342 004460' OFT ;TASK #32 40 015344 004460' OFT ;TASK #33 41 015346 004460' OFT ;TASK #34 42 015350 004460' OFT ;TASK #35 43 015352 004460' OFT ;TASK #36 44 015354 004460' OFT ;TASK #37 45 015356 004460' OFT ;TASK #38 46 015360 004460' OFT ;TASK #39 47 015362 004460' OFT ;TASK #40 48 015364 004460' OFT ;TASK #41 49 015366 004460' OFT ;TASK #42 TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 12-1 50 015370 004460' OFT ;TASK #43 51 015372 004460' OFT ;TASK #44 52 015374 004460' OFT ;TASK #45 53 015376 004460' OFT ;TASK #46 54 015400 004460' OFT ;TASK #47 55 015402 004460' OFT ;TASK #48 56 ; 57 ; 58 ; 59 015404 000000 BSTAT: .WORD 0 60 015406 000000 .WORD 0 61 015410 000000 .WORD 0 62 ; 63 015412 015 012 AVLB: .BYTE 15,12 64 015414 115 101 103 .ASCII /MACHINE USAGE: / 65 015433 040 040 040 .ASCII / %/ 66 015440 015 012 .BYTE 15,12 67 015441' AVLBE=.-1 68 ; 69 015442 176 021 TYME: .BYTE 126.,17. ;LEAD IN CODE 70 015444 066 023 .BYTE 54.,19. ;CURSER POSITION 71 015446 063 061 060 DAY: .ASCII *310 * 72 ; 73 015452 060 060 HR: .ASCII *00* 74 015454 072 .BYTE 72 75 015455 060 060 MIN: .ASCII *00* 76 015457 072 .BYTE 72 77 015460 060 060 SEC: .ASCII *00* 78 ; 79 ; 80 ; CHAR BUFFERS 81 ; 82 015462 040 040 040 .ASCII * * 83 015466 ICHB: .BLKB 7 ;INTEGER ASCII BUFFER 84 015475 040 040 040 .ASCII * * 85 015501 FPCHB: .BLKB 12 ;FP ASCII BUFFER 86 ; 87 .EVEN 88 ; 89 015514 000000 IBUF: .WORD 0 ;FPPAK INTEGER BUFFER 90 015516 000000 000000 FPBUF: .WORD 0,0 ;FPPAK FP BUFFER 91 ; 92 ; QUEUED OUTPUT LINKED LISTS 93 ; 94 015522 000000 SCR0: .WORD 95 ; 96 015524 177777 LAVL0: .WORD 177777 97 ; 98 015526 015526' 015632' HEAD0: .WORD HEAD0,TAIL0 TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 12-2 99 ; 100 015532 LNK0: .BLKW 32. 101 ; 102 015632 015632' 015526' TAIL0: .WORD TAIL0,HEAD0 103 ; 104 015636 000000 SCR1: .WORD 105 ; 106 015640 177777 LAVL1: .WORD 177777 107 ; 108 015642 015642' 015746' HEAD1: .WORD HEAD1,TAIL1 109 ; 110 015646 LNK1: .BLKW 32. 111 ; 112 015746 015746' 015642' TAIL1: .WORD TAIL1,HEAD1 113 ; 114 015752 000000 SCR2: .WORD 115 ; 116 015754 177777 LAVL2: .WORD 177777 117 ; 118 015756 015756' 016062' HEAD2: .WORD HEAD2,TAIL2 119 ; 120 015762 LNK2: .BLKW 32. 121 ; 122 016062 016062' 015756' TAIL2: .WORD TAIL2,HEAD2 123 ; 124 016066 000000 SCR3: .WORD ;INDIRECT JUMP VECTOR 125 ; 126 016070 177777 LAVL3: .WORD 177777 ;LINK AVAILABLE TABLE 127 ; 128 016072 016072' 016176' HEAD3: .WORD HEAD3,TAIL3 ;LINK HEADER 129 ; 130 016076 LNK3: .BLKW 32. 131 ; 132 016176 016176' 016072' TAIL3: .WORD TAIL3,HEAD3 ;TAIL OF LINK 133 ; 134 ; 135 016202 000000 BSEC: .WORD 0 136 016204 000000 BMIN: .WORD 0 137 016206 000000 BHR: .WORD 0 138 016210 000466 BDAY: .WORD 310. 139 ; 140 ; CLOCK LEVEL JUMP TABLE 141 ; 142 ; 143 016212 004460' ALLK: .WORD OFT 144 016214 004460' .WORD OFT 145 016216 004460' .WORD OFT 146 016220 004460' .WORD OFT 147 ; TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 12-3 148 016222 004460' HUNM: .WORD OFT 149 016224 004460' .WORD OFT 150 016226 004460' .WORD OFT 151 016230 004460' .WORD OFT 152 ; 153 016232 004322' UNOS: .WORD RTCLK 154 016234 004460' .WORD OFT 155 016236 004460' .WORD OFT 156 016240 004460' .WORD OFT 157 ; 158 016242 004460' TRIS: .WORD OFT 159 016244 004460' .WORD OFT 160 016246 004460' .WORD OFT 161 016250 004460' .WORD OFT 162 ; 163 016252 004460' FIFTS: .WORD OFT 164 016254 004460' .WORD OFT ;DATA AVERAGING AND SENDING 165 016256 004460' .WORD OFT 166 016260 004460' .WORD OFT 167 ; 168 016262 000006 HUNK: .WORD 6 169 016264 000012 UNOK: .WORD 10. 170 016266 000003 TRIK: .WORD 3 171 016270 000005 FIFTK: .WORD 5 172 ; 173 016272 000000 FRST0: .WORD 0 174 016274 000000 LST0: .WORD 0 175 ; 176 016276 000000 FRST1: .WORD 0 177 016300 000000 LST1: .WORD 0 178 ; 179 016302 000000 FRST2: .WORD 0 180 016304 000000 LST2: .WORD 0 181 ; 182 016306 000000 FRST3: .WORD 0 183 016310 000000 LST3: .WORD 0 184 ; 185 ; 186 ; 187 016312 016320' CRSR3: IBUF3 188 ; 189 016314 010576 BBK3: 10576 190 016316 000 022 .BYTE 0,18. 191 016320 040 040 040 IBUF3: .ASCII * * 192 016343' LMT3=.-1 193 ; 194 .EVEN 195 016344 016352' CRSR2: IBUF2 196 ; TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 12-4 197 016346 010576 BBK2: 10576 198 016350 000 022 .BYTE 0,18. 199 016352 040 040 040 IBUF2: .ASCII * * 200 016375' LMT2=.-1 201 ; 202 .EVEN 203 016376 016404' CRSR1: IBUF1 204 ; 205 016400 010576 BBK1: 10576 206 016402 000 022 .BYTE 0,18. 207 016404 040 040 040 IBUF1: .ASCII * * 208 016427' LMT1=.-1 209 ; 210 .EVEN 211 016430 016436' CRSR0: IBUF0 212 ; 213 016432 010576 BBK0: 10576 214 016434 000 022 .BYTE 0,18. 215 016436 040 040 040 IBUF0: .ASCII * * 216 016461' LMT0=.-1 217 ; 218 016462 000000 FPTPF: .WORD 0 ;FLOATING POINT TRAP FLAG 219 016464 000000 000000 USAGE: .WORD 0,0 ;COUNTER OF DO NOTHING LOOP 220 ; 221 016470 000000 OUT0K: .WORD 0 222 016472 000000 OUT1K: .WORD 0 223 016474 000000 OUT2K: .WORD 0 224 016476 000000 OUT3K: .WORD 0 225 ; 226 016500 000000 QUAD: .WORD 0 ;USED IN FPPAK 227 ; 228 ; 229 016502 170000 TAVL: .WORD 170000 ;4 LINKS & BUFFA 230 ; 231 016504 016516' HEAD: .WORD TAIL 232 016506 TLNK: .BLKW 4 233 016516 016516' TAIL: .WORD TAIL 234 ; 235 016520 TBUFP: .BLKW 4 ;4 POINTERS OF THE 4 TAPE RECORD BUFFA'S 236 ; 237 016530 000000 TBUF: .WORD 0 ;BLOCK OF RECNUM*4 WORDS 238 ; 239 000400' .END STA TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 12-5 SYMBOL TABLE ACTTSK= ****** GX ECOV2 002574R IBUF0 016436R M.AFNX 011742R M.FA1 012732R ADDF 010426R ECOV3 002704R IBUF1 016404R M.AFPL 011676R M.FA2 012762R ALLK 016212R END = 004777R IBUF2 016352R M.AFSE 011746R M.FA3 012766R ATAN 013562R ETOA 012250R IBUF3 016320R M.AFSP 011774R M.FA4 012772R ATOF 011360R EXC 003434R ICHB 015466R M.AFSS 011574R M.FA5 013002R ATOI 010540R EXC0 003400R ILLG 005270R M.AFTX 012052R M.FRAC 013104R AVLB 015412R EXC1 003344R INP0 006462R M.AFVS 012032R M.FRA1 013112R AVLBE = 015441R EXC2 003310R INP1 006264R M.AFVU 012040R M.HANK 013302R BASEL 001230R EXC3 003254R INP2 006066R M.AFVV 012044R M.INIT 013320R BASES 001306RG EXP 014530R INP3 006660R M.AFXN 011406R M.INI2 013336R BAUD 004464R EXPRET 015006R INSRT 003024R M.AFXP 011604R M.INI3 013324R BBK0 016432R EXP1 014546R IOT 005332R M.AFXT 011744R M.JA01 011174R BBK1 016400R FIFTK 016270R ITOA 011064R M.AFX1 012002R M.JA02 011236R BBK2 016346R FIFTS 016252R JTOA 011146R M.AFX2 012110R M.JA03 011252R BBK3 016314R FINT 007110R LAVL0 015524R M.AFX3 012136R M.JA04 011264R BBOY = ****** GX FINT1 007122R LAVL1 015640R M.AFX4 012152R M.JA05 011270R BBY = ****** GX FIS 005354R LAVL2 015754R M.AFX5 012204R M.LGB2 014460R BBYE = ****** GX FIX 010172R LAVL3 016070R M.AFX6 012070R M.LOGE 014504R BDAY 016210R FIXD 010164R LMT0 = 016461R M.AIMI 010700R M.LOG2 014454R BEGIN = ****** GX FIX1 010176R LMT1 = 016427R M.AINX 010550R M.LOOP 013242R BFLAG = ****** GX FIX2 010240R LMT2 = 016375R M.AIPL 010704R M.LT2 010326R BHR 016206R FIX3 010260R LMT3 = 016343R M.AISP 010720R M.MA0 014464R BMIN 016204R FIX4 010270R LNK0 015532R M.AIVS 010756R M.MD 007702R BPOS 001526RG FIX5 010274R LNK1 015646R M.AIVV 011056R M.MOVE 010152R BPT 005312R FIX6 010300R LNK2 015762R M.AIXT 010770R M.M0 007704R BRPLY 007056R FLT 010306R LNK3 016076R M.AIX1 010726R M.M1 007722R BRPLYE= 007106R FPBUF 015516R LOG 015012R M.AIX2 011024R M.M1A 007772R BSEC 016202R FPCHB 015501R LST0 016274R M.ALL 014350R M.M2 007706R BSTAT 015404R FPHUN 005000R LST1 016300R M.APPR 013154R M.M2A 007762R BTOA 001666R FPTPF 016462R LST2 016304R M.ATAB 010000R M.M3 007674R BTSK 015244R FREE 005004R LST3 016310R M.BB 014450R M.M3B 007676R CLK 004070R FRST0 016272R LTC 000100R M.BB1 014474R M.NORL 010360R CMPF 010126R FRST1 016276R MAXTSK= ****** GX M.BR1 014130R M.NOR4 010372R COS 013532R FRST2 016302R MIN 015455R M.BR2 014302R M.NOTE 013374R CRSR0 016430R FRST3 016306R MOVF 010114R M.BR3 014316R M.NOTN 013364R CRSR1 016376R FTOA 012240R MTBRC = 172524 M.BR4 013714R M.ONE 014344R CRSR2 016344R FUNC 010452R MTC = 172522 M.CALL 007410R M.OT32 014400R CRSR3 016312R FUNCR 010434R MTCMA = 172526 M.CMPE 007532R M.P 013662R DAY 015446R F.FIX 007210R MTS = 172520 M.CMPF 010020R M.PIE2 014340R DBL.DV 011312R F.RET 007464R MULF 010470R M.DOPO 013224R M.PI2 014374R DBL.D1 011330R HEAD 016504R M.AA 014444R M.EHEE 014570R M.PI6 014410R DIVF 010500R HEAD0 015526R M.AA1 014470R M.EMT 007214R M.POL 007574R DUMP 005010R HEAD1 015642R M.ADDR 007616R M.ERR 007520R M.PP1 007272R ECOT0 001714R HEAD2 015756R M.AD01 007734R M.ERR1 007516R M.PP2 007506R ECOT1 002024R HEAD3 016072R M.AD02 007754R M.EVAL 013460R M.PP3 007254R ECOT2 002134R HR 015452R M.AFD 011662R M.EVA1 014004R M.PP4 007326R ECOT3 002244R HUNK 016262R M.AFDV 012170R M.EXIT 013366R M.PP5 007426R ECOV0 002354R HUNM 016222R M.AFE 011634R M.FAST 007610R M.PP6 007314R ECOV1 002464R IBUF 015514R M.AFMI 011704R M.FAV 013042R M.PP7 007456R TWO-WORD FLOATING PACKAGE MACRO M1113 31-DEC-80 12:57 PAGE 12-6 SYMBOL TABLE M.P2 013606R M.XA5 012474R PSCR 003204R SIN 013342R TOUT 005246R M.P6 014060R M.XA6 012624R PTAIL 003244R SNITCH 003760R TP 004572RG M.Q2 013444R M.XA7 012564R PUKE 005054R SQRT 014112R TPKNT = ****** GX M.Q3 013446R M.XX 015052R QUAD 016500R SR.DST 010406R TRIK 016266R M.Q4 013456R M.XY 015030R RBUF0 = 176502 STA 000400RG TRIS 016242R M.RET2 010400R M.YY 015022R RBUF1 = 176512 START 004760R TSKKT = ****** GX M.ROOT 014440R NEGF 010532R RBUF2 = 177572 STOF 010106R TYME 015442R M.ROT3 014404R OFT 004460R RBUF3 = 177562 SUBF 010460R UNOK 016264R M.RT2B 014500R OFTI 004462R RCSR0 = 176500 TAIL 016516R UNOS 016232R M.SETU 013204R OUT0 005542R RCSR1 = 176510 TAIL0 015632R USAGE 016464R M.SIN1 013346R OUT0K 016470R RCSR2 = 177570 TAIL1 015746R XBUFT = 177566 M.TAB 014330R OUT1 005452R RCSR3 = 177560 TAIL2 016062R XBUF0 = 176506 M.TABL 014510R OUT1K 016472R RDVF 010514R TAIL3 016176R XBUF1 = 176516 M.TAB2 014414R OUT2 005722R REC = ****** GX TAVL 016502R XBUF2 = 177576 M.TEN 013064R OUT2K 016474R RECLEN= 002020 TBUF 016530R XBUF3 = 177566 M.TTX 013440R OUT2N 006042R RFCLK 001566R TBUFP 016520R XCSR 003014R M.TT9 014102R OUT3 005632R RTCLK 004322R TDO 003644R XCSRT = 177564 M.XAO 012260R OUT3K 016476R SCR0 015522R TFIND 003520R XCSR0 = 176504 M.XA1 012370R PHEAD 003224R SCR1 015636R TINT 005426R XCSR1 = 176514 M.XA2 012404R PLAVL 003214R SCR2 015752R TLNK 016506R XCSR2 = 177574 M.XA3 012420R PLNK 003234R SCR3 016066R TODC = ****** GX XCSR3 = 177564 M.XA4 012454R POWER 005234R SEC 015460R . ABS. 000000 000 016532 001 ERRORS DETECTED: 0 VIRTUAL MEMORY USED: 5044 WORDS ( 20 PAGES) DYNAMIC MEMORY: 6254 WORDS ( 24 PAGES) ELAPSED TIME: 00:02:13 ,LSIRT/-SP=MACLIB/ML,LSIRT,FPPAK,LSIRAM