/WINCHESTER SYSTEM OS/8 HANDLER /VERSION 00.04 / /SYS USES FIRST 2 MEGA-BYTES OF DRIVE / /THE DRIVE IS SUPPORTED BY LOGICAL UNIT NUMBER 0 /OF THE OMTI CONTROLLER. / /LAST EDIT 17-JUN-83 17:30 / /CHANGE "DEVCOD" TO PROPER DEVICE CODE AS NECESSARY /(DEFAULT IS 70) / /COMPUTER EXTENSION SYSTEMS, INC. (C) 1983 / / ASSEMBLY DEFINITIONS, ETC. / DEVICE IOT DEFINITIONS. IFNDEF DEVCODE /USES 670X BY DEFAULT DSEI= DEVCODE^10+6000 /INTERRUPT ENABLE DSSF= DEVCODE^10+6001 /SKIP ON DONE FLAG DSCD= DEVCODE^10+6002 /CLEAR DONE FLAG DSHI= DEVCODE^10+6003 /LOAD HIGH-ORDER COMMAND ADDRESS DSLO= DEVCODE^10+6004 /LOAD LOW-ORDER COMMAND AND GO DSRS= DEVCODE^10+6005 /READ STATUS DSDI= DEVCODE^10+6006 /DISABLE INTERRUPTS DSIP= DEVCODE^10+6007 /(DIAGNOSTIC) INITIAL PROGRAM LOAD (BOOTSTRAP) / OTHER DEFINITIONS. NL3777= CLA CLL CMA RAR /LOAD AC WITH 3777 NL4000= CLA CLL CML RAR /LOAD AC WITH 4000 VERSION="A&77 /VERSION NUMBER FOR RESORC / COMMAND TABLE DEFINITIONS. / WORD 1: POSITIVE LENGTH OF ENTIRE TABLE IN WORDS. / WORD 2: COMMAND TYPE (0000 FOR DISK READ/WRITE). / WORD 3: COMMAND (0010:READ, 0012:WRITE). / WORD 4: DRIVE CODE / WORD 5: CONTROL WORD (0:USE DEFAULTS;SEE BREAKDOWN.). / WORD 6: HIGH-ORDER SIX BITS OF DISK ADDRESS / WORD 7: MIDDLE SIX BITS OF DISK ADDRESS. / WORD 8: LOW-ORDER SIX BITS OF DISK ADDRESS. / WORD 9: SECTOR COUNT (1-400 FOR OS/8; / 8190 MAXIMUM.) / WORD 10: BANK AND FIELD (BANK:0000, FIELD:0-7 FOR OS/8). / WORD 11: HIGH-ORDER SIX BITS OF MEMORY ADDRESS. / WORD 12: LOW-ORDER SIX BITS OF MEMORY ADDRESS. / ALL SIX-BIT ORIENTED WORDS IGNORE THE HIGH TWO BITS OF THE BYTE. / ALL WORDS IGNORE THE HIGH-ORDER 4 BITS AND ARE SENT AS A BYTE TO THE / CONTROLLER. / CONTROL WORD BREAKDOWN. / BITS[0-3]: IGNORED. / BIT [4]: 0:DEFAULT CONTROLLER TO 0 0 0 0 1 0 0 0 X 0 1 X / EQUIVALENT PATTERN WITHIN THIS WORD. / 1:READ OTHER BITS FOR NON-DEFAULT PATTERN. / BIT [5]: 0:NO "FAST HANDSHAKE" MODE DURING BUFFERED TRANSFERS. / 1:USE "FAST HANDSHAKE" MODE DURING BUFFERED TRANSFERS. / BIT [6]: 0:USE LOGICAL DISK ADDRESSING. / 1:USE PHYSICAL DISK ADDRESSING. / BIT [7]: 0:ENABLE RETRIES. / 1:DISABLE RETRIES. / BIT [8]: 0:DISABLE ERROR CORRECTION ON FLOPPIES. / 1:ENABLE ERROR CORRECTION ON FLOPPIES. / N. B. REVERSE IS TRUE FOR WINCHESTERS;DOES NOT APPLY TO DIRECT / READS. / BIT [9]: 0:DISABLE WRITING OF DELETED DATA MARKS. / 1:ENABLE WRITING OF DELETED DATA MARKS ON FLOPPIES ONLY. / BIT [10]: 0:ENABLE BUFFERED TRANSFER. / 1:DISABLE BUFFERED TRANSFER. / BIT [11]: 0:DISABLE HALF-SECTOR READ ON FINAL SECTOR / 1:ENABLE HALF-SECTOR READ ON FINAL SECTOR. / BUILD HEADER, ETC. *0 /THAT'S WHERE BUILD WANTS IT! -1 /ONE HANDLER IN THIS GROUP DEVICE DW1S /GROUP NAME DEVICE SYS /PERMANENT NAME 4600 /DCB WORD SYSENT&177+2000 /ENTRY POINT WORD 0 /BUILD WANTS IT THIS WAY 7777 BSTART-BEND /BOOTSTRAP LENGTH / THE BOOTSTRAP CODE FOLLOWS WHEN BINARY OUTPUT RESUMES. / MANUAL BOOTSTRAP FOR WINCHESTER DISK SYSTEM. HERE, NOPUNCH /FOOL THE ASSEMBLER *0 /WHERE IT LOADS MANBUT, *22 /GET TO TOGGLE-IN REGION CAF /POWER CLEAR IS GOOD ENOUGH DSIP /DO (DIAGNOSTIC) BOOTSTRAP COMMAND OVERLAY,JMP . /WAIT FOR OVERLAY *HERE /RESTORE ORIGIN HERE, ENPUNCH /RESTORE BINARY OUTPUT RELOC MANBUT /WHERE THIS CODE COMES IN BSTART, DSSF /FLAG UP? JMP BSTART /NO, WAIT FOR IT DSCD /YES, CLEAR THE FLAG ISZ BSTART /WAIT FOR IT JMP .-1 /TO SETTLE DSRS /GET STATUS SZA /SKIP IF OK HLT /ELSE BARF! BFROM1, BSTART-1 /WHERE FIELD ONE CODE IS NOW BFROM2, BSTART+200-1 /WHERE FIELD ZERO CODE IS NOW CLA /CLEAN UP IN CASE OF EAE BLOOP, TAD I BFROM1 /GET A FIELD ONE WORD CDF 10 /GOTO FIELD ONE DCA I BDONE /STORE IT CDF 00 /BACK TO FIELD ZERO TAD I BFROM2 /GET A FIELD ZERO WORD DCA I BDONE /STORE IT ISZ BDONE /DONE ALL YET? JMP BLOOP /NO, GO BACK FOR MORE JMP I B7605 /YES, GO START IT UP OVERLAY,JMP BSTART /OVERLAYS WAITING MACHINE HERE IFNZRO 25-. JMP BLOOP /EXTERNAL BOOTSTRAP STARTS HERE BDONE, CLA+400 /COUNTER AND POINTER B7605, 7605 /WHERE TO RESTART OS/8 BEND= . /END OF BOOTSTRAP OVERLAY CODE RELOC /RESTORE REAL ORIGIN PAGE /ACTUAL HANDLER CODE HERE RELOC 7600 /WHERE IT EXECUTES ZBLOCK 7 /BUILD WANTS IT THIS WAY DW0B=. / SYSENT, VERSION /SYSTEM HANDLER ENTRY POINT CLA CLL /CLEAN UP AND INDICATE DRIVE ZERO DSHI /LOAD HIGH-ORDER COMMAND ADDRESS RDF /GET CALLING FIELD TAD LCDIF /MAKE INTO CDIF RETURN FIELD INSTRUCTION DCA SYSRETURN /STORE FOR EXIT LATER NL4000 /SET READ/WRITE MASK AND I DW0B /GET READ/WRITE BIT CLL IAC RTL /4 IF READING, 5 IF WRITING RAL /10 IF READING, 12 IF WRITING DCA RWCOM /STASH COMMAND TAD I DW0B AND L3700 /JUST SECTOR BITS SNA /SKIP IF NOT MAXIMUM NL4000 /ELSE USE 40 SECTORS VALUE BSW /%100 DCA SCTCNT /STASH SECTOR COUNT TAD I DW0B /GET FUNCTION WORD AGAIN AND L70 /JUST FIELD BITS CLL RTR /MOVE DOWN RAR /TO BITS[9-11] DCA TRFLD /STASH TRANSFER FIELD (BANK IS 0000) ISZ DW0B /BUMP TO TRANSFER ADDRESS TAD I DW0B /GET TRANSFER ADDRESS CLL BSW /PUT HIGH-ORDER INTO BITS[6-11] DCA TRADRHI /STASH HIGH-ORDER TRANSFER ADDRESS TAD I DW0B /GET TRANSFER ADDRESS AGAIN DCA TRADRLO /STASH LOW-ORDER TRANSFER ADDRESS ISZ DW0B /BUMP TO RECORD NUMBER TAD I DW0B /GET RECORD NUMBER RAL CLL BSW /PUT HIGH-ORDER INTO BITS[6-11] DCA SECTMD /STASH MIDDLE SECTOR ADDRESS TAD I DW0B /GET RECORD NUMBER RAL DCA SECTLO /STASH LOW-ORDER SECTOR ADDRESS ISZ DW0B /BUMP TO ERROR RETURN CLA RAL /MOST SIG BIT OF SECT # TO BIT 11 DCA SECTHI /STUFF IT CLA CLL CML RTR /AC=2000 7014 /ROTATE 3 LEFT IF ON SBC8 RTR /AC=0 IF ON SBC8 SZA CLA /ARE WE ON SBC8? JMP MDC /NO CDF 00 /DATA FIELD TO HERE CLA CLL CML RTL /AC=2 TAD COMPTR /ADJUST TABLE ADD FOR SBC8 6206 /PAN REQ 0 GO TO PAN MEM JMP ERR /ERROR RETURN CLA CLL JMP GOOD /ALL OK MDC, TAD COMPTR /POINT TO COMM TABLE DSLO /LOAD LOW-ORDER COMMAND ADDRESS DSSF /FLAG UP? JMP .-1 /NO, WAIT FOR IT DSCD /YES, CLEAR THE FLAG DSIP /GO DSSF /FLAG UP? JMP .-1 /NO DSCD /YES, CLEAR IT L100, 100 /CONSTANT 0100 L177, 177 /CONSTANT 0177 DSRS /GET RETURNED STATUS SZA CLA /SKIP IF ALL IS OK ERR, NL4000 /SET FATAL SMA /SKIP IF ERROR GOOD, ISZ DW0B SYSRETU,.-. /WILL BE CIF CDF RETURN INSTRUCTION JMP I DW0B /RETURN TO CALLER / COMMAND TABLE. TABLE, COMMEND-TABLE /LENGTH OF WHOLE TABLE INCLUDING THIS WORD COMTYPE,0 /COMMAND TYPE RWCOM, .-. /0010 IF READING, 0012 IF WRITING DRVUNT, 1 /ALWAYS DRIVE 1 DCONTRL,0202 SECTHI, 0 /HIGH-ORDER DISK ADDRESS SECTMD, .-. /MIDDLE DISK ADDRESS (SIX BITS) SECTLO, .-. /LOW-ORDER DISK ADDRESS (SIX BITS) SCTCNT, .-. /SECTOR COUNTER (1-40) TRFLD, .-. /BANK (0000) AND TRANSFER FIELD (0-7) TRADRHI,.-. /HIGH-ORDER TRANSFER ADDRESS (SIX BITS) TRADRLO,.-. /LOW-ORDER TRANSFER ADDRESS (SIX BITS) COMMEND=. /END OF COMMAND TABLE COMPTR, TABLE /COMMAND TABLE POINTER LCDIF, 6203 /CDIF CONSTANT L70, 70 /CONSTANT 0070 L3700,3700 RELOC /TURN OFF RELOCATION $ /THAT'S ALL FOLK!