/FLOPSY SYKES7250 SYS / / OS/8 SYSTEM HANDLER FOR SYKES 7250 FLOPPY DISK / /FRIEDEMANN BRAUER SEPTEMBER 1976 / /HNO FORSCHUNGSTRAKT /KLINIKUM WESTEND /SPANDAUER DAMM 130 /D-1000 BERLIN 19 , GERMANY / / /MOST IDEAS FROM: /SYKES 7100 SYSTEM HANDLER (SINGLE DRIVE , NON-BUFFERED) /BY M PETERSON, P M HOLTHAM, I M TEMPLETON /NAT. RESEARCH COUNCIL OF CANADA, OTTAWA K1A 0R6 / /THIS HANDLER PACKS AND UNPACKS STORED /DATA TO INCREASE DISK CAPACITY BY 33% - /2 12-BIT CORE WORDS ARE COMPRESSED /INTO 3 8-BIT DISK BYTES AS FOLLOWS: / /BYTE 1: HIGH 1 HIGH 2 /BYTE 2: LOW 1 /BYTE 3: LOW 2 / /N B STORAGE STARTS AT TRACK 0 SECTOR 1 OF DISK /ALL DISK IS USED, IBM COMPATIBILITY LOST / / /DEVICE CODE IS 32 /DEVICE TYPE IS 50 / /SET BLOCK COUNT IN PIP TO 6546 (-666 DECIMAL) BY: / .GET SYS PIP / .ODT / 13650/0000 6546 / ^C / .SAVE SYS PIP / *0 /HEADER BLOCK -2 DEVICE SYKS;DEVICE SYS;4500;6007;0;1232 DEVICE SYKS;DEVICE FLO;4500;FLOP2&177+5000;0;1232 -114 /LENGTH OF 6+6-BIT BOOTSTRAP / SYOP=6321 SYSK=6322 SYIN=6324 / / BAUTO=10 / BCOUN=7 / BHIGH=6 / BLOW=5 / BCLAX=7600 / / //NOW DUMMY CURRENT PAGE OPERATORS //SINCE BOOTSTRAP WILL NOT BE IN PAGE ZERO // / FIXMRI TADP=1200 / FIXMRI DCAP=3200 / FIXMRI JMPP=5200 / FIXMRI JMSP=4200 / FIXMRI ANDP=0200 //DISK RESIDENT BOOT / ZBLOCK 10 / OFFSET /BIN, 0 / SYSK / JMPP .-23 / SYIN /BLAST, JMPP I BIN1 / BIN1=BIN-22 / BLAST1=BLAST-22 //SET UP CONSTANTS / 7700 /M100 / 7400 /K7400 / 7605 /A7605 / 0406 /K406 //RE ORIGIN / BM100=BLAST1+1 / BK7400=BLAST1+2 / BA7605=BLAST1+3 / BK406=BLAST1+4 // / CLA /ENTRY MUST BE 7421 / TADP BCLA1 / SYOP /RESET / LAS /GET X607 AGAIN FROM SWR / SYOP /"READ TRACK 0" / JMSP BINPU1 /GARBAGE FIRST TIME / JMSP BINPU1 /READ F0 76-77 / TADP BCLA1 /0600 SIGNIFICANT IN AC / SYOP /RESET /BCLA, BCLAX / TADP BK406 / SYOP / IAC / SYOP /BLOCK 66 / CDF 10 / JMSP BINPU1 /READ F1 76-77 / CDF 20 / JMSP BINPU1 /READ F2 76-77 / JMPP I BA7605 /AND OFF WE GO! / BCLA1=BCLA-27 // /BINPUT,0 /READS ONE PAGE / CLA STL CMA / -1 IN AC / TADP BCLA1 / DCA BAUTO /7577 IN AUTO INDEX / TADP BM100 / NO. WORDS/2 / DCA BCOUN / IN COUNTER /BREAD, JMSP BIN1 / RTL / DCA BHIGH / JMSP BIN1 / DCA BLOW / TAD BHIGH / RTL / ANDP BK7400 / TAD BLOW / DCA I BAUTO / JMSP BIN1 / DCA BLOW / TAD BHIGH / BSW / ANDP BK7400 / TAD BLOW / DCA I BAUTO / ISZ BCOUN / JMPP BREAD1 / JMPP I BINPU1 /EXIT SUBROUTINE / BREAD1=BREAD-22 / BINPU1=BINPUT-22 /REORIGIN // / /THIS DISK RESIDENT BOOTSTRAP WILL BE LOADED /CORRECTLY IN 07400 BY THE FOLLOWING BOOTSTRAP /IN FIELD 0 STARTING AT X607 (X NOT 7) WITH CLEAR, CONT /N.B. SWITCH REGISTER MUST BE SET TO X607, DF=0 /(TURN POWER OFF & ON AGAIN TO SELECT SYSTEM UNIT. ) / /TOGGLE-IN BOOT. / /X607 7404 ADDR, OSR /=-374 /X610 6321 SYOP /"READ TRACK 0" /X611 3607 NXT, DCA I ADDR /X612 6322 SYSK /X613 5212 JMP .-1 /X614 6324 SYIN /X615 7002 BSW /X616 7421 EXIT, MQ1 /=ENTRY OF 2ND BOOT. /X617 6322 SYSK /X620 5217 JMP .-1 /X621 6324 SYIN /X622 7501 MQA /X623 2207 ISZ ADDR /X624 5211 JMP NXT /X625 5616 JMP I EXIT / / /DISK RESIDENT BOOTSTRAP FROM ABOVE /AFTER 'WRITING' IN 6+6-FORMAT /& 'READING' AS IF PACKED FORMAT: ZBLOCK 4 /7405 0000 /7410 0063 0452 1011 1424 1456 0077 4000 1400 6076 0004 2406 1400 5012 0463 5021 1404 7063 0442 0444 1044 1012 0463 5021 1400 7012 0463 0021 1401 4063 0462 0411 1044 1062 0442 0444 1017 7000 0073 0060 0032 5030 0012 4015 0407 4042 0070 4006 0406 4042 0030 4005 0006 4070 0002 3016 0005 4034 0042 4010 0405 4010 0070 3002 0016 1010 0034 2410 0407 0052 1056 5044 / /1ST PAGE / *200 NOPUNCH *7600 /ASSEMBLE AS IF AT 7600 ENPUNCH ZBLOCK 7 SYKES, 0 /ENTRY SYSTEM UNIT CLA CLL CMA /-1 JMP SELECT / /THIS MAKES 'BUILD' HANDLE LONG BOOTSTRAP CORRECTLY: 0003 / FLOP2, 0 /ENTRY UNIT 2 CLA CLL TAD FLOP2 DCA SYKES SELECT, TAD P602 /SELECT UNIT SYOP CLA RDF TAD K6201 DCA SCDF /GET CALLING FIELD CLA CLL CML RTL /AC=2 TAD SCDF DCA RTNFLD /PREPARE FOR RETURN CIF 20 JMS ERRSET /INITIALIZE TAD SYKES /RETURN FROM INIT AND ERROR DCA SYKES /RESET ARG LIST POINTER SCDF, HLT /CHANGE TO CALLING FIELD TAD I SYKES /GET FUNCTION WORD DCA FUNC TAD FUNC AND K70 /GET BUFFER FIELD TAD K6201 DCA BUFFLD ISZ SYKES TAD I SYKES /GET BUFFER ADDR DCA BUFFER DCA TRACK /CLEAR TRACK NO ISZ SYKES TAD I SYKES /GET BLOCK NO CLL RAL TAD I SYKES /SECTOR=BLOCK * 3 ISZ TRACK /FIND TRACK NO TAD M32 /26 SECTORS PER TRACK SMA JMP .-3 TAD K433 DCA SECTOR TAD FUNC RAL AND K7600 /GET WORD COUNT DCA TEMP CIF 20 TAD TEMP /CONVERT TO BLOCKS BSW CLL RTR SZL /IS THERE AN EXTRA PAGE? CLL IAC /YES, ADD 1 BLOCK TO COUNT TAD I SYKES /GET STARTING BLOCK TAD MAXBLK /LAST BLOCK SZL CLA /OVERFLOW? JMP ERROR /YES CDF 20 TAD BUFFER /MOVE BUFFER ADDRESS DCA I K7600 TAD TEMP CLL RAR /DIVIDE BY 2 CIA DCA I COUNT TAD K7600 SYOP /RESET DISK FLAGS CLA CLL CMA TAD TRACK /TRACK=TRACK-1 TAD K400 /BIT 3 ON SYOP /SELECT TRACK K7600, 7600 /CLA AND CONSTANT BUFFLD, HLT /CHANGE TO BUFFER FIELD TAD FUNC RAL /LINK HAS FUNCTION SZL CLA TAD K40 /SET WRITE BIT IF REQD TAD SECTOR /GET SECTOR READY SYOP /OUTPUT SECTOR JMP GO /JMP TO FIELD 2 / RETURN, SMA /SKIP IF ERROR (AC<0) ISZ SYKES /NORMAL RETURN ISZ SYKES /ERROR RETURN RTNFLD, HLT /RETURNING FIELD JMP I SYKES /EXIT / MAXBLK, -1233 /LAST BLOCK K40, 40 K6201, 6201 DECIMAL M32, -26 OCTAL K433, 433 K70, 70 K400, 400 P602, 602 COUNT, WRDCNT BUFFER=7750 TRACK=7751 SECTOR=7752 TEMP=7753 FUNC=7754 / /2ND PAGE / *400 NOPUNCH FIELD 2 *7600 ENPUNCH B, 0 /BUFFER ADDR L110, 110 L377, 377 ERRSET, 0 /SETUP ROUTINE TAD M10 DCA ERRCNT /8 ERROR TRIES RETRY, CIF 0 L603, JMP I ERRSET /TRY OPERATION AGAIN ERRCNT, 0 /ERROR COUNT M10, -10 / GO, SZL CLA /FROM FIFLD0 JMP WRITE READ, JMS IN /H1, H2 RTL DCA HIGH JMS IN /L1 DCA LOW TAD HIGH RTL AND L7400 TAD LOW DCA I B /WORD 1 ISZ B JMS IN /L2 DCA LOW TAD HIGH BSW AND L7400 TAD LOW DCA I B /WORD 2 ISZ B L7400, 7400 ISZ WRDCNT /FINISHED? JMP READ /NO TERM, TAD L603 SYOP /ISSUE TERMINATE SYSK /WAIT FOR FLAG JMP .-1 SYIN /GET FLAGS AND L110 SNA JMP RTN /NORMAL RETURN, AC=0 /RESTART HERE AFTER WRITELOCK ERROR: ERROR, CLA CLL CMA RAL /AC= -2 ISZ ERRCNT /8 ERROR TRIES? JMP RETRY RTN, CIF 0 JMP I GOBACK /RETURN TO CALLING PGM GOBACK, RETURN / WRDCNT, 0 /WORD COUNT TEM, LOW, 0 HIGH, 0 / IN, 0 SYSK JMP .-1 SYIN /READ 1 BYTE JMP I IN OUT, 0 AND L377 SYSK JMP .-1 SYOP /WRITE 1 BYTE CLA CLL JMP I OUT / WRITE, TAD I B /WORD 1 DCA TEM ISZ B TAD TEM AND L7400 RTR DCA HIGH TAD I B /WORD 2 AND L7400 BSW TAD HIGH RTR JMS OUT /H1,H2 TAD TEM JMS OUT /L1 TAD I B JMS OUT /L2 ISZ B NOP /FOR ADDRES WRAP-AROUND ISZ WRDCNT /FINISHED? JMP WRITE /NO JMP TERM /YES, TERNIMATE / / /IN CASE OF SYSTEM CRASH, START AT 27725 /TO BOOTSTRAP ALL OVER AGAIN: / TAD CR601 /SEL. UNIT 1 SYOP CLA TAD CR607 /"READ TRACK 0" SYOP CLA TAD CR7404 DCA CRADDR CDF 0 CRNEXT, DCA I CRADDR JMS IN BSW MQL JMS IN MQA ISZ CRADDR JMP CRNEXT CR7600, 7600 TAD CR7600 SYOP /RESET TAD CR607 /READ TRACK 0 AGAIN CIF 0 JMP I CR7425 /TO DISK RESID.BOOTSTRAP / CRADDR, 0 CR601, 601 CR607, 607 CR7404, 7404 CR7425, 7425 $$$$