/ 8-BIT RX50 ROUTINES FROM PIP SEL=6750 /SELECT DRIVE PAIR 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 BOOTYP= 7623 /MAGIC LOCATION IN RX SYSTEM HANDLER INDEVH= 6600 /INPUT HANDLER BUFFER OUDEVH= 7200 /OUTPUT HANDLER BUFFER AC0002= CLA CLL CML RTL /LOAD AC WITH 0002 AC3777= CLA CLL CMA RAR /LOAD AC WITH 3777 AC4000= CLA CLL CML RAR /LOAC AC WITH 4000 FIELD 2 *10 XR210, 0 *20 INDRV, 0 /WILL CONTAIN DRIVE# AND DRIVE PAIR INFO FOR INPUT DEV OUTDRV, 0 /WILL CONTAIL DRIVE# AND DRIVE PAIR INFO FOR OUTPUT DEV XTEMP, 0 XTEMP1, 0 L70, 70 /THE FOLLOWING DATA IS USED BY 8 BIT HANDLER K100, 100 BUF, 0 RETRY, 0 SYS, 0 QUO, 0 REC, 0 BC, 0 FN, 0 DENSW, 7000 T1, 0 L12, 12 LM12, -12 L6, 6 LM6, -6 L79, 117 SEEK, 117 /READ 5 BLOCKS FROM INPUT DEVICE XFER, 0 /CALL I/O ROUTINE FOR 5 BLOCK XFER TAD I XFER /GET STARTING BLOCK # DCA XFER1 /AND SAVE IT IN CALL TAD I XFER DCA XFER3 ISZ XFER /SETUP RETURN TO CALLER + 2 JMS RXCALL /CALL I/O ROUTINE 0005 /READ 5 BLOCKS XFER1, 0000 /STARTING BLOCK # XFER2, 0000 /DRIVE # & SELECT BIT JMP FRMIN /ERROR RETURN CLL CLA /WRITE 5 BLOCKS TO OUTPUT DEVICE JMS RXCALL 4005 /WRITE 5 BLOCKS XFER3, 0000 /STARTING BLOCK # XFER4, 0000 /DRIVE # & SELECT BIT JMP FRMOUT /ERROR RETURN CLL CLA JMP I XFER /ALL DONE LEAVE / LOAD COMMAND SUBROUTINE FLPWC=. LDCMD, 0 TAD K100 /SET 8 BIT MODE LCD /AND LOAD IT JMS WAIT /WAIT FOR STR SKP JMP ERRSET CLA IAC XDR CLA JMP I LDCMD /NO RETURN TO CALLER WAIT, 0 STR /TEST XFER FLAG SKP JMP I WAIT /STR FOUND, RETURN TO CALLER + 1 SDN JMP WAIT+1 /LOOP UNTIL STR OR SDN SETS ISZ WAIT /SDN FOUND, RETURN TO CALLER + 2 SER /CHECK FOR ANY ERROR CONDITIONS JMP I WAIT /NONE FOUND RETURN TO CALLER + 2 ERRSET, AC4000 /ERROR FOUND ISZ RETRY /HAS ERROR RETRY COUND EXPIRED JMP RECOVR /NO JMP EXFLD /YES RETURN TO CALLER WITH - AC FIXIT, 0 /CALCULATE DRIVE NUMBER AND DRIVE PAIR AND (7 TAD (-7 /IS IT SYS SNA JMP YESSYS /NO. SPECIAL CASE TAD (7 /YES, RESTORE VALUE CLL RTR DCA XTEMP TAD XTEMP /FIND DRIVE # SPA CLA IAC DCA XTEMP1 /AND STORE IT TAD XTEMP /FINE DRIVE PAIR RAR SZL CLA TAD (20 TAD XTEMP1 JMP I FIXIT /RETURN INFO YESSYS, CDF 0 /SYS DEVICE GET INFO FROM MAGIC TAD I (BOOTYP /DRIVE# & PAIR STORED IN HANDLER CDF 20 JMP I FIXIT *0200 RX50CK, CLL CLA CDF 10 TAD I (7617 /IS INPUT DEVICE AN RX50 AND (17 TAD (7757 DCA XTEMP TAD I XTEMP RTR RAR AND (77 /ALL RX50 DEVICE NUMBERS = 30 TAD (-30 /IS INPUT DEVICE AN RX50 SZA CLA JMP RX50EX /NO LEAVE TAD I (7600 /YES, BUT IS OUTPUT DEVICE AN RX50 AND (17 TAD (7757 DCA XTEMP TAD I XTEMP /GET OUTPUT DEVICE NUMBER RTR RAR AND (77 TAD (-30 /IS OUTPUT DEVICE NUMBER 30 SZA CLA JMP RX50EX /NO LEAVE TAD (INDEVH+1 /YES, NOW FIND WHAT DRIVE NUMBER DCA IN50 TAD I (7617 /SET AC = TO INTERNAL HANDLER NUMBER CDF 20 SNA IAC /IF AC = 0 SET DEV SYS CIF 10 JMS I (200 /CALL USR TO FETCH HANDLER 0001 /FETCH IN50, 0000 /THIS WILL CONTAIN ENTRY POINT OF HANDLER HLT CLL CLA TAD IN50 JMS FIXIT DCA INDRV CDF 10 TAD (OUDEVH+1 /YES, NOW FIND WHAT DRIVE NUMBER DCA OUT50 TAD I (7600 /SET AC = TO INTERNAL HANDLER NUMBER CDF 20 SNA IAC /IF NON ZERO SET DEV TO SYS CIF 10 JMS I (200 /CALL USR TO FETCH HANDLER 0001 /FETCH OUT50, 0000 /THIS WILL CONTAIN ENTRY POINT OF HANDLER HLT CLL CLA TAD OUT50 JMS FIXIT DCA OUTDRV TAD INDRV /SETUP XFER ROUTINES FOR HANDLER CALL DCA XFER2 TAD OUTDRV DCA XFER4 JMS XFER /XFER TRACK 0 0000 JMS XFER 0005 CDF 10 /CHECK FOR /X SWITCH CLL CLA IAC AND I (7644 CDF 20 SZA CLA JMP SKIP /X SWITCH ACTIVE JUMP OVER BLOCK 0 FIX TAD OUTDRV /FIX BLOCK 0 DCA .+4 JMS RXCALL 0001 /READ 1 BLOCK 0012 /STARTING AT BLOCK 12 (TRK 1, SEC 1) 0000 JMP ZEROIN /ERROR RETURN STA /FIX DISK ID WORDS IN BLOCK 0 DCA XTEMP /SET UP POINTER JMS STORE JMS STORE AC0002 JMS STORE IAC JMS STORE JMS STORE JMS STORE TAD (10 JMS STORE TAD (10 JMS STORE TAD (11 JMS STORE TAD (346 JMS STORE JMS STORE IAC JMS STORE /ALL DONE SO TAD OUTDRV /WRITE TRK 1, SEC 1 BACK OUT DCA .+4 /THAT IS BLOCK 0 JMS RXCALL 4001 0012 0000 JMP ZEROUT /ERROR RETURN JMP SKIP PAGE SKIP, CLL CLA /XFER LAST 2 TRACKS JMS XFER 1414 JMS XFER 1421 JMS XFER 1426 JMS XFER 1433 RX50EX, CLL CLA /LEAVE CIF CDF 10 /RETURN TO PIP JMP I (202/PIPCLR STORE, 0 /STORE BLOCK 0 ID WORDS IN BUFFER AREA ISZ XTEMP NOP CDF 30 DCA I XTEMP CDF 20 JMP I STORE FRMIN, JMS PNTERR /ERROR READING FIRMWARE / FRMTXT JMS PNTERR / INTXT JMS PNTERR / CRLF JMP RX50EX FRMOUT, JMS PNTERR /ERROR WRITING FIRMWARE / FRMTXT JMS PNTERR / OUTTXT JMS PNTERR / CRLF JMP RX50EX ZEROIN, JMS PNTERR /ERROR READING BLOCK 0 / RDTXT JMS PNTERR / ZROTXT JMS PNTERR / OUTTXT JMS PNTERR / CRLF JMP RX50EX ZEROUT, JMS PNTERR /ERROR WRITING BLOCK 0 / WRTTXT JMS PNTERR / ZROTXT JMS PNTERR / OUTTXT JMS PNTERR / CRLF JMP RX50EX PNTERR, 0 /PRINT ERROR MESSAGE CLL CLA CMA TAD I PNTERR DCA XR210 ISZ PNTERR PNTLOP, TAD I XR210 SNA JMP I PNTERR TLS TSF JMP .-1 CLA JMP PNTLOP PAGE /HANDLER ROUTINE MAX XFER IS 10 PAGES (5 BLOCKS) /THIS ROUTINE CAN XFER A HALF OF A BLOCK IF RXCALL START UP CODE /IS MODIFIED. THE I/O ROUTINE IS A MODIFIED RX50 NONSYSTEM HANDLER /TO READ AND WRITE IN 8 BIT MODE. TO GET A BETTER UNDERSTANDING /OF WHAT IS HAPPENING HERE REFER TO THE RX50 NONSYSTEM HANDLER. RXCALL, 0 CLL CLA TAD (-6 DCA RETRY RSTART, CLL CLA TAD RXCALL DCA SYS /POINTER TO ARG'S, EXIT TAD I SYS /SET UP READ WRITE WORD RAL SNL CLA AC0002 DCA FN AC3777 /MASK OUT R/W BIT AND I SYS /SET UP LOOP CONTROL COUNT BSW CLL RTL RAL AND L7600 CIA DCA BC /-# OF BYTES TO XFER ISZ SYS TAD I SYS DCA REC /BLOCK ADDRESS ISZ SYS IAC AND I SYS SEL CLL CLA TAD I SYS AND (7776 TAD FN DCA FN ISZ SYS /SET UP FOR ERROR RETURN DCA BUF /BUFFER IS AT LOC 0 FIELD 0 JMS DIVSUB /CALL DIVISION SUBROUTINE OTHER PAGE AC0002 /MASK OUT READ WRITE BIT AND FN /SPLIT READ AND WRITE SZA CLA /SKIP IF WRITE JMP STREAD /READ GOES TO START IN MIDDLE OF LOOP /WRITE FALLS THRU TO NEXT LISTING PAGE /WRITE FALLS THRU TO THIS LOOP / / TOP OF MAIN LOOP / TOP, TAD FN /SET SILO TO LOAD-UNLOAD JMS LDCMD /COMMAND TO CONTROLLER TAD DENSW /MAKE SILO LOOP COUNT, 7400 FOR RX50 DCA FLPWC /LDCMD ENTRY SAFE TEMPORARY CLL /FLAG FOR BC OVERFLOW TRLOOP, TAD FN AND (2 CDF 30 SNA CLA /NO WRITE GET DATA TAD I BUF /IN CASE WRITE, FETCH A WORD CDF 20 JMS WAIT /WAIT FOR STR SKP JMP ERRSET XDR /TO OR FROM AC SZL /LINK SET IF BLOCK COUNT EXPIRED, ODD PAGE THING JMP INCWC /THROUGH AWAY DATA, JUST COUNT TRANSFERS CDF 30 DCA I BUF /STILL WORDS TO GET CDF 20 ISZ BUF REMD, 0 /HOME FOR SECTOR NUMBER, ALWAYS 00XY, HENCE NOP ISZ BC /TEST FOR END OF TRANSFER SKP /NO, GO ON STL /YES INCWC, CLA ISZ FLPWC /256 WORD COUNTER JMP TRLOOP JMS WAIT /WAIT FOR SDN JMP ERRSET TAD BC /WENT TO ZERO IF TRANSFER COMPLETE SZA CLA JMP STREAD AC0002 AND FN SZA CLA JMP EXIT STL /INDICATES THAT BLOCK COUNT HAS EXPIRED / / MIDDLE OF MAIN LOOP / STREAD, TAD K4 /LEAVE THE LINK ALONE TAD FN /TURNING SILO COMMAND INTO READ-WRITE COMMAND JMS LDCMD /I/O COMMAND TO CONTROLLER TAD REMD /PRECOMPUTED SECTOR # JMS WAIT /WAIT FOR STR SKP JMP ERRSET XDR L7600, 7600 /CLEAR AC, AND IS LITERAL JMS WAIT /WAIT FOR STR SKP JMP ERRSET TAD QUO XDR /TRACK # IS ALWAYS NON0 !! ISZ REC /MOVE TO NEXT RECORD NUMBER JMS DIVSUB /DO TRACK SECTOR FOR NEXT OPERATION JMS WAIT /WAIT FOR SDN JMP ERRSET SNL CLA /EXIT IF LINK SET, DIVIDE ROUTINE MUST PRESERVE !! JMP TOP /STILL MORE EXIT, ISZ SYS /KICK TO OK EXIT EXFLD, DCA BUF SEL TAD BUF CDF 20 JMP I SYS /OUT K4, 4 /MAKES 0 GO TO 4 AND 2 GO TO 6 PAGE / DIVSUB / / CALL TO SET UP TRACK, SECTOR, FROM OVERALL SECTOR # / ALSO, SET UNIT WITH HEAD COMMAND IF WE ARE ON TO SECOND SIDE / DIVSUB, 0 CLA DCA QUO /CLEAR DIVIDE QUOTIENT RAR DCA SAVL /SAVE THE CONTENTS OF THE LINK TAD REC /THIS FOR TRACK-SECTOR SKP DIVLOO, ISZ QUO /MAIN DIIVIDIE LOOP TAD LM12 /DIVIDE BY 10 TO GET TRACK SMA /SKIP IF DONE JMP DIVLOO TAD L12 /REMAINDER 0-9 DCA T1 /HOLD IT IN TEMPORARY TAD T1 /FOR INTERLEAVE OF 3 TAD T1 TAD T1 CLL IAC /LINK CLEAR FOR FINAL TEST; +1 TO START AT 1 NOT 0 TAD LM12 /DIVIDE BY 10 TO GET SECTOR SMA SZA /SKIP IF DONE JMP .-2 TAD L12 /RESTORE POSITIVE VALUE TO BE SECTOR DCA REMD TAD SAVL CLL RAL /RESTORE LINK JMP I DIVSUB /OUT SAVL, 0 /TEMPORARY SO WE CAN SAVE LINK THROUGH ALL THE /EVIL ARITHMETIC RECOVR, TAD SEEK /ERROR RETRY ROUTINE SNA CLA /THIS WILL ALTERNATE BETWEEN TRACKS 1 AND 79 TAD L79 DCA SEEK TAD FN AND (20 TAD L6 JMS LDCMD /AND LOAD IT JMS WAIT /WAIT FOR OPERATION TO COMPLETE SKP /STR NORMAL RETURN JMP ERRSET /DONE ERROR RETURN CLA IAC /SELECT SECTOR 1 XDR CLA JMS WAIT /WAIT FOR OPERATION TO FINISH SKP JMP ERRSET TAD SEEK /SEEK TO TRACK 1 OR 79 XDR JMS WAIT /WAIT FOR OPERATION TO COMPLETE JMP ERRSET JMP RSTART