/OS/8 SYS & AUX HANDLER FOR SYKES 7200 / /ORIGINAL BY M. PETERSON; MODIFICATIONS AND /BOOTSTRAP BY P.M. HOLTHAM AND I.M. TEMPLETON /AUX MODS BY I.M. TEMPLETON /NATIONAL RESEARCH COUNCIL OF CANADA /OTTAWA CANADA K1A 0R6 / /THIS HANDLER PACKS AND UNPACKS STORED /DATA TO INCREASE DISK CAPACITY BY 33% - /4 12-BIT CORE WORDS ARE COMPRESSED /INTO 6 8-BIT DISK WORDS WITH NO LOSS IN /DATA TRANSFER RATE. THE STORAGE SYSTEM IS: /WORD 1: HIGH 1 HIGH 2 /WORD 2: LOW 1 /WORD 3: LOW 3 /WORD 4: LOW 2 /WORD 5: HIGH 4 HIGH 3 /WORD 6: LOW 4 / /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 60 / /SET BLOCK COUNT IN PIP TO 6546 / (-666 DECIMAL) BY: / .GET SYS PIP / .ODT / 13660/0000 6546 / ^C / .SAVE SYS PIP / /OPTIONAL RESORC PATCHES: / .GET SYS RESORC / .ODT / 2300/0000 2331 /SY / 2301/0000 1330 /KX / 2302/0000 6546 /-666 DEC. / 14467/0000 0614 /FL / 14470/2405 1720 /OP / ^C / .SAVE SYS RESORC EJECT / /IN ORDER THAT NEW HANDLER IS RECOGNISED /AND 2ND PAGE IS HANDLED CORRECTLY, MODIFICATIONS /ARE NECESSARY IN FRTS, BLOAD AND BASIC.FF /AS FOLLOWS. NOTE TWO DIFFERENT VERSIONS OF BOTH /FRTS AND BASIC ARE DEALT WITH. / / .GET SYS FRTS / .ODT / 12676/7001 7000 /62X1, NOT 2 ) / 12755/1575 1577 /-62X1, NOT 3 ) FRTS V - / 12757/7642 7672 /TEST ADDRESS ) / / 12675/7001 7000 ) FRTS V 4 / 12754/7642 7672 ) / / 17531/3762 7001 / 17532/1763 3762 / 17533/7001 1762 / 17561/7642 7656 /TO CONTAIN 62X2 / 17562/7727 7621 / " " / 17563/7721 7672 / " 62X1 / 17576/6222 6221 / ^C / .SAVE SYS FRTS / / .GET SYS BLOAD / .ODT / 500/7126 7300 /0, NOT 2 ) / 561/7727 7656 /62X2 HERE ) / 562/7721 7621 / " " ) / 565/1555 1557 /-6221, NOT 3 ) BASIC / 566/7642 7672 /62X1 HERE ) V 3.0 / 567/7570 7200 /NOW DEV. 60 ) / 2557/1555 1557 ) / 2560/7642 7672 ) / 2561/7570 7300 ) / / 503/7126 7300 ) / 557/7727 7656 ) / 560/7721 7621 ) BASIC / 561/7642 7672 ) V 4A / 567/7570 7300 ) / 2556/7570 7300 ) / / 7256/7126 7300 / 7370/7727 7656 / 7371/7721 7621 / 7372/1555 1557 / 7373/7642 7672 / 7374/7570 7300 / ^C / .SAVE SYS BLOAD / / .GET SYS BASIC.FF / .ODT / 14573/6223 6221 / 14574/7642 7672 / 14575/6222 / 14576/7721 7621 / 14577/7727 7656 / ^C / .SAVE SYS BASIC.FF EJECT / *0 /HEADER BLOCK -2 /2 DEVICE HANDLERS DEVICE SYKX /GROUP NAME DEVICE SYS /PERMANENT NAME 4601 /FILE-STRUCT., DEV. 60, 2 PLATT. 6007 /ENTRY POINT WORD 0 /MUST BE ZERO 1232 /NO OF BLOCKS ON SYS / DEVICE SYKX /GROUP NAME DEVICE FLOP /PNAME FOR AUX 4601 5123 /2-PAGE, CO-RES, ENTRY 123 0 1232 / -143 /LENGTH OF 6+6-BIT BOOTSTRAP / /THIS BOOTSTRAP LENGTH IS O.K. IF 'BUILD' THINKS /THIS IS A TD8E HANDLER (SEE 07612) / /ACTUAL BOOTSTRAP ROUTINE FOR SYKES DISK FOLLOWS /F1 AND F2 RESIDENT READ FROM BLOCK 66 / /THIS IS THE ROUTINE WHICH WILL BE /LOADED BY THE EXTERNAL BOOTSTRAP // / 0010 AUTO=10 / 0007 COUN=7 / 0006 STOR1=6 / 0005 STOR2=5 / 0004 TDAT=4 / 6321 SYOP=6321 / 6322 SYSK=6322 / 6324 SYIN=6324 / 7600 CLAX=7600 // / 7400 RELOC 7400 / ASSEMBLE AS IF AT 7400 // /07400* 0000 ZBLOCK 4 / OFFSET 4 /07404* 0000 SEP, 0 / UNSCRAMBLE HIGH ORDERS /07405* 7521 SWP / ENTERS WITH LOW1 ! H1, H2 /07406* 7006 RTL /07407* 3005 DCA STOR2 /07410* 1005 TAD STOR2 /07411* 7006 RTL /07412* 0313 AND K7400 /07413* 7501 MQA /07414* 7421 MQL /07415* 1005 TAD STOR2 /07416* 7002 BSW /07417* 0313 AND K7400 /07420* 5604 JMP I SEP / EXITS WITH H2 ! WORD1 / / / / ENTRY POINT 7421 /07421* 7200 CLA /07422* 6211 CDF 10 /07423* 1716 TAD I DATAD /RETRIEVE DATE? /07424* 3004 DCA TDAT /STORE /07425* 6201 CDF 0 /07426* 1236 TAD CLA1 /07427* 6321 SYOP / RESET /07430* 7604 LAS / GET X607 AGAIN FROM SWR /07431* 6321 SYOP /07432* 4253 JMS INPUT / GARBAGE FIRST TIME /07433* 4253 JMS INPUT / READ F0 76-77 /07434* 1236 TAD CLA1 / 0600 SIGNIFICANT IN AC /07435* 6321 SYOP / RESET /07436* 7600 CLA1, CLAX /07437* 1315 TAD K406 /07440* 6321 SYOP /07441* 7001 IAC /07442* 6321 SYOP / BLOCK 66 /07443* 6211 CDF 10 /07444* 4253 JMS INPUT / READ F1 76-77 /07445* 6221 CDF 20 /07446* 4253 JMS INPUT / READ F2 76-77 /07447* 6211 CDF 10 /07450* 1004 TAD TDAT /07451* 3716 DCA I DATAD /REPLACE DATE? /07452* 5714 JMP I A7605 / JUMP TO OS8 / / / / /07453* 0000 INPUT, 0 / READS ONE PAGE /07454* 7360 CLA STL CMA / -1 IN AC /07455* 1236 TAD CLA1 / 7577 IN AC /07456* 3010 DCA AUTO /07457* 1312 TAD M40 / -40 (OCT) /07460* 3007 DCA COUN / IN COUNTER /07461* 4301 LOOP, JMS READ / LOW1 ! H1, H2 /07462* 4204 JMS SEP / H2 ! WORD1 /07463* 7521 SWP / WORD1 ! H2 /07464* 3410 DCA I AUTO / STORE WORD1 /07465* 4301 JMS READ / LOW2 ! LOW3 AND H2 STORED /07466* 1006 TAD STOR1 / WORD2 ! LOW3 /07467* 3410 DCA I AUTO / STORE WORD2 /07470* 4301 JMS READ / LOW4 ! H4, H3 AND L3 STORED /07471* 4204 JMS SEP / H3 ! WORD4 /07472* 1006 TAD STOR1 / WORD3 ! WORD4 /07473* 3410 DCA I AUTO / STORE WORD3 /07474* 7521 SWP / WORD4 ! 0 /07475* 3410 DCA I AUTO / STORE WORD4 /07476* 2007 ISZ COUN /07477* 5261 JMP LOOP /07500* 5653 JMP I INPUT / EXIT SUBROUTINE / / / / /07501* 0000 READ, 0 / READ TWO WORDS AND STORES LAST MQ /07502* 7521 SWP /07503* 3006 DCA STOR1 / STORED AND AC = 0 FOR READ /07504* 6322 SYSK /07505* 5304 JMP .-1 /07506* 6324 SYIN / 1ST READ /07507* 7421 MQL /07510* 6324 SYIN / 2ND READ /07511* 5701 LAST, JMP I READ / READ2 ! READ1 /07512* 7740 M40, 7740 /07513* 7400 K7400, 7400 /07514* 7605 A7605, 7605 /07515* 0406 K406, 0406 /07516* 7666 DATAD, 7666 / / / / / / /ABOVE BOOTSTRAP ROUTINE FOR SYKES DISK /IS GIVEN BELOW AFTER CONVERSION /TO 6+6-BIT CODE FOR MINIMUM INITIAL BOOTSTRAP / /IT 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 / /X607 7404 ADDR, OSR /X610 6321 SYOP /X611 3607 NXT, DCA I ADDR /X612 6322 SYSK /X613 5212 JMP .-1 /X614 6324 SYIN /X615 7002 BSW /X616 7421 EXIT, MQL /X617 6324 SYIN /X620 7501 MQA /X621 2207 ISZ ADDR /X622 5211 JMP NXT /X623 5616 JMP I EXIT / / /DISK RESIDENT BOOTSTRAP IN 6+6-BIT CODE FOLLOWS: 1421 6406 4070 405 5 4006 1470 13 1401 6421 4074 5 1402 4013 7003 1004 1400 5011 7462 16 404 4001 5062 36 1421 1404 1476 1421 1053 1053 5042 36 1421 1400 5476 15 1421 1401 1470 1421 1411 1053 1042 1421 1053 1011 4062 4 416 7414 57 0 1460 5436 4012 410 12 5407 1430 1001 1004 1021 6075 410 1001 1406 6010 410 1001 1404 4042 6 410 6021 6075 410 407 61 7052 1053 0 21 4075 406 1422 1404 1453 1424 1421 6024 7463 1001 1440 7400 7074 1405 6 2066 76 / / /OS/8 SYSTEM HANDLER FOR SYKES 7100 /FIRST PAGE / *200 NOPUNCH *7600 /ASSEMBLE AS IF AT 07600 ENPUNCH / ZBLOCK 7 SYKES, 1 /SYS ENTRY POINT, VA CLA CLL JMP FLIN 3 /DUMMY 'AND' MAKES BUILD V4C /HANDLE A LONG BOOTSTRAP CORRECTLY /AND ALLOWS FRTS V4 AND BASIC V4A /TO RECOGNISE THE 2-PAGE HANDLER. K2, 2 /NOP & CONST FLIN, RDF TAD K6201 DCA SCDF /GET CALLING FIELD TAD K2 TAD SCDF CIF 20 /MUST STAY HERE FOR /COMPATIBILITY DCA RTNFLD /PREPARE FOR RETURN RAL /UNIT FLAG TO AC0 JMP INIT /PAGE 2 FOR SETUP SCDF, HLT /CHANGE TO CALLING FIELD TAD I SYKES /GET FUNCTION WORD MQL MQA 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 MQA /FWD AGAIN CLL RAL AND K7600 /GET WORD COUNT DCA TEMP CIF 20 TAD TEMP /CONVERT TO BLOCKS SNA /0 MEANS 40 PAGES IAC 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 RTR /DIVIDE BY 4 SNA /0 MEANS 40 PAGES CLL CML RTR CIA DCA I COUNT TAD K7600 6321 /RESET DISK FLAGS TAD K577 /AC=377 TAD TRACK /TRACK=TRACK-1, BIT 3 ON 6321 /SELECT TRACK K7600, 7600 /CLA AND CONSTANT BUFFLD, HLT /CHANGE TO BUFFER FIELD MQA /FWD AGAIN RAL /LINK HAS FUNCTION SZL CLA TAD K40 /SET WRITE BIT IF REQD TAD SECTOR /GET SECTOR READY 6321 /OUTPUT SECTOR SNL CLA /JMP TO FIELD 2 JMP READ JMP WRITE FLOP, 1 /FLOP ENTRY, VA CLA STL /UNIT FLAG IN LINK TAD FLOP DCA SYKES /ARG POINTER JMP FLIN RETURN, ISZ SYKES /NORMAL RETURN ISZ SYKES /ERROR RETURN RTNFLD, HLT /RETURNING FIELD JMP I SYKES MAXBLK, -1233 /LAST BLOCK K40, 40 K6201, 6201 M32, -32 /-26 K433, 433 K70, 70 K577, 577 COUNT, WRDCNT BUFFER=7750 TRACK=7751 SECTOR=7752 TEMP=7753 /OS/8 SYSTEM HANDLER FOR SYKES 7100 /SECOND PAGE / *400 NOPUNCH FIELD 2 *7600 ENPUNCH / B, 0 /BUFFER ADDR L110, 110 L377, 377 L603, 603 L601, 601 T3, 0 INIT, TAD L601 6321 /SET UNIT 2 CLA CLL CIF 00 JMP SCDF /RETURN TO PAGE 1 READ, JMS IN /L1!H1,H2 JMS SEP /H2!W1 SWP /W1!H2 DCA I B /WORD 1 ISZ B JMS IN /L2!L3; H2 IN T3 TAD T3 /W2!L3 DCA I B /WORD 2 ISZ B JMS IN /L4!H4,H3; L3 IN T3 JMS SEP /H3!W4 TAD T3 /W3!W4 DCA I B /WORD 3 ISZ B SWP DCA I B /WORD 4 ISZ B L7400, 7400 /NOP AND CONSTANT, SEE NOTE ISZ WRDCNT /FINISHED? JMP READ /NO 6322 /WAIT FOR EXTRA FLAG JMP .-1 /FOR CRC STATUS TERM, TAD L603 6321 /ISSUE TERMINATE 6322 /WAIT FOR FLAG JMP .-1 6324 /GET FLAGS AND L110 CLL SZA CLA ERROR, STL /SET LINK IF ERROR TAD L601 6321 CIF 0 CLA SNL JMP RETURN /NORMAL RETURN RAR JMP RETURN+1 /ERROR RETURN, AC0=1 WRDCNT, 0 /WORD COUNT T4, OUT, 0 /OUTPUT ROUTINE: AND L377 6322 /FLAG? JMP .-1 /NO 6321 /WRITE BYTE 1 CLA CLL TAD T3 AND L377 6321 /WRITE BYTE 2 CLA CLL JMP I OUT IN, 0 SWP DCA T3 /STORE OLD MQ 6322 /WAIT FOR FLAG JMP .-1 6324 /READ MQL /BYTE 1 TO MQ 6324 /READ JMP I IN /BYTE 2 IN AC SEP, 0 /L1!H1,H2 SWP /H1,H2!L1 RTL DCA T4 TAD T4 RTL AND L7400 /H1!L1 MQA /W1!H1 MQL / !W1 TAD T4 BSW AND L7400 /H2!W1 JMP I SEP WRITE, TAD I B /WORD 1 DCA T3 ISZ B TAD T3 AND L7400 RTR RTR MQL TAD I B /WORD 2 AND L7400 BSW RTR MQA JMS OUT /WRITE 2 BYTES TAD I B /WORD 2 AGAIN DCA T3 ISZ B TAD I B /WORD 3 MQL MQA ISZ B JMS OUT /WRITE 2 BYTES TAD I B /WORD 4 DCA T3 MQA AND L7400 BSW RTR MQL TAD T3 AND L7400 RTR RTR MQA ISZ B NOP /SEE NOTE BELOW JMS OUT /WRITE 2 BYTES ISZ WRDCNT /FINISHED? JMP WRITE /NO JMP TERM /YES, TERMINATE / 0 /SPARE! / 0 /) 0 /) LAST 4 LOCATIONS 0 /) MUST NOT BE USED 0 /) / /NOTE: ONLY THE 4TH 'ISZ B' IS PROTECTED BY A 'NOP' /FROM AN OVERFLOW SKIP AT B=7777. /ANY TRANSFER WHICH UNEXPECTEDLY CROSSES A FIELD BOUNDARY /WILL GIVE UNPREDICTABLE RESULTS UNLESS THE BUFFER /START ADDRESS IS DIVISIBLE BY 4 EXACTLY. $$$$