File: BOOT50.MA of Disk: V50/Source/Source-Listing-MAC-1
(Source file text)
/BOOT FOR KBM V50 / / / / / / / / / /COPYRIGHT (C) 1977 BY DIGITAL EQUIPMENT CORPORATION / AND 1979 BY DATAPLAN GMBH / AND 2015 W. VAN DER MARK / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT /CORPORATION. DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY /FOR ANY ERRORS THAT MAY APPEAR IN THIS DOCUMENT. / /THE SOFTWARE DESCRIBED IN THIS DOCUMENT IS FURNISHED TO THE PURCHASER /UNDER A LICENSE FOR USE ON A SINGLE COMPUTER SYSTEM AND CAN BE COPIED /(WITH INCLUSION OF DIGITAL'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DIGITAL. / /DIGITAL EQUIPMENT CORPORATION ASSUMES NO RESPONSIBILITY FOR THE USE /OR RELIABILITY OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY /DIGITAL. / / / / / / / / / / / /SR /FIXES MADE FOR MAINTENANCE RELEASE: /1. ADDED RX01 (FLOPPY BOOTSTRAP) /2. LEFT PATCH SPACE IN NAME TABLE / 26-DEC-77 /1. ADDED RL BOOTSTRAP (S.R.) /WVDM /1. LOWER CASE /2. MACREL /3. MULTI8 /4. GERMAN /5. SI DISK /INSTRUCTIONS THAT GENERATE CONSTANTS AC0001=CLA IAC AC0002=CLA CLL CML RTL AC0003=CLA CLL CML IAC RAL AC0004=CLA CLL IAC RTL AC0006=CLA CLL CML IAC RTL AC0100=CLA IAC BSW AC2000=CLA CLL CML RTR AC3777=CLA CLL CMA RAR AC4000=CLA CLL CML RAR AC5777=CLA CLL CMA RTR AC6000=CLA CLL CML IAC RTR AC7775=CLA CLL CMA RTL AC7776=CLA CLL CMA RAL / GERMAN=1 /NOT ANYMORE .ASECT BOOT,ROOT FIELD 0 *2000 .START START,0 .JSW 7403 START, CLA /ALLOW BEING CHAINED TO IOF TAD I (7600 SPA CLA JMP OS8IN ISZ INNER JMP .-1 ISZ OUTR JMP .-3 JMS I (TESTRK COSIN, TAD I (7776 COMN, CIA DCA CODE TAD (TABLE DCA PTR LOOP, TAD I PTR SNA JMP I (OS8 TAD CODE SZA CLA JMP NXT ISZ PTR TAD I PTR DCA OLDLOC ISZ PTR TAD I PTR DCA NEWLOC ISZ PTR TAD I PTR CIA DCA LENGTH XXLUP, TAD I OLDLOC DCA I NEWLOC ISZ OLDLOC ISZ NEWLOC ISZ LENGTH JMP XXLUP ISZ PTR TAD I PTR DCA TEMP TAD HLTSWT SNA CLA HLT CLL JMP I TEMP NXT, TAD PTR TAD (5 DCA PTR JMP LOOP OS8IN, TAD I (7600 TAD (-4207 SZA CLA JMP I (RETRY TAD I (1000 TAD (777 SNA CLA TAD (600 TAD (1000-1 DCA SCAN SKAN, ISZ SCAN TAD I SCAN SNA JMP I (RETRY AND (177 TAD (-<"/&177> SZA CLA JMP SKAN ISZ SCAN TAD I SCAN AND (37 BSW DCA TEMP ISZ SCAN TAD I SCAN AND (37 TAD TEMP DCA TEMP ISZ SCAN TAD I SCAN AND (177 TAD (-<".&177> DCA HLTSWT TAD TEMP JMP COMN HLTSWT, 1 INNER, 0 OUTR, -20 CODE, 0 LENGTH, 0 OLDLOC, 0 NEWLOC, 0 PTR, 0 SCAN, 0 TEMP, 0 PAGE LV, "V V1, "5 V2, "0 PTCLEV, "X VERS, TAD LV JMS PUT TAD V1 JMS PUT TAD V2 JMS PUT TAD PTCLEV JMS PUT JMP I (RETRY DIML=6615 DISK, CLA IAC DIML SNA CLA JMP GOTRF TAD (70 6732 SNA CLA JMP GOTRK8 CLA IAC 6744 SNA CLA JMP GOTRE STA 6512 CLA 6513 TAD (-17 SZA CLA JMP I (RETRY TAD ('SI JMP I (COMN GOTRE, STA /RE GOTRF, TAD ('RF /RF JMP I (COMN GOTRK8, TAD ('RK /RK JMP I (COMN TAPE, 6141 /LINC 17 /COMPL AC 2 /PDP IAC SNA CLA JMP GOTLTA TAD (70 6774 CLA 6772 NOP TAD (-70 SNA CLA JMP GOTTC AC4000 6774 CLA 6776 SMA CLA JMP I (RETRY GOTTD, CLA IAC GOTTC, TAD ('TC /TC JMP I (COMN GOTLTA, TAD ('LT /LT JMP I (COMN CRLF, 0 TAD (215 JMS PUT TAD (212 JMS PUT JMP I CRLF PUT, 0 TLS TSF JMP .-1 CLA JMP I PUT GET, 0 KSF JMP .-1 KRB AND (177 TLS TSF JMP .-1 TAD (-003 SNA JMP I (7605 TAD (003-177 SNA JMP I (RETRY TAD (177-015 SZA ISZ GET TAD (015 JMP I GET TESTRK, 0 TAD (70 6732 SNA CLA JMP I TESTRK RK05, TAD (RK8E DCA I (RKADR JMP I TESTRK PAGE OS8, .IF NDF GERMAN < TAD ("N JMS I (PUT TAD ("O JMS I (PUT > .IF DF GERMAN < TAD ("N JMS I (PUT TAD ("e JMS I (PUT TAD ("i JMS I (PUT TAD ("n JMS I (PUT > RETRY, CLA CLL JMS I (CRLF TAD ("/ JMS I (PUT JMS I (GET JMP RETRY AND (37 BSW DCA I (TEMP JMS I (GET JMP RETRY AND (37 TAD I (TEMP DCA I (TEMP RETMOR, JMS I (GET JMP RETEND TAD (-<".&177> DCA I (HLTSWT JMP RETMOR RETEND, CLA CLL JMS I (CRLF TAD I (TEMP JMP I (COMN / PAGE /FORMAT: / /SIXBIT OF 2-CHARACTER NAME /ADDRESS OF BOOTSTRAP CODE IN BOOT /ADDRESS WHERE BOOTSTRAP CODE IS TO BE MOVED TO /LENGTH OF BOOTSTRAP IN WORDS /STARTING ADDRESS OF BOOTSTRAP TABLE, 'TC DECTAP 7554 25 7554 'RK RKADR, RK8 21 11 21 'TD TD8E TD8EST 34 TD8EST 'LT LINCTP 4400 7 4400 'RF RF08 7746 7 7746 'PT BINLDR 7612 166 7700 'ZE ZERO ZERSTR 6 ZERSTR 'TY TYPSET 7730 42 7730 'DL DIAL 4012 6 4012 'CA CAS 4000 40 4000 'DM DSKMON 171 16 174 'VE VERS VERS 1 VERS 'DT TAPE TAPE 1 TAPE 'DK DISK DISK 1 DISK 'RE RK8E RK8EST 11 RK8EST 'SI SIDK SIDKST 6 SIDKST 'RX RX01 RX8E 42 RXSTRT 'RL RL01 RLPRIM 35 RLPRIM 'VX VXA0 VXSTR 7 VXSTR 'MU M8 M8STR 14 M8STR ZBLOCK 3^5 /PATCH SPACE 0 PAGE DECTAP, 7600 6774 1374 6766 6771 5360 7240 1354 3773 1354 3772 1375 6766 5376 7754 7755 0600 0220 6771 5376 RK8, 6732 6751 6745 5023 6742 6753 6755 6733 5031 RK8E, RELOC 21 RK8EST, NOP NOP NOP NOP AC0001 6742 6742 6743 JMP . RELOC /TD8E, RELOC 7300-1 /TD8EST,6007 / 1312 / 4312 / 4312 / 6773 / 5303 / 6777 / 3726 / 2326 / 5303 / 5732 / 2000 / 1300 / 6774 / 6771 / 5315 / 6776 / 0331 / 1327 / 7640 / 5315 / 2321 / 5712 / 7354 / 7756 / 7747 / 0077 / 7400 RELOC /TD8E BOOTSTRAP / SDSQ=6773 SDRD=6777 SDLC=6774 SDSS=6771 SDRC=6776 TD8E, RELOC 7300-1 TD8EST, 6007 K1000, TAD GETTD /PUT DRIVE IN REVERSE JMS GETTD /LOOK FOR END ZONE JMS GETTD /LOOK FOR 31 CODE RD, SDSQ /NOW READ ALL INTO CORE JMP .-1 SDRD /READ 12 BIT WORD DCA I WCT /AND PUT IT IN CORE ISZ WCT JMP RD /LOOP UNTIL FIELD 0 JMP I STRT /IS LOADED, THEN START GETTD, 2000 TAD K1000 /SET MOTION &DIRECTION SDLC BSRCH, SDSS /WAIT FOR 22 OR 31 CODE JMP .-1 /22 IS END ZONE, 31 IS SDRC /4 WORDS BEFORE DATA AND K77 /IS THIS WHAT WE WANT? TAD BM22 /THIS GETS INCREMENTED SZA CLA /IF YES, RETURN. JMP BSRCH /NO.KEEP LOOKING. ISZ .-3 /LOOK FOR NEXT IN LIST JMP I GETTD WCT, 7354 /START LOADING CORE AT 7354 BM22, -22 /THE OTHER BOOTSTRAP GETS -31 /LOADED AT 7400. K77, 77 STRT, 7400 RELOC LINCTP, 6141 1020 0020 0004 0700 0000 6020 RF08, 6643 6615 7600 6603 6622 5352 5752 /SI3040 BOOTSTRAP SIDK, RELOC 0 /SIDKST,6502 / 0000 / 6517 / 6512 / 6514 / JMP . / RELOC DLCR=6502 DWCA=6517 DLSR=6512 DLTR=6514 SIDKST, DLCR /ASSURE DATA FIELD 0 (ALSO WORD COUNT) 0 /START CORE ADDRESS DWCA /SET WC, CA FROM 0 AND 1 DLSR /SECTOR 0 DLTR /READ FROM TRACK ZERO, UNIT 0 JMP . /WAIT FOR DSDD;JMP .-1 OVERLAY RELOC M8, RELOC 20 M8STR, CAF 6254 /SM8 HLT 6000 /MULTI8 HANDLER CALL JMP .+4 200 /2 PAGES 7400 /IN 7400 0 /BLOCK 0 SZA /AC = 0 OK HLT JMP I .+1 7400 /NEW RESTORE/BOOT 1-MAR-80 RELOC /BINLDR, 0000 / 3212 / 4260 / 1300 / 7750 / 5237 / 2212 / 7040 / 5227 / 1212 / 7640 / 5230 / 1214 / 0274 / 1341 / 7510 / 2226 / 7750 / 5626 / 1214 / 0256 / 1257 / 3213 / 5230 / 0070 / 6201 / 0000 / 0000 / 6031 / 5262 / 6036 / 3214 / 1214 / 5660 / 6011 / 5270 / 6016 / 5265 / 0300 / 4343 / 7041 / 1215 / 7402 / 6032 / 6014 / 6214 / 1257 / 3213 / 7604 / 7700 / 1353 / 1352 / 3261 / 4226 / 5313 / 3215 / 1213 / 3336 / 1214 / 3376 / 4260 / 3355 / 4226 / 5275 / 4343 / 7420 / 5336 / 3216 / 1376 / 1355 / 1215 / 5315 / 0000 / 3616 / 2216 / 7600 / 5332 / 0000 / 1376 / 7106 / 7006 / 7006 / 1355 / 5743 / 5262 / 0006 / 0000 / 0000 / 6014 / 6011 / 5357 / 6016 / 7106 / 7006 / 7510 / 5374 / 7006 / 6011 / 5367 / 6016 / 7420 / 3776 / 3376 / 5357 / 0000 / 5301 BINLDR, RELOC 7612 SWITCH, 0 MEMTEM, 0 CHAR, 0 CHKSUM, 0 ORIGIN, 0 /SOME NULLS IN BETWEEN ZBLOCK 7 BEGG, 0 DCA SWITCH /SET SWITCH JMS READB /GET A CHARACTER TAD M376 /TEST FOR 377 SPA SNA CLA JMP .+4 /NO ISZ SWITCH /YES, COMPLEMENT SWITCH CMA JMP BEGG+1 TAD SWITCH /NOT 377 SZA CLA /IS SWITCH SET? JMP BEGG+2 /YES, IGNORE TAD CHAR /NO, TEST FOR CODE AND MASK /TYPES TAD M200 SPA ISZ BEGG /DATA OR ORIGIN SPA SNA CLA JMP I BEGG /DATA, ORIGIN OR L/T TAD CHAR /FIELD SETTING AND FMASK TAD CHANGE DCA MEMTEM JMP BEGG+2 /CONTINUE INPUT FMASK, 70 CHANGE, CDF READB, 0 0 LOR, KSF /WAIT FOR FLAG JMP .-1 KRB DCA CHAR TAD CHAR JMP I READB HIR, RSF JMP .-1 RRB RFC JMP LOR+3 MASK, 300 BEND, JMS ASSEMB CIA TAD CHKSUM M376, HLT BEGIN, KCC RFC RDF TAD CHANGE DCA MEMTEM /SAVE FIELD INSTRUCTION CLA OSR SMA CLA TAD HIRI TAD LORI DCA READB+1 JMS BEGG JMP .-1 /IGNORE LEADER GO, DCA CHKSUM TAD MEMTEM DCA MEMFLD TAD CHAR DCA WORD1 JMS READB DCA WORD2 JMS BEGG /LOOK AHEAD JMP BEND /TRAILER, END JMS ASSEMB SNL JMP MEMFLD DCA ORIGIN CHEX, TAD WORD1 TAD WORD2 TAD CHKSUM JMP GO MEMFLD, 0 DCA I ORIGIN ISZ ORIGIN M200, 7600 JMP CHEX ASSEMB, 0 TAD WORD1 CLL RTL RTL RTL TAD WORD2 JMP I ASSEMB LORI, JMP LOR HIRI, HIR-LOR 0 WORD2, 0 RCC=6016 RCF=6014 BEG, RCF /CLEAR AC AND FLAG RSF /SKIP IF FLAG=1 JMP .-1 /LOOKING FOR CHAR RCC /READ BUFFER CLL RTL /CH8 IN AC0 RTL /CHECKING FOR LEADER SPA /FOUND LEADER JMP WORD1-2 /OK RTL /NO, CH7 IN LINK RSF JMP .-1 RCC /READ, NO CLEAR SNL /CHECKING FOR ADDRESS DCA I WORD1 /STORE CONTENTS DCA WORD1 /STORE ADDRESS JMP BEG+1 /NEXT WORD WORD1, 0 JMP BEGIN RELOC ZERO, RELOC 4 ZERSTR, TAD .+1 DCA I ZXR JMP ZERSTR JMP I ZERSTR ZXR, .+1 ISZ ZXR RELOC DIAL, 6141 1020 0020 0004 0701 7300 LXM=6200 VXA0, RELOC 0 VXSTR, CLA TAD VXENA LXM CIF CDF 4 JMP I .+1 0000 VXENA, 7000 RELOC TYPSET, 6774 1347 4341 7240 1353 3355 1352 4341 5753 7777 6766 3354 6771 5344 5741 4600 7777 7777 4220 7400 7777 7777 7777 6014 6011 5360 7106 6012 7420 5357 5756 4356 3373 4356 DSKMON, 7577 7750 7751 1171 3572 1172 3573 6643 6615 6603 6602 5203 5606 7600 CAS, 1237 1206 6704 6706 6703 5204 7264 6702 7610 3211 3636 1205 6704 6706 6701 5216 7002 7430 1636 7022 3636 7420 2236 2235 5215 7346 7002 3235 5201 7737 3557 7730 / DEVICE IOT SYMBOLIC EQUATES / LCD=6751 /LOAD COMMAND XDR=6752 /TRANSFER DATA STR=6753 /SKIP IF READY TO TRANSFER SER=6754 /SKIP ON ERROR SDN=6755 /SKIP ON DONE RX01, RELOC 20 RX8E, READ, TAD UNIT /TRY NEXT COMBINATION OF DENSITY AND UNIT TAD CON360 /ADDING IN 360 AND CON420 /KEEPING ONLY 420 BITS DCA UNIT /CYCLES 400,420,0,20,400,,,,,,,, AC0006 /COMMAND TO READ DISK - MUST BE ON OMNIBUS! TAD UNIT /UNIT AND DENSITY LCD /COMMAND TO CONTROLLER AC0001 /TO SET SECTOR AND TRACK TO 1 JMS LOAD /SECTOR TO CONTROLLER, LEAVES AC ALONE JMS LOAD /AND TRACK LITRAL, 7004 /LEAVING A 2 IN AC; SERVES AS LITERAL / / FOLLOWING IS PART OF WAIT LOOP, SAME SECONDARY BOOTS, OLD PRIMARY BOOT / RXSTRT, XSTRT, SDN /HAS DONE COME UP; CODE STARTS HERE! JMP LOAD+1 /NO, GO CHECK FOR READY TO TRANSFER / / NOW, DONE OR ERROR / SER /SKIP ON AN ERROR, TRY ANOTHER DENSITY ETC. SNA /NASTY, AC=2 FOR ABOUT TO DO SILO, 0 ON START-UP JMP READ /START-UP, GO SET UP UNIT, THEN READ TO SILO TAD UNIT /AC ALREADY 2, PUT IN UNIT, DENSITY LCD /TO EMPTY THE SILO TAD UNIT /SET UP LOC 60 FOR OLD SECONDARY BOOT AND CON360 /KEEPING UNLY DENSITY BIT TAD LITRAL /ADDING IN 7004, BECAUSE THAT'S WHAT SYS WANTS DCA RX1SAV /OLD SECONDARY BOOT MOVES IT TO HANDLER CON360, 360 /LITERAL; EXECUTES IN LINE AS A NO-OP / /FALLS THRU TO NEXT PAGE OF LISTING / FOLLOWING CODE SAME AS OLD PRIMARY BOOT / JMS LOAD /GRAB NEXT ITEM FROM SILO DCA 2 /TRADITION; SECONDARY BOOT STARTS LOADING AT 2 ! ISZ 50 /INCREMENT LOAD ADDRESS JMP 47 /GO BACK FOR ANOTHER / / SECONDARY BOOT LOADS OVER PRIMARY BOOT UNIT LOCATION 47 IS LOADED, / THEN CONTROL PASSES TO SECONDARY BOOT / LOAD, 0 /SUBROUTINE TO GIVE AND TAKE DATA FROM CONTROLLER STR /IS HE READY TO TALK TO US? JMP XSTRT /NO, IS HE PERHAPS DONE WITH SILO, OR IN ERROR? XDR /YES, DATA IN OR OUT;IF DATA TO CONTROLLER, AC UNCHANGED JMP I LOAD /NO MAGIC, JUST EXIT FROM SUBROUTINE / / 60 GOES TO OLD SECONDARY BOOT / 61 HAS DENSITY AND UNIT THAT BOOTED SUCCESSFULLY / / CON420, /USE IT TO HOLD 420 LITERAL TO START OUT RX1SAV, 420 /UNIT^20+7004 TO GO TO SYS HANDLER UNIT, 20 /<DENSITY^400>+<UNIT^20> THAT BOOTED OK / RELOC /RL01 DEFINITIONS RLIOT=6600 RLDC=RLIOT 0 /CLEAR DEVICE RLSD=RLIOT 1 /SKIP IF DONE RLMA=RLIOT 2 /LOAD MEM ADDR RLCA=RLIOT 3 /LOAD REGISTER "A" RLCB=RLIOT 4 /LOAD REG "B" AND EXECUTE RLSA=RLIOT 5 /LOAD SECTOR ADDR /RLIOT 6 UNUSED RLWC=RLIOT 7 /LOAD WORD COUNT RRER=RLIOT 10 /READ ERROR REG RRWC=RLIOT 11 /READ WORD COUNT RRCA=RLIOT 12 /READ REG "A" RRCB=RLIOT 13 /READ REG "B" RRSA=RLIOT 14 /READ SECTOR ADDR RRSI=RLIOT 15 /READ SILO BYTE /RLIOT 16 UNUSED RLSE=RLIOT 17 /SKIP IF ERROR /RLCB FUNCTION BITS: RLMT=0 /MAINTENANCE MODE RLRE=1 /RESET DRIVE ERRORS RLST=2 /READ STATUS REGS INTO SILO RLSK=3 /SEEK RLRH=4 /READ HEADER RLWR=5 /WRITE RLRD=6 /READ RLRN=7 /READ WITH NO HEADER CHECK /BIT DEFINITIONS IN REGISTERS: BYTE=1000 /BYTE TRANSFER MODE RL01, RELOC 1 RLPRIM, RLDC /CLEAR DRIVE AC0001 JMS IOSUB /RESET DRIVE ERRORS TAD . /=1004 JMS IOSUB /BYTE READ HEADER TO FIND OUT WHERE WE ARE RRSI /READ HEADER BYTE #1 BSW RTR /LSB OF CYLINDER RRSI /READ HEADER BYTE #2 AND C377 RAL /MAKE CYLINDER ADRESS RLCA /USE AS DIFFERENCE FOR SEEK TO 0,0 AC0003 JMS IOSUB /GO SEEK AC2000 /SECTOR 20 RLSA /LOAD IT TAD CM200 RLWC /ONE PAGE WORD COUNT AC0006 JMS IOSUB /READ SECONDARY BOOTSTRAP C377, 0377 /IOSUB DOES NOT RETURN (OVERLAID) CM200, -200 IOSUB, 0 RLCB /EXECUTE FINCTION RLSD /WAIT UNTIL DONE JMP .-1 /'IOSUB' IS ALSO IN SEC. BOOT RLSE /KEEP IT HERE JMP I IOSUB JMP RLPRIM /ERROR : TRY AGAIN RELOC PAGE