; FROM: LEWIS MOSELEY, JR. 11/8/81 ; ; TO: CCS DISK CONTROLLER USERS ; ; SUBJECT: FIX FOR SPURIOUS SELECT ERROR PROBLEM ; ; Most users of the CCS Disk System (and the CCS Deblocking ; BIOS known as CCBIOS.ASM) have run into the problem of ; receiving spurious "BDOS ERROR ON A: SELECT" messages, when ; drive A: is a legitimate drive and should not give the error. ; After putting up with ths for a year or so, I decided to fix ; it. Some experimemtation defined the problem a little more ; specifically: the spurious SELECT error occurred when: ; 1. a drive had been running a double-density disk, and ; 2. a single-density disk was inserted, and ; 3. a call to the BDOS RESET function was made. (Note: RESETs ; result in the error; REBOOTs do not.), and ; 4. the drive was re-selected ; ; So, the response to the RESET command failed to recognize the ; change from double- to single-density. The problem was traced ; to the IDRD subroutine, and the code was added to correct the ; problem. The following IDRD subroutine should be inserted in ; place of the existing one: ; ; IDRD5: MVI B,STEPI ;BUILD A STEP-IN COMMAND CALL EOJA IDRD: LHLD LUNIT MOV A,H ;GET THE CUNIT VALUE CMP L ;SEE IF SAME AS LUNIT RZ ;RETURN IF SO IDRD1: ; ;MODIFICATION LM6 OF 11/8/81, PART 1 (ADDITION TO EXISTING CODE) ; ;TRY EACH DENSITY TWICE BEFORE GIVING UP ; LXI H,IDTRY MVI M,3 ;TWO DENSITIES, TWICE EACH ;(AND, YES, 3 IS CORRECT) IDRD0: ;LOOP REENTRY POINT ; ;END LM6 MODS, PART 1 ; MVI C,80H ;SET THE AUTO-WAIT BIT CALL SETUP PUSH H ;SAVE POINTER LXI H,HLWAIT ;WAIT FOR HEADS TO SETTLE IDRD3: DCX H MOV A,H ORA A JNZ IDRD3 LXI H,IDSV ;SET UP TO READ ADDRESS MVI B,2 ;SET UP TO READ 6(8) BYTES OF DATA MVI A,RDADD ;READ ADDRESS COMMAND DI CALL RDAT POP H ;RESTORE POINTER JZ IDRD2 ;JUMP IF GOOD READ ; ;MODIFICATION LM6, PART 2, OF 11/81 (REPLACES EXISTING CODE) ; LDA IDTRY DCR A ;TRIED 4 TIMES YET? RM ;ERROR RETURN IF SO, Z-FLAG RESET STA IDTRY ;ELSE PUT BACK COUNTER MVI A,40H XRA M ;TOGGLE DENSITY BIT (TO REG A) MOV M,A ;PUT IT BACK IN MEMORY JMP IDRD0 ;AND TRY AGAIN ; ;END OF LM6, PART 2 ; IDRD2: IN DSCTR ;GET THE TRACK NUMBER OUT DTRCK ;SET THE TRACK REGISTER CPI 2 ;INSURE NOT ON TRACK 0 OR 1 JC IDRD5 ;JUMP IF SO MOV A,M ;REGET SELBITS STA LUNIT ;UPDATE LAST USED UNIT STA CUNIT INX H ;SET THE SECTOR SIZE LDA IDSV+3 MOV M,A CMP A ;SET Z-FLAG FOR GOOD RETURN RET ; ; ; ; ; ; NOTE: IN THE DATA AREA AT THE END OF THE BIOS, ADD: ; IDTRY: DS 1 ;TRIES TO LOG IN DISK ; END OF MODS