File: RXHDSY.PA of Tape: OS8/OS8-V40/v40-9
(Source file text)
/RXHD HIGH DENSITY FLOPPY SYSTEM HANDLER / / / / / / / / /COPYRIGHT (C) 1979 BY DATAPLAN GMBH, LAUDA, BRD / / / / / / / / / / /THE INFORMATION IN THIS DOCUMENT IS SUBJECT TO CHANGE WITHOUT NOTICE /AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DATAPLAN GMBH. /DATAPLAN GMBH 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 DATAPLAN'S COPYRIGHT NOTICE) ONLY FOR USE IN SUCH /SYSTEM, EXCEPT AS MAY OTHERWISE BE PROVIDED IN WRITING BY DATAPLAN. / /DATAPLAN GMBH ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY /OF ITS SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DATAPLAN. / / / / / / / / / / /WvdM, 20-Sep-79, Zuerich /RXHD COS BYTE MODE SYS-HANDLER / /THIS HANDLER WILL ONLY USE RX01 MODE ON EITHER RX01 OR RX02 /IT JUST HAPPENS THAT THE OS8 BLOCK SIZE IS TOO SMALL FOR /BYTE MODE IN RX02 SIZED SECTORS / / VERSION="M&77 / / AC1=CLL CLA IAC AC2=CLL CLA CML RTL AC4=CLL CLA IAC RTL AC6=CLL CLA CML IAC RTL /RXHD'S MUST RUN ON AN OMNI-BUS !! AC4000=CLL CLA CML RAR AC3777=CLL CLA CMA RAR AC7775=CLL CLA CMA RTL AC7776=CLL CLA CMA RAL / / 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 INIT=6757 /INIT CONTROLLER&INTERFACE / / HERE IS A LISTING OF THE PRIMARY BOOT FOR CONVENIENCE / NOPUNCH / *20 / 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,,,,,,,, AC6 /COMMAND TO READ DISK TAD UNIT /UNIT AND DENSITY LCD /COMMAND TO CONTROLLER AC1 /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 / START, 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 START /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 / ENPUNCH / / ## SECONDARY BOOT ## / NOPUNCH /12-BIT CODE HAS TO BE TRANSLATED *0 /COUNT LOCATIONS RELOC 2 /SECTION LOADING OVER PRIMARY BOOT 2 - 47 / / / BMODE, TAD UNIT ;HBY00=TAD UNIT /CHANGE FUNCTION TO BYTE MODE TAD BYTES ;HBY01=TAD BYTES JMP NEXSEG-1;HBY02=JMP NEXSEG-1 INDJMP, TAD I YR ;HBY03=TAD I YR /GET ADDRESS DCA BTEMP ;HBY04=DCA BTEMP JMP I BTEMP ;HBY05=JMP I BTEMP /TO NEXT ROUTINE / / ## AUTO-INC REGISTERS ## / XR, 61 ;HBY06=61 YR, 61 ;HBY07=61 BCONV, 2-7004 ;HBY10=2-7004 BYTES, 100 ;HBY11=100 BHALF, JMP LODHLF ;HBY12=JMP LODHLF XRF1, 7000-1 ;HBY13=7000-1 XRF2, 7200-1 ;HBY14=7200-1 XROLD, 7000-1 ;HBY15=7000-1 / / ONCE, TAD RX1SAV ;HBY16=TAD RX1SAV /GET WORD COMMON TO BOTH TAD BCONV ;HBY17=TAD BCONV /PRIMARY BOOTSTRAPS DCA UNIT ;HBY20=DCA UNIT /AND CONVERT TO UNIT+2 NEXSEG, AC4 ;HBY21=AC4 /+2 = GET SECTOR TAD UNIT ;HBY22=TAD UNIT LCD ;HBY23=LCD TAD I YR ;HBY24=TAD I YR /GET SECTOR FROM LIST JMS LOAD ;HBY25=JMS LOAD TAD I YR ;HBY26=TAD I YR /GET TRACK-SECTOR JMS LOAD ;HBY27=JMS LOAD TAD I YR ;HBY30=TAD I YR /GET ADDRESS-1-TRACK FOR XR HANG, SDN ;HBY31=SDN JMP LOAD+1 ;HBY32=JMP LOAD+1 /FIGURE 8 LOOP SER ;HBY33=SER SKP ;HBY34=SKP HLT ;HBY35=HLT SNA ;HBY36=SNA JMP INDJMP ;HBY37=JMP INDJMP /GO TO NEXT IF END OF SILO DCA XR ;HBY40=DCA XR /SET ADDRESS IF END OF SEEK TAD UNIT ;HBY41=TAD UNIT LCD ;HBY42=LCD LOAD12, JMS LOAD ;HBY43=JMS LOAD DCA I XR ;HBY44=DCA I XR JMP LOAD12 ;HBY45=JMP LOAD12 BTEMP=. RELOC / /THIS IS THE LAST LITTLE PART WHICH COMES FROM THE FIRST SECTOR /IT LOADS AFTER THE LOCATIONS HOLDING THE UNIT FROM PRIMARY BOOT RELOC 62 ONCE ;HBY46=ONCE 4 ;HBY47=4 1-4 ;HBY50=1-4 66-1-1 ;HBY51=66-1-1 / THIS PART COMES FROM SECTOR 4 IN LS BYTE MODE / BMODE ;BY00=BMODE /12-BIT BOOT IS IN GO TO BYTE MODE 7 ;BY01=7 1-7 ;BY02=1-7 7600-1-1;BY03=7600-1-1 /READ IN LS BYTES OF 07600 NEXSEG ;BY04=NEXSEG 26 ;BY05=26 7-26 ;BY06=7-26 7000-1-7;BY07=7000-1-7 /READ IN LS BYTES OF 17600 IN 07000 NEXSEG ;BY10=NEXSEG 31 ;BY11=31 7-31 ;BY12=7-31 7200-1-7;BY13=7200-1-7 /READ IN LS BYTES OF 27600 IN 07200 HLFBYT ;BY14=HLFBYT /MODIFY BOOTSTRAP FOR MS HALF BYTES 23 ;BY15=23 7-23 ;BY16=7-23 7000-1-7;BY17=7000-1-7 /READ IN MS HALF BYTES OF 17600 & 27600 NEXSEG ;BY20=NEXSEG 1 ;BY21=1 1-1 ;BY22=1-1 7400-1-1;BY23=7400-1-1 /READ IN MS HALF BYTES OF 'CRAP'& 07600 BOOTEN ;BY24=BOOTEN /GO TO END OF BOOTSTRAP BOOTEN, CDF 10 ;BY25=CDF 10 /GO TO DATE FIELD TAD I PDATE ;BY26=TAD I PDATE /GET TODAY'S DATE DCA BTEMP ;BY27=DCA BTEMP /STORE A WHILE TRNLP, CDF 0 ;BY30=CDF 0 TAD I XRF2 ;BY31=TAD I XRF2 /TRANSFER TEMPORARY BUFFFER CDF 20 ;BY32=CDF 20 DCA I PTF12 ;BY33=DCA I PTF12 /TO FIELD 2 CDF 0 ;BY34=CDF 0 TAD I XRF1 ;BY35=TAD I XRF1 /TRANSFER TEMPORARY BUFFER CDF 10 ;BY36=CDF 10 DCA I PTF12 ;BY37=DCA I PTF12 /TO FIELD 1 ISZ PTF12 ;BY40=ISZ PTF12 /TRANSFERRED ALL? JMP TRNLP ;BY41=JMP TRNLP /NO TAD BTEMP ;BY42=TAD BTEMP /GET TODAY'S DATE DCA I PDATE ;BY43=DCA I PDATE /TRANSFER TO THIS SYSTEM CDF 0 ;BY44=CDF 0 INIT ;BY45=INIT /RESET THE DONE FLAG AC7776 ;BY46=AC7776 TAD UNIT ;BY47=TAD UNIT DCA I PUNIT ;BY50=DCA I PUNIT /BYTE MODE & UNIT TO MAGIC JMP I BMONIT ;BY51=JMP I BMONIT BMONIT, 7605 ;BY52=7605 PTF12, 7600 ;BY53=7600 PUNIT, 7623 ;BY54=7623 PDATE, 7666 ;BY55=7666 / HLFBYT, TAD BHALF ;BY56=TAD BHALF /GO TO OTHER ROUTINE FOR HALF DCA LOAD12 ;BY57=DCA LOAD12 /BYTE LOADING OF MS PART JMP NEXSEG ;BY60=JMP NEXSEG / LODHLF, JMS LOAD ;BY61=JMS LOAD /GET BYTE JMS HLFCON ;BY62=JMS HLFCON /CONVERT TO MS 4 BITS + BYTE DCA I XR ;BY63=DCA I XR /AND SAVE AGAIN TAD BTEMP ;BY64=TAD BTEMP /GET AGAIN JMS HLFCON ;BY65=JMS HLFCON /CONVERT OTHER HALF BYTE JMP LOAD12+1;BY66=JMP LOAD12+1/SAVE IN 'LOAD' / HLFCON, 0 ;BY67=0 /CONVERT BYTE TO HALF BYTE IN MS POS CLL RTL ;BY70=CLL RTL RTL ;BY71=RTL DCA BTEMP ;BY72=DCA BTEMP TAD BTEMP ;BY73=TAD BTEMP AND B7400 ;BY74=AND B7400 TAD I XROLD ;BY75=TAD I XROLD JMP I HLFCON ;BY76=JMP I HLFCON B7400, 7400 ;BY77=7400 / RELOC ENPUNCH / /HEADER BLOCK FOR BUILD / *0 -3 /ONLY THREE ENTRY-POINTS DEVICE RXHD DEVICE SYS 4410 /BYTE MODE FLOPPY HANDLER SYS&177+6000 /TWO PAGE HANDLER & SYS 0 /UNUSED 1222 /SIZE DEVICE RXHD DEVICE RXH0 /OTHER NAME FOR SYS 4410 /RW FILE ORIENTED RXH0&177+5000 /TWO PAGE HANDLER & CORES 0 /UNUSED 1222 /SIZE DEVICE RXHD DEVICE RXH1 /SECOND FLOPPY DEVICE 4410 RXH1&177+5000 /THIS ONE REALLY CORESIDENT 0 /UNUSED 1222 /SIZE / STBOOT-NDBOOT /- BOOT SIZE / STBOOT=. / /NOW FOLLOWS THE BYTE ENCODING OF THE 12-BIT BOOTSTRAP / X=BY00%20&377; HBY00&7400+X Y=BY00^20&360; X=BY01%400&17+Y; HBY00^20&7400+X X=BY01&377; HBY00^400&7400+X X=BY02%20&377; HBY01&7400+X Y=BY02^20&360; X=BY03%400&17+Y; HBY01^20&7400+X X=BY03&377; HBY01^400&7400+X X=BY04%20&377; HBY02&7400+X Y=BY04^20&360; X=BY05%400&17+Y; HBY02^20&7400+X X=BY05&377; HBY02^400&7400+X X=BY06%20&377; HBY03&7400+X Y=BY06^20&360; X=BY07%400&17+Y; HBY03^20&7400+X X=BY07&377; HBY03^400&7400+X X=BY10%20&377; HBY04&7400+X Y=BY10^20&360; X=BY11%400&17+Y; HBY04^20&7400+X X=BY11&377; HBY04^400&7400+X X=BY12%20&377; HBY05&7400+X Y=BY12^20&360; X=BY13%400&17+Y; HBY05^20&7400+X X=BY13&377; HBY05^400&7400+X X=BY14%20&377; HBY06&7400+X Y=BY14^20&360; X=BY15%400&17+Y; HBY06^20&7400+X X=BY15&377; HBY06^400&7400+X X=BY16%20&377; HBY07&7400+X Y=BY16^20&360; X=BY17%400&17+Y; HBY07^20&7400+X X=BY17&377; HBY07^400&7400+X X=BY20%20&377; HBY10&7400+X Y=BY20^20&360; X=BY21%400&17+Y; HBY10^20&7400+X X=BY21&377; HBY10^400&7400+X X=BY22%20&377; HBY11&7400+X Y=BY22^20&360; X=BY23%400&17+Y; HBY11^20&7400+X X=BY23&377; HBY11^400&7400+X X=BY24%20&377; HBY12&7400+X Y=BY24^20&360; X=BY25%400&17+Y; HBY12^20&7400+X X=BY25&377; HBY12^400&7400+X X=BY26%20&377; HBY13&7400+X Y=BY26^20&360; X=BY27%400&17+Y; HBY13^20&7400+X X=BY27&377; HBY13^400&7400+X X=BY30%20&377; HBY14&7400+X Y=BY30^20&360; X=BY31%400&17+Y; HBY14^20&7400+X X=BY31&377; HBY14^400&7400+X X=BY32%20&377; HBY15&7400+X Y=BY32^20&360; X=BY33%400&17+Y; HBY15^20&7400+X X=BY33&377; HBY15^400&7400+X X=BY34%20&377; HBY16&7400+X Y=BY34^20&360; X=BY35%400&17+Y; HBY16^20&7400+X X=BY35&377; HBY16^400&7400+X X=BY36%20&377; HBY17&7400+X Y=BY36^20&360; X=BY37%400&17+Y; HBY17^20&7400+X X=BY37&377; HBY17^400&7400+X X=BY40%20&377; HBY20&7400+X Y=BY40^20&360; X=BY41%400&17+Y; HBY20^20&7400+X X=BY41&377; HBY20^400&7400+X X=BY42%20&377; HBY21&7400+X Y=BY42^20&360; X=BY43%400&17+Y; HBY21^20&7400+X X=BY43&377; HBY21^400&7400+X X=BY44%20&377; HBY22&7400+X Y=BY44^20&360; X=BY45%400&17+Y; HBY22^20&7400+X X=BY45&377; HBY22^400&7400+X X=BY46%20&377; HBY23&7400+X Y=BY46^20&360; X=BY47%400&17+Y; HBY23^20&7400+X X=BY47&377; HBY23^400&7400+X X=BY50%20&377; HBY24&7400+X Y=BY50^20&360; X=BY51%400&17+Y; HBY24^20&7400+X X=BY51&377; HBY24^400&7400+X X=BY52%20&377; HBY25&7400+X Y=BY52^20&360; X=BY53%400&17+Y; HBY25^20&7400+X X=BY53&377; HBY25^400&7400+X X=BY54%20&377; HBY26&7400+X Y=BY54^20&360; X=BY55%400&17+Y; HBY26^20&7400+X X=BY55&377; HBY26^400&7400+X X=BY56%20&377; HBY27&7400+X Y=BY56^20&360; X=BY57%400&17+Y; HBY27^20&7400+X X=BY57&377; HBY27^400&7400+X X=BY60%20&377; HBY30&7400+X Y=BY60^20&360; X=BY61%400&17+Y; HBY30^20&7400+X X=BY61&377; HBY30^400&7400+X X=BY62%20&377; HBY31&7400+X Y=BY62^20&360; X=BY63%400&17+Y; HBY31^20&7400+X X=BY63&377; HBY31^400&7400+X X=BY64%20&377; HBY32&7400+X Y=BY64^20&360; X=BY65%400&17+Y; HBY32^20&7400+X X=BY65&377; HBY32^400&7400+X X=BY66%20&377; HBY33&7400+X Y=BY66^20&360; X=BY67%400&17+Y; HBY33^20&7400+X X=BY67&377; HBY33^400&7400+X X=BY70%20&377; HBY34&7400+X Y=BY70^20&360; X=BY71%400&17+Y; HBY34^20&7400+X X=BY71&377; HBY34^400&7400+X X=BY72%20&377; HBY35&7400+X Y=BY72^20&360; X=BY73%400&17+Y; HBY35^20&7400+X X=BY73&377; HBY35^400&7400+X X=BY74%20&377; HBY36&7400+X Y=BY74^20&360; X=BY75%400&17+Y; HBY36^20&7400+X X=BY75&377; HBY36^400&7400+X X=BY76%20&377; HBY37&7400+X Y=BY76^20&360; X=BY77%400&17+Y; HBY37^20&7400+X X=BY77&377; HBY37^400&7400+X HBY40&7400 HBY40^20&7400 HBY40^400&7400 HBY41&7400 HBY41^20&7400 HBY41^400&7400 HBY42&7400 HBY42^20&7400 HBY42^400&7400 HBY43&7400 HBY43^20&7400 HBY43^400&7400 HBY44&7400 HBY44^20&7400 HBY44^400&7400 HBY45&7400 HBY45^20&7400 HBY45^400&7400 HBY46&7400 HBY46^20&7400 HBY46^400&7400 HBY47&7400 HBY47^20&7400 HBY47^400&7400 HBY50&7400 HBY50^20&7400 HBY50^400&7400 HBY51&7400 HBY51^20&7400 HBY51^400&7400 / NDBOOT=. / CODE THAT IS LOCATION SPECIFIC HAS !! IN COMMENTS / / ## CODE FOR SYSTEM HANDLER ## / RELOC *200 RELOC 7600 / / /USE DATA BREAKS FOR TEMPORARIES / /QUO=MQ /CURRENT LOGICAL TRACK IN MQ REGISTER REC=7750 /CURRENT LOGICAL SECTOR !!MUST BE 7750!! REMD=7751 /REMAINDER FOR DIVIDE == SECTOR IOTYP=7752 /LOGICAL UNIT+BYTE (NORMAL OR REVERSED) RETRY=7753 /RETRIES COUNT SHIFT=7754 /DIVISOR FOR DIVIDE / ZBLOCK 7 /REQUIRED BY BUILD / / / ENTRY POINT / RXH0, /NORMAL HANDLER NAME SYS, VERSION /SYSTEM HANDLER NAME L33, 33 /FALL THRU SOME LITERALS L7700, 7700 /'SMA CLA' CLEARS AC!! L3, 3 /!!REQUIRED AT 7612!! TO SHOW OS8 TWO PAGE HANDLER TAD SYS /USE RXH1 AS COMMON ENTRY POINT DCA RXH1 /I HOPE THE CODE IS SHORTER JMP JOINT /SET UNIT 0,1 - DEPENDING ON BOOT / / START OF DIVIDE ROUTINE - FITS IN HERE DIVSUB, 0 SPA SZL /IS IT A LEGAL SECTOR NUMBER? JMP FATAL /NO! DON'T EVEN RETRY DCA REC /SET FIRST OR NEXT LOGICAL SECTOR L20, 20 /THESE 2 ITEMS WILL EXECUTE AS 'AND' BOOTYP, 100 /!!MUST BE AT 7623!! SECONDARY BOOT PUTS AT BOOT TIME / /100 FOR BYTE MODE, AND 20 IF UNIT 1 TAD L7700 /SET DIVIDE QUOTIENT MQL /FOR 6 DIVIDES TAD REC /THIS FOR TRACK-SECTOR DCA REMD /GETS REDUCED TO NEG. REMAINDER TAD L4600 /=-26*2^6 JMP DIVSTA /GO INTO DIVIDE LOOP / L4600, 4600 LLCDI0, CIF CDF 0 / /SECOND ENTRY POINT RXH1, VERSION /BE NICE AND PUT AT 7634 CLA CLL /THE USUAL SECURITY TAD L20 /SET UNIT TO 1,0 - MAY SET BIT 40 = NOP JOINT, TAD BOOTYP /SET UNIT 0,1 OR 1,0 - DEPENDING ON BOOT DCA IOTYP /THIS WILL BE USED BY LDCMD RDF /GRAB CALLER'S FIELD CIF 20 /!!MUST BE AT 7642 FOR FRTS!! (OTHER CIFS COMING) TAD LLCDI0 /MAKE CIF CDF TO IT (A CIF 20 WILL FOLLOW IT) DCA RESTOR /PUT IT BACK, GOING TO I/O ROUTINE ON PAGE 2 TAD RESTOR /SETUP RETURN TO USER DCA EXIT /AFTER NORMAL OR ERROR RETURN AC7775 /SET UP RETRY COUNTER DCA RETRY /RETRIES ARE OVER ENTIRE OPERATION RSTART, TAD RXH1 /NOW GO TO PAGE 2 FOR MOST RESTOR, HLT /WILL HAVE CIF CDF USER CIF 20 /KILL PREVIOUS CIF AND JMP PAGE2 /GO TO PAGE2 HAPPY, SNL CLA /WAS LINK SET FOR LCD WITH ARGS? JMP LDEND /NO, RETURN TAD REMD /YES, LOAD SECTOR STR JMP .-1 XDR CLA MQA /CLEAR AC, GET LOGICAL TRACK IAC /LOGICAL TO STANDARD STR JMP .-1 XDR LDEND, CLA CLL /LINK MUST BE 0 FOR FOLLOWING DIVSUB CIF 20 JMP I LDCMD LDCMD, 0 /THIS ROUTINE HANDLES ALL LCD COMMANDS SDN /READY TO ACCEPT? JMP .-1 CLL RAL /MOVE COMMAND OVER NOP BIT AND SET LINK FLAG TAD IOTYP /ADD BYTE BIT AND UNIT /AT 7700!! THIS IS ALL I CAN DO FOR THE BAD PROGRAMMERS!! LCD /START CODE (MICROCODE THAT IS) SER /UNHAPPY? JMP HAPPY /YOUPEE ISZ RETRY /GIVE HIM ANOTHER TRY? JMP RSTART /YES FATAL, AC4000 /THATS THE FATAL SIGNAL SKP /TO ERROR RETURN END, ISZ RXH1 /END CALLED FROM PAGE 2 ISZ RXH1 ISZ RXH1 ISZ RXH1 /RXH1 COMMON ENTRY, REMEMBER? EXIT, HLT /RETURN TO USER FIELD JMP I RXH1 /BYE BYE / / THIS IS THE MAIN PART OF TRACK/SECTOR CALCULATION (SEE DIVSUB) / DIVLOO, TAD SHIFT /MAIN DIVIDE LOOP STL RAR /NEXT DIVISOR DIVSTA, DCA SHIFT TAD SHIFT /LINK IS NOW = 0 TAD REMD / SZL /OVERFLOW? DCA REMD /YES, UPDATE REMAINDER CLA MQA /GET QUOTIENT WITH COUNT MASK RAL /SHIFT IN DIVIDE BIT MQL /AND SHIFT BUSY BIT OUT SZL /SKIP IF DONE JMP DIVLOO TAD REMD /MULTIPLY BY THREE FOR INTERLEAVE CLL RAL TAD REMD /NOW SHIFT IS AT -26 SO WE CAN TAD SHIFT /DIVIDE BY 26 TO GET SECTOR SMA /SKIP IF DONE JMP .-2 TAD L33 DCA REMD /WHEW, THATS IT! ISZ REC /PREPARE NEXT LOGICAL SECTOR CIF 20 /POP BACK TO OTHER PAGE JMP I DIVSUB /!!THIS IS IN LAST USABLE LOCATION, EXEC NEEDS 7744!! / / ## SECOND PAGE ## / RELOC *400 RELOC 7600 LCDF0, CDF 0 FILL4, 0 /SUBROUTINE TO PUT 1 4-BIT IN CORE CLL RTL RTL DCA TEMP4 TAD TEMP4 AND L7400 DCA I BUF4 ISZ BUF4 L7, 7 JMP I FILL4 / / FETCH ARGUMENTS, ETC. / PAGE2, DCA FETCH /ENTER WITH ARGUMENT LIST ADDR IN AC AC4000 /SET UP TO PUT R/W BIT TO LINK TAD I FETCH /FIRST ARGUMENT HAS FIELD FOR TRANSFER AND L70 /KEEPING ONLY FIELD TAD LCDF0 /MAKE CDF TO TRANSFER FIELD DCA BUFCDF /PLACE IN LINE FOR SILO LOOP CML RAL /0=WRITE, 1=READ DCA FN TAD I FETCH /MAKE CONTROL COUNT FOR TRANSFER CLL RAL AND L7600 CLL CIA DCA SNGWC /8-BIT WORD COUNT TAD SNGWC STL RAR /4000 FOR WHOLE FIELD DCA DBLWC /4-BIT DOUBLE WORD COUNT ISZ FETCH /NEXT ARGUMENT TAD I FETCH /BUFFER ADDRESS DCA BUF8 /FOR RIGHT 8-BITS ISZ FETCH /NEXT TAD I FETCH /TEST BLOCK NUMBER CLL RAL /*2 SMA SNL /SECTOR NUMBER MUST STAY NON-NEG TAD I FETCH /+1=3, 3*1221=3663 IS THE LIMIT LCDIF0, CIF CDF 0 /GO BACK TO FIRST PAGE JMS DIVSUB /SET UP TRACK AND SECTOR /DIVSUB WILL TEST IF SECTOR NON-NEG AND ADD IT TO THE INITIALIZED /(=0) VALUE OF 'REC' / / TOP OF BLOCK LOOP / LBLOCK, STA DCA LMODE /FIRST 4-BIT MODE TOP, AC7776 TAD LMODE /SEE IF LMODE AT END SNA CLA JMP LBLOCK /YES, RESET TO -1 TAD BUF8 /NOW SET THE 4-BIT BUFFER DCA BUF4 /TO TLE LAST 8-BIT BUFFER TAD FN /SPLIT READ AND WRITE SZA /WRITE SKIPS JMS SECTOR /AC CARRIES FN=1 FOR READ TAD FN /SET SILO TO LOAD-UNLOAD CIF CDF 0 JMS LDCMD /COMMAND TO CONTROLLER BUFCDF, HLT /CDF TO BUFFER FIELD PLACED HERE ISZ LMODE /GO TO NEXT MODE AND TEST JMP RW8BIT RW4BIT, TAD FN /TEST IF R/W FOR FETCH OR FILL LREC, SPA SNA CLA /!! LREC AT 7750!! JMP WR4BIT RD4BIT, JMS SILO /GET A BYTE JMS FILL4 /LOAD 4BIT-A IN EVEN WORD TAD TEMP4 JMS FILL4 /LOAD 4BIT-B IN ODD WORD TS4BIT, ISZ DBLWC /DO WE HAVE A HALF-BLOCK? JMP RW4BIT /NOT YET, LOOP FLUSH, JMS SILO /EMPTY SILO AND DISCARD OR FILL WITH NULLS / .............. / IFNZRO .-7700 <NOSMA,_> /EXERCISE FOR THE READER FETCH, TEMP4, SILO, 0 /FILL OR EMPTY SILO STR /WAIT FOR TRANSFER READY JMP TSDONE /TEST FOR DONE READY XDR JMP I SILO TSDONE, SDN /IS SILO EMPTY/FULL JMP SILO+1 /NO WAIT CLA CLL /RUBBISH IN AC TAD MAGIC /FUNCTION 10 IS 'NOP' LCD /RESET FLAG TAD FN /IS IT WRITE? SNA CLA JMS SECTOR /YES, WRITE SECTOR (AC=0) TAD DBLWC /DOUBLE WORDS DONE? GUARANTEES FULL FIELD MAGIC, SNA /BE SURE OF 'AND' CONDITION! TAD SNGWC /SINGLE WORDS DONE? GUARANTEES 8-BIT DONE SZA CLA /ALL DONE? JMP TOP /DO NEXT SECTOR CIF CDF 0 JMP END /RETURN TO USER SECTOR, 0 /AC CARRIES READ/WRITE SILO COMMAND TAD L7002 /TURN SILO COMMAND INTO READ-WRITE COMMAND CIF CDF 0 /THE 4000 BIT TELLS THAT LCD NEEDS ARGS JMS LDCMD /I/O COMMAND TO CONTROLLER CDF CIF 0 /GO BACK TO FIRST PAGE TAD I LREC /GET LAST RECORD+1 JMS DIVSUB /FOR TRACK AND SECTOR TAD L7 /WAIT FOR OPERATION TO COMPLETE CIF CDF 0 /FUNCTION 16 IS 'READ ERROR REGISTER' JMS LDCMD JMP I SECTOR WR4BIT, TAD I BUF4 /GET FIRST 4-BIT FROM EVEN WORD ISZ BUF4 AND L7400 CLL RTR /NOW IN POSITION 1700 DCA TEMP4 /SAVE A WHILE TAD I BUF4 /GET SECOND 4-BIT FROM ODD WORD ISZ BUF4 L7400, 7400 AND L7400 L7002, BSW /IN POSITION 0074 TAD TEMP4 /NOW 1774 CLL RTR /IN BYTE POSITION 377 JMS SILO L7600, 7600 /CLA FOR TEST JMP TS4BIT /GO INCREMENT DOUBLE WORDS RW8BIT, TAD I BUF8 /8-BIT TRANSFER LOOP JMS SILO /FOR BOTH READ AND WRITE DCA I BUF8 ISZ BUF8 L70, 70 ISZ SNGWC /KEEP TRACK OF END JMP RW8BIT JMP FLUSH /THE END, 1 MORE 'JMS SILO' / / VARIABLES ETC. / BUF4, 0 /POINTER TO CALLER'S BUFFER 4-BITS BUF8, 0 /POINTER TO CALLER'S BUFFER 8-BITS DBLWC, 0 /CONTROL COUNT, DOUBLE WORDS TO TRANSFER SNGWC, 0 /CONTROL COUNT, WORDS TO TRANSFER FN, 0 /0 FOR WRITE, 1 FOR READ LMODE, 0 /-1 TO 2 4-BIT OR 8-BIT MODE ZBLOCK 4 /FOR BATCH IFZERO .-1&4000 <FFULL,_> /FIELD OVERFLOW $ $ $ $