home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / cpm / gendoc / ccsbios.fix < prev    next >
Encoding:
Text File  |  1983-09-09  |  2.5 KB  |  97 lines

  1. ; FROM: LEWIS MOSELEY, JR.      11/8/81
  2. ;
  3. ; TO:    CCS DISK CONTROLLER USERS
  4. ;
  5. ; SUBJECT: FIX FOR SPURIOUS SELECT ERROR PROBLEM
  6. ;
  7. ; Most users of the CCS Disk System (and the CCS Deblocking
  8. ; BIOS known as CCBIOS.ASM) have run into the problem of
  9. ; receiving spurious "BDOS ERROR ON A: SELECT" messages, when
  10. ; drive A: is a legitimate drive and should not give the error.
  11. ; After putting up with ths for a year or so, I decided to fix
  12. ; it.  Some experimemtation defined the problem a little more
  13. ; specifically:  the spurious SELECT error occurred when:
  14. ;   1.  a drive had been running a double-density disk, and
  15. ;   2.  a single-density disk was inserted, and
  16. ;   3.  a call to the BDOS RESET function was made.  (Note: RESETs
  17. ;       result in the error; REBOOTs do not.), and
  18. ;   4.  the drive was re-selected
  19. ;
  20. ; So, the response to the RESET command failed to recognize the
  21. ; change from double- to single-density.  The problem was traced
  22. ; to the IDRD subroutine, and the code was added to correct the
  23. ; problem.  The following IDRD subroutine should be inserted in
  24. ; place of the existing one:
  25. ;
  26. ;
  27. IDRD5:    MVI    B,STEPI    ;BUILD A STEP-IN COMMAND
  28.     CALL    EOJA
  29. IDRD:    LHLD    LUNIT
  30.     MOV    A,H    ;GET THE CUNIT VALUE
  31.     CMP    L    ;SEE IF SAME AS LUNIT
  32.     RZ        ;RETURN IF SO
  33. IDRD1:
  34. ;
  35. ;MODIFICATION LM6 OF 11/8/81, PART 1 (ADDITION TO EXISTING CODE)
  36. ;
  37. ;TRY EACH DENSITY TWICE BEFORE GIVING UP
  38. ;
  39.     LXI    H,IDTRY
  40.     MVI    M,3        ;TWO DENSITIES, TWICE EACH
  41.                 ;(AND, YES, 3 IS CORRECT)
  42. IDRD0:                ;LOOP REENTRY POINT
  43. ;
  44. ;END LM6 MODS, PART 1
  45. ;
  46.     MVI    C,80H    ;SET THE AUTO-WAIT BIT
  47.     CALL    SETUP
  48.     PUSH    H    ;SAVE POINTER
  49.     LXI    H,HLWAIT  ;WAIT FOR HEADS TO SETTLE
  50. IDRD3:    DCX    H
  51.     MOV    A,H
  52.     ORA    A
  53.     JNZ    IDRD3
  54.     LXI    H,IDSV    ;SET UP TO READ ADDRESS
  55.     MVI    B,2    ;SET UP TO READ 6(8) BYTES OF DATA
  56.     MVI    A,RDADD    ;READ ADDRESS COMMAND
  57.     DI
  58.     CALL    RDAT
  59.     POP    H    ;RESTORE POINTER
  60.     JZ    IDRD2    ;JUMP IF GOOD READ
  61. ;
  62. ;MODIFICATION LM6, PART 2, OF 11/81  (REPLACES EXISTING CODE)
  63. ;
  64.     LDA    IDTRY
  65.     DCR    A        ;TRIED 4 TIMES YET?
  66.     RM            ;ERROR RETURN IF SO, Z-FLAG RESET
  67.     STA    IDTRY        ;ELSE PUT BACK COUNTER
  68.     MVI    A,40H
  69.     XRA    M        ;TOGGLE DENSITY BIT (TO REG A)
  70.     MOV    M,A        ;PUT IT BACK IN MEMORY
  71.     JMP    IDRD0        ;AND TRY AGAIN
  72. ;
  73. ;END OF LM6, PART 2
  74. ;
  75. IDRD2:    IN    DSCTR    ;GET THE TRACK NUMBER
  76.     OUT    DTRCK    ;SET THE TRACK REGISTER
  77.     CPI    2    ;INSURE NOT ON TRACK 0 OR 1
  78.     JC    IDRD5    ;JUMP IF SO
  79.     MOV    A,M    ;REGET SELBITS
  80.     STA    LUNIT    ;UPDATE LAST USED UNIT
  81.     STA    CUNIT
  82.     INX    H    ;SET THE SECTOR SIZE
  83.     LDA    IDSV+3
  84.     MOV    M,A
  85.     CMP    A    ;SET Z-FLAG FOR GOOD RETURN
  86.     RET
  87. ;
  88. ;
  89. ;
  90. ;
  91. ;
  92. ; NOTE: IN THE DATA AREA AT THE END OF THE BIOS, ADD:
  93. ;
  94. IDTRY:    DS    1        ;TRIES TO LOG IN DISK
  95. ;
  96.     END OF MODS
  97.