/ UNSCREW WIERD FLOPPIES / DEFINITIONS. CAM= 7621 /CLEAR AC, MQ MQA= 7501 /OR MQ INTO AC MQL= 7421 /LOAD AC INTO MQ, CLEAR AC SWP= 7521 /SWAP AC, MQ / ADDITIONAL EAE DEFINITIONS FOR USE WITH REAL KE-8/E HARDWARE. DAD= 7443 /DOUBLE-PRECISION ADD DCM= 7575 /DOUBLE-PRECISION TWO'S COMPLEMENT DLD= 7663 /DOUBLE-PRECISION LOAD DST= 7445 /DOUBLE-PRECISION STORE DVI= 7407 /DIVIDE MUY= 7405 /MULTIPLY SHL= 7413 /SHIFT LEFT SWAB= 7431 /FORCE MODE "B" EAE / RX8B EQUATED SYMBOLS. DEVCOD= 75^10+6000 /SKELETON IOT CODE OF DISK LCD= DEVCOD+1 /LOAD COMMAND REGISTER XDR= DEVCOD+2 /TRANSFER DATA REGISTER STR= DEVCOD+3 /SKIP ON, CLEAR TRANSFER FLAG SER= DEVCOD+4 /SKIP ON, CLEAR ERROR FLAG SDN= DEVCOD+5 /SKIP ON, CLEAR DONE FLAG INTR= DEVCOD+6 /INTERRUPT ENABLE/DISABLE PER AC[11] INIT= DEVCOD+7 /INITIALIZE CONTROLLER, RECALIBRATE DRIVES PAGE 0 /START AT THE BEGINNING PTR, .-. /BUFFER POINTER PTRTMP, .-. /TEMPORARY SCTCNT, .-. /SECTOR COUNTER SECT, .-. /PHYSICAL SECTOR SECTOR, .-. /LOGICAL SECTOR TEMP, .-. /TEMPORARY TRACK, .-. /PHYSICAL TRACK WRDCNT, .-. /WORD COUNTER *20 TRANS, .-. /TRANSFER A WORD ROUTINE STR /FLAG UP? JMP .-1 /NO, WAIT FOR IT XDR /YES, DO THE TRANSFER JMP I TRANS /RETURN *200 /AS USUAL START, CAF /CLEAN UP TFL /SET TTY: FLAG SWAB /SET MODE "B" NOP /JUST IN CASE SER /ANY ERRORS? SDN /NO, DONE? JMP .-2 /NO, WAIT FOR IT CAM /CLEAN UP DCA SECTOR /CLEAR LOGICAL SECTOR TAD [-3670] /SETUP THE DCA SCTCNT /SECTOR COUNTER DCA BLOCK /CLEAR OUTPUT BLOCK TAD [BUFF] /RESET THE DCA PTR /BUFFER POINTER TAD [SNDINIT] /SETUP THE DCA SNDXIT /CO-ROUTINE SCTLUP, JMS GETSECTOR /GET NEXT SECTOR TAD [26] /READ SECTOR ON UNIT ONE LCD /LOAD COMMAND TAD SECT /GET SECTOR JMS TRANS /SEND IT CLA /CLEAN UP TAD TRACK /GET TRACK JMS TRANS /SEND IT CLA /CLEAN UP SDN /DONE YET? JMP .-1 /NO, WAIT FOR IT SER /ANY ERRORS? SKP /SKIP IF NOT HLT /BARF TAD [102] /GET 8-BIT READ VALUE LCD /LOAD COMMAND TAD [-200] /SETUP THE DCA WRDCNT /WORD COUNT WRDLUP, JMS TRANS /GET A BYTE AND [377] /JUST 8-BIT JMS SEND /SEND IT ISZ WRDCNT /DONE ALL YET? JMP WRDLUP /NO, KEEP GOING SDN /FLAG UP? JMP .-1 /NO, WAIT FOR IT SER /ANY ERRORS? SKP /SKIP IF NOT HLT /BARF! ISZ SECTOR /BUMP LOGICAL SECTOR ISZ SCTCNT /DONE ALL YET? JMP SCTLUP /NO, KEEP GOING JMP I [7600] /YES, GOODBYE GETSECT,.-. /GET NEXT SECTOR ROUTINE CLA /CLEAN UP TAD SECTOR /GET LOGICAL SECTOR MQL DVI;[15] /DIVIDE BY 13 DCA SECT /SAVE REMAINDER MQA /GET QUOTIENT CLL RAR /MOVE LOW-ORDER QUOTIENT BIT TO LINK DCA TRACK /SAVE AS TRACK (ORIGIN 0) TAD SECT /GET REMAINDER SZL /ODD? IAC /YES, FIX IT FOR CML RAL /TWO-WAY INTERLEAVE DCA SECT /SAVE SECTOR TAD TRACK /GET THE TRACK MQL MUY;[6] /TIMES SIX DVI; [32] /DIVIDE BY 26 TAD SECT /ADD STAGGER FACTOR TO SECTOR MQL DVI;[32] /DIVIDE BY 26 SNA /SKIP IF VALID TAD [32] /ELSE MAKE IT SO DCA SECT /SAVE AS PHYSICAL SECTOR ISZ TRACK /USE ORIGIN ONE TRACK JMP I GETSECTOR /RETURN SEND, .-. /SEND ROUTINE DCA TEMP /SAVE PASSED VALUE JMP I SNDXIT /GO WHERE YOU SHOULD SNDXIT, SNDINIT /EXIT ROUTINE JMP I SEND /RETURN SNDLUP, JMS SNDXIT /GO AWAY SNDINIT,TAD TEMP /GET FIRST BYTE DCA I PTR /STORE IT TAD PTR /GET POINTER VALUE DCA PTRTMP /SAVE IT ISZ PTR /BUMP TO NEXT JMS SNDXIT /GO AWAY TAD TEMP /GET SECOND BYTE DCA I PTR /STORE IT JMS SNDXIT /GO AWAY TAD TEMP /GET THIRD BYTE RTL;RTL /MOVE OVER AND [7400] /JUST ORIGINAL NYBBLE TAD I PTRTMP /GET ORIGINAL BYTE DCA I PTRTMP /STORE ALL BACK TAD TEMP /GET THIRD BYTE BSW;RTL /MOVE OVER AND [7400] /JUST ORIGINAL NYBBLE TAD I PTR /GET ORIGINAL BYTE DCA I PTR /STORE ALL BACK ISZ PTR /BUMP TO NEXT TAD PTR /GET THE POINTER TAD [-BUFF-400] /COMPARE TO LIMITING VALUE SZA CLA /SKIP IF NOT AT END JMP SNDLUP /ELSE JUST KEEP GOING JMS I [7640] /CALL I/O ROUTINES BUFF /BUFFER ADDRESS 2^100+1+4000 /FUNCTION BLOCK, .-. /BLOCK ISZ BLOCK /BUMP ISZ BLOCK /BLOCK TWICE TAD [BUFF] /RESET THE DCA PTR /BUFFER POINTER JMP SNDLUP /GO BACK FOR MORE PAGE BUFF= . /I/O BUFFER ZBLOCK 400 /I/O BUFFER HERE