/FLOPPY OS/8 NON-SYSTEM HANDLER / /USE WITH OMTI 20-D CONTROLLER AND /5 1/4" FLOPPY DRIVE. / /TWO DEVICE NAMES ARE USED. /DX0 USES LOGICAL UNIT 2 OF THE OMTI CONTROLLER. /DX1 USES LOGICAL UNIT 3 OF THE OMTI CONTROLLER. / /LAST EDIT 20-JUN-83 18:00 / /CHANGE "DEVCOD" TO PROPER DEVICE CODE AS NECESSARY. /(DEFAULT IS 70) / /COMPUTER EXTENSION SYSTEMS, INC. (C) 1983 / /5 1/4" FLOPPY DRIVES /SINGLE SIDE /DOUBLE DENSITY /80 TRACKS PER SIDE /16 SECTORS PER TRACK /256 BYTES PER SECTOR / 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 DSGO= 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 NL7775= CLA CLL CMA RTL /LOAD AC WITH 7775 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 (2:FLOPPY #1, 3:FLOPPY #2). / 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-40 FOR OS/8; 640 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 0 0 1 0 / 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. / 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! -2 /TWO HANDLERS IN THIS GROUP DEVICE FLOP DEVICE F0 4640 /DCB WORD F0&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY DEVICE FLOP DEVICE F1 4640 /DCB WORD F1&177 /ENTRY POINT WORD ZBLOCK 2 /BUILD WANTS IT THIS WAY PAGE /ACTUAL HANDLER CODE GOES HERE CALLPC, 0 /MOVED CALLING ADDRESS COMPTR, TABLE-LOC8 /COMMAND TABLE POINTER ADJUSTMENT FACTOR TSTKBD, CLA+400 /CLEAN UP;ALSO CONSTANT 7600 KSF /FLAG UP? JMP TSTDSK /NO, KEEP TESTING KRS /YES, READ IT IN AND L177 /JUST SEVEN-BIT DCA LOC8 /SAVE IT NL7775 /-<^C> TAD LOC8 /COMPARE TO LATEST CHARACTER SZA CLA /SKIP IF IT MATCHES JMP TSTDSK /ELSE JUST IGNORE IT LCIDF, CIF CDF 00 /BACK TO FIELD 0 JMP I TSTKBD /BACK TO OS/8 MONITOR / COMMAND TABLE. TABLE, COMMEND-TABLE /LENGTH OF WHOLE TABLE INCLUDING THIS WORD COMTYPE,0 /COMMAND TYPE RWCOM, 0 /0010 IF READING, 0012 IF WRITING DRVUNT, 0 /0002 IF FLOPPY DRIVE 0, 0003 IF FLOPPY DRIVE 1 DCONTRL,0202 /CONTROL WORD SECTHI, 0 /HIGH-ORDER DISK ADDRESS SECTMD, 0 /MIDDLE DISK ADDRESS (SIX BITS) SECTLO, 0 /LOW-ORDER DISK ADDRESS (SIX BITS) SCTCNT, 0 /SECTOR COUNTER (1-40) TRFLD, 0 /BANK (0000) AND TRANSFER FIELD (0-7) TRADRHI,0 /HIGH-ORDER TRANSFER ADDRESS (SIX BITS) TRADRLO,0 /LOW-ORDER TRANSFER ADDRESS (SIX BITS) COMMEND=. /END OF COMMAND TABLE ZBLOCK 6 /EMPTY SPACE TO MAINTAIN ALIGNMENT F0, VERSION /FLOPPY 0 ENTRY POINT CLA /CLEAN UP TAD F0 /GET OUR CALLER JMS COMMON /CONTINUE THERE F1, VERSION /FLOPPY 1 ENTRY POINT CLA /CLEAN UP TAD F1 /GET OUR CALLER JMS COMMON /CONTINUE THERE / COMES HERE WITH CALLING ADDRESS IN AC. COMMON, 0 /COMMON ROUTINE DCA CALLPC /SAVE CALLING ADDRESS DSHI /LOAD HIGH-ORDER COMMAND ADDRESS RDF /GET CALLING FIELD TAD LCIDF /MAKE INTO CIF CDF RETURN INSTRUCTION DCA CALLRET /SAVE FOR EXIT LATER TAD COMMON /XXX4 IF 0, XXX0 IF 1 AND L4 /4 IF 0, 0 IF 1 SNA CLA /TEMP FIX IAC /1=DRIVE 1 1 0= DRIVE 2 IAC IAC DCA DRVUNT /STASH DRIVE UNIT NL4000 /SET READ/WRITE MASK AND I CALLPC /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 CALLPC /GET PAGE BITS (OTHERS DON'T MATTER) AND K3700 /EXTRACT PAGE BITS SNA /SKIP IF NOT MAXIMUM NL4000 /ELSE USE 40 SECTORS VALUE BSW /JUSTIFY DCA SCTCNT /STASH SECTOR COUNT TAD I CALLPC /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 CALLPC /BUMP TO TRANSFER ADDRESS TAD I CALLPC /GET TRANSFER ADDRESS BSW /PUT HIGH-ORDER INTO BITS[6-11] DCA TRADRHI /STASH HIGH-ORDER TRANSFER ADDRESS TAD I CALLPC /GET TRANSFER ADDRESS AGAIN DCA TRADRLO /STASH LOW-ORDER TRANSFER ADDRESS ISZ CALLPC /BUMP TO RECORD NUMBER CLL TAD I CALLPC /GET RECORD NUMBER RAL BSW /PUT HIGH-ORDER INTO BITS[6-11] DCA SECTMD /STASH MIDDLE SECTOR ADDRESS CLL TAD I CALLPC /GET RECORD NUMBER RAL DCA SECTLO /STASH LOW-ORDER SECTOR ADDRESS ISZ CALLPC /BUMP TO ERROR RETURN JMS LOC8 /FIND OUT WHERE WE ARE LOADED LOC8, 0 /WILL BE OUR OWN PC TAD LOC8 /GET OUR PC TAD COMPTR /ADJUST TO COMMAND TABLE DCA SAVE /SAVE ACC CLA CLL CML RAR /AC=4000 7014 /AC=0004 IF RUNNING ON SBC CIA TAD L4 SNA CLA /ARE WE ON SBC JMP .+3 /YES TAD SAVE /NO MUST BE MDC JMP MDC RIF /WHERE ARE WE TAD LCDF /BUILD CDF INST DCA .+1 /STORE FOR EXECUTION 0 /STUFFED CLA CLL CML RTL /ACC=2 TAD SAVE /ADJUST TABLE POINTER FOR SBC 6206 /PREQ JMP ERR /ERROR RETURN CLA CLL / JMP GOOD /NORM RET MDC, DSGO /LOAD LOW-ORDER COMMAND ADDRESS AND GO TSTDSK, DSSF /FLAG U? JMP TSTKBD /NO, TRY KEYBOARD DSCD /YES, CLEAR THE FLAG L100, 100 L177, 177 L4, 4 L70, 70 DSRS /GET RETURNED STATUS SZA CLA /SKIP IF ALL IS OK ERR, NL4000 SMA /SKIP IF ERROR GOOD, ISZ CALLPC /BUMP RETURN CALLRET,0 /WILL BE CIF CDF RETURN INSTRUCTION JMP I CALLPC /RETURN TO CALLER LCDF, 6201 /CDF INST SAVE, 0 K3700, 3700 $$$$