home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / firmware / drives / new / 1541 / 1541C-to-1541-II.txt < prev    next >
Text File  |  2003-06-06  |  11KB  |  300 lines

  1. dOES THE dos-rom OF THE 1541-ii DRIVE RECOGNISE 1541 MECHANICS SUPPORTED
  2. WITH A TRACK 0 LIGHT BARRIER TO MAKE THE DRIVE "RATTLE FREE"?
  3.  
  4. a LITTLE WRITEUP BY wOLFGANG mOSER, 2003-03-01
  5. 2ND CORRECTED EDITION, 2003-03-03
  6. 3RD CORRECTED EDITION, 2003-06-06
  7.  
  8.  
  9. aS i CHECKED WITH A 1541c DRIVE HARDWARE, THE 1541ii rom DOESN'T CONTAIN
  10. THE PROPER ROUTINES FOR RECOGNISING THE TRACK 0 SENSOR.
  11.  
  12. i FIRST SUSPECTED THE 1541-ii rom, THAT IT DOES CONTAIN THE
  13. ROUTINES NEEDED, BECAUSE OF THE NEARLY IDENTICAL SERIAL NUMBERS
  14. OF THE BOTH romS:
  15.  
  16. 1541c-251968-02
  17. 1541-ii-251968-03
  18.  
  19.  
  20. bUT IT DOESN'T. sO WHAT ARE THE DIFFERENCIES OF THE romS REGARDING THE
  21. TRACK 0 LIGHT BARRIER SENSOR. dISASSEMBLING THE romS FOR THE 1541c AND
  22. 1541-ii DRIVES AND CHECKING MAINLY FOR THE DIFFERENCIES REGARDING PORT a
  23. OF THE via AT 0X1800...0X180f (PORT a MEANS: 0X1801, 0X1803 AND 0X180f):
  24.  
  25. EGREP '180(1{$7c}3{$7c}f)' *.D65DIS.ASM
  26.  
  27. 1541-ii.251968-03.D65DIS.ASM:              l1801 = $1801
  28. 1541-ii.251968-03.D65DIS.ASM:              l1803 = $1803
  29. 1541-ii.251968-03.D65DIS.ASM:e853 ad 01 18   lda l1801
  30. 1541-ii.251968-03.D65DIS.ASM:ff10 8e 03 18   stx l1803
  31. 1541-ii.251968-03.D65DIS.ASM:ff50 2c 01 18   bit l1801
  32. 1541c_.251968-02.D65DIS.ASM:              l1801 = $1801
  33. 1541c_.251968-02.D65DIS.ASM:              l1803 = $1803
  34. 1541c_.251968-02.D65DIS.ASM:              l180f = $180f
  35. 1541c_.251968-02.D65DIS.ASM:e853 ad 01 18   lda l1801
  36. 1541c_.251968-02.D65DIS.ASM:ff10 8e 03 18   stx l1803
  37. 1541c_.251968-02.D65DIS.ASM:ff3e ad 0f 18   lda l180f
  38. 1541c_.251968-02.D65DIS.ASM:ff41 cd 0f 18   cmp l180f
  39. 1541c_.251968-02.D65DIS.ASM:ffa6 2c 01 18   bit l1801
  40.  
  41. aT 0Xe853 AND 0Xff10 BOTH romS ARE IDENTICAL:
  42.  
  43. ; cLEAR irq-fLAG FOR PORT a, atn_iN AT ca1
  44. e853 ad 01 18   lda l1801
  45. e856 a9 01      lda #$1
  46. e858 85 7c      sta l7c
  47. e85a 60         rts
  48.  
  49. ; via PORT INITIALISATION, CALLED FROM eaa0
  50. ff10 8e 03 18   stx l1803
  51. ff13 a9 02      lda #$2
  52. ff15 8d 00 18   sta l1800
  53. ff18 a9 1a      lda #$1a
  54. ff1a 8d 02 18   sta l1802
  55. ff1d 4c a7 ea   jmp leaa7
  56.  
  57. tHERE'S A LITTLE DIFFERENCE WITH THE rESET ROUTINE, WHICH CALLS THE PORT
  58. INITIALISATION ABOVE:
  59.  
  60. ; rESET ROUTINE, CALLS PORT INITIALISATION
  61. eaa0 78         sei
  62. eaa1 d8         cld
  63.        .IF __1541c__
  64. eaa2 a2 fe      ldx #$fe; SET pa0 AS INPUT, pa1.7 OUTPUT
  65.        .ELSE
  66. eaa2 a2 ff      ldx #$ff; SET paX AS OUTPUT
  67.        .ENDIF
  68. eaa4 4c 10 ff   jmp lff10; INIT via PORTS
  69.  
  70.  
  71. tHE "bit l1801" CAN BE FOUND ON BOTH romS, THEY ARE A PATCH FOR
  72. CORRECTLY CLEARING THE irq-fLAG FOR PORT a, THAT SIGNALS AN atn_iN AT
  73. THE HANDSHAKE INPUT ca1 OF PORT a:
  74.  
  75. 1541c:
  76. ffa6 2c 01 18   bit l1801
  77. ffa9 4c 5b e8   jmp le85b
  78.  
  79. 1541ii:
  80. ff50 2c 01 18   bit l1801
  81. ff53 4c 5b e8   jmp le85b
  82.  
  83.  
  84. bUT THERE ARE TWO REMAINING CALLS ("lda l180f" AND "cmp l180f") IN THE
  85. 1541c-rom, THAT CANNOT BE FOUND WITHIN THE 1541-ii rom:
  86.  
  87.  
  88. ; ROUTINE, WHICH CALLS THE FOLLOWING ONE:
  89. fa2e a5 4a      lda l4a; MOVE INWARDS
  90. fa30 10 31      bpl lfa63; IF YES, JUMP
  91. fa32          lfa32:;    NO, MOVE TOWARDS TRACK 0
  92. fa32 4c 36 ff   jmp lff36; CHECK TRACK 0 SENSOR
  93. fa35          lfa35:
  94. fa35 ea         nop
  95. fa36 ea         nop
  96. fa37 ea         nop
  97. fa38          lfa38:
  98. fa38 4c 69 fa   jmp lfa69; MOVE TRACK
  99.  
  100. ; ADDED PATCH JUST BEFORE THE ACTUAL "MOVE HEAD" ROUTINE, WHICH FIRST
  101. ; CHECKS THE TRACK 0 LIGHT BARRIER AND PREVENTS MOVES TO THE OUTER
  102. ; TRACKS, IF A STABLE TRACK-0-CONDITION IS REACHED
  103. ff36 8a         txa
  104. ff37 48         pha
  105. ff38 98         tya
  106. ff39 48         pha
  107. ff3a a2 01      ldx #$1
  108. ff3c          lff3c:
  109. ff3c a0 64      ldy #$64; WAIT 100 LOOPS AT MAXIMUM
  110. ff3e          lff3e:
  111. ff3e ad 0f 18   lda l180f; LOAD PORT a
  112. ff41 cd 0f 18   cmp l180f; CHECK IF BITS ARE STABLE
  113. ff44 d0 20      bne lff66; IF UNSTABLE, JUMP (DO MOVE)
  114. ff46          lff46:
  115. ff46 88         dey; LOOP DOWN
  116. ff47 d0 f5      bne lff3e; AND CHECK AGAIN
  117. ff49          lff49:
  118. ff49 ca         dex; LOOP DOWN
  119. ff4a d0 f0      bne lff3c; AND CHECK AGAIN
  120. ff4c          lff4c:
  121. ff4c 29 01      and #$1; ISOLATE BIT 0/pa0
  122. ff4e f0 16      beq lff66; IF LOW (TRACKS 1..4X), JUMP
  123. ff50          lff50:
  124. ff50 ad 00 1c   lda l1c00
  125. ff53 29 03      and #$3
  126. ff55 d0 0f      bne lff66; MOVE HEAD
  127. ff57          lff57:
  128. ff57 a5 7b      lda l7b
  129. ff59 d0 0b      bne lff66; MOVE HEAD
  130. ff5b          lff5b:
  131. ff5b 68         pla
  132. ff5c a8         tay
  133. ff5d 68         pla
  134. ff5e aa         tax
  135. ff5f a9 00      lda #$0; DON'T MOVE THE HEAD ONE STEP
  136. ff61 85 4a      sta l4a; MORE OUTERWARDS, JUMP BEHIND
  137. ff63 4c be fa   jmp lfabe; THE "MOVE HEAD" ROUTINE
  138. ff66          lff66:
  139. ff66 68         pla
  140. ff67 a8         tay
  141. ff68 68         pla
  142. ff69 aa         tax
  143. ff6a e6 4a      inc l4a
  144. ff6c ae 00 1c   ldx l1c00
  145. ff6f ca         dex
  146. ff70 4c 38 fa   jmp lfa38; JUMP TO "MOVE HEAD" ROUTINE
  147.  
  148.  
  149. cOMPARING THE rom OF THE 1541c ADDITIONALLY WITH THE rom OF THE 1571
  150. DRIVE SHOWS, THAT THE "1541 dos rom COMPATIBILITY PART"
  151. (0Xc000...0Xffff) CONTAINS ANOTHER, SLIGHTLY CHANGED ROUTINE FOR A
  152. PROPER TRACK 0 LIGHT BARRIER CHECK:
  153.  
  154. ff45 98         tya
  155. ff46 48         pha
  156. ff47 a0 64      ldy #$64; WAIT 100 LOOPS AT MAXIMUM
  157. ff49          lff49:
  158. ff49 ad 0f 18   lda l180f; LOAD PORT a
  159. ff4c 6a         ror a; PUT bIT 0 INTO THE cARRY
  160. ff4d 08         php; SAVE STATUS
  161. ff4e ad 0f 18   lda l180f; LOAD PART a AGAIN
  162. ff51 6a         ror a; AND MOVE bIT 0
  163. ff52 6a         ror a; AS SIGN (BIT 7)
  164. ff53 28         plp; GET OLD STATUS
  165. ff54 29 80      and #$80; ISOLATE SIGN
  166. ff56 90 04      bcc lff5c; JUMP, IF FIRST READ =0
  167. ff58          lff58:
  168. ff58 10 1d      bpl lff77; MOVE HEAD (TRACK != 0)
  169. ff5a          lff5a:; IF BOTH BITS WERE 1,
  170. ff5a 30 02      bmi lff5e; SIGNAL IS STABLE
  171. ff5c          lff5c:
  172. ff5c 30 19      bmi lff77; MOVE HEAD, IF SECOND READ =1
  173. ff5e          lff5e:
  174. ff5e 88         dey; LOOP DOWN AND CHECK AGAIN
  175. ff5f d0 e8      bne lff49; pa0 FOR STABILITY
  176. ff61          lff61:
  177. ff61 b0 14      bcs lff77; MOVE HEAD, IF pa0 IS STABLE 1
  178. ff63          lff63:
  179. ff63 ad 00 1c   lda l1c00; PROBABLY PREVENT HEAD MOVE
  180. ff66 29 03      and #$3
  181. ff68 d0 0d      bne lff77; MOVE HEAD
  182. ff6a          lff6a:
  183. ff6a a5 7b      lda l7b
  184. ff6c d0 09      bne lff77; MOVE HEAD
  185. ff6e          lff6e:
  186. ff6e 68         pla; pa0 IS STABLE LOW, FURTHER
  187. ff6f a8         tay; CHECKS WERE DONE.
  188. ff70 a9 00      lda #$0; DON'T MOVE THE HEAD ONE STEP
  189. ff72 85 4a      sta l4a; MORE OUTERWARDS, JUMP BEHIND
  190. ff74 4c be fa   jmp lfabe; THE "MOVE HEAD" ROUTINE
  191. ff77          lff77:; 
  192. ff77 68         pla
  193. ff78 a8         tay
  194. ff79 e6 4a      inc l4a
  195. ff7b ae 00 1c   ldx l1c00
  196. ff7e ca         dex
  197. ff7f 4c 38 fa   jmp lfa38; JUMP TO "MOVE HEAD" ROUTINE
  198.  
  199. tAKE NOTE, THAT THE 1571 ROUTINE PREVENTS AN OUTERWARDS HEAD MOVE, IF
  200. pa0 IS AT A STABLE LOW STATE. tHE 1541c ROUTINE IN CONTRAST PREVENTS THE
  201. HEAD MOVE, IF pa0 IS AT A STABLE HIGH. yOU CAN FIND THE REASON FOR THIS
  202. BEHAVIOUR AT THE ELECTRONICS LEVEL. tHE LIGHT BARRIER SIGNAL IS INVERTED
  203. TWICE (2X 74ls04 INVERTER GATES) ON THE BOARD OF THE 1541c, WHILE IT IS
  204. ONLY INVERTED ONCE (1X 74ls14) WITH THE 1571.
  205.  
  206.  
  207. bOTH ROUTINES ARE NOT OPTIMAL IN MY PERSONAL OPINION, BECAUSE THEY DON'T
  208. WORK, IF THERE'S NO LIGHT BARRIER CONNECTED TO THE PORT PIN pa0. tHAT'S
  209. THE REASON, WHY THERE'S AN EXTRA JUMPER ON MOST OF THE 1541c BOARDS
  210. (jp3), WHICH HAS TO BE OPENED TO GET THE TRACK 0 LIGHT BARRIER GO WORK.
  211. tHAT MAY ALSO BE THE REASON, WHY PIN 2 OF PORT a OF THE via IS MOSTLY
  212. CONNECTED TO GROUND ON MOST OF THE 1541-ii MAINBOARDS. pERHAPS EARLY
  213. VERSIONS WERE EQUIPPED WITH A 1541c dos rom, SO THAT THIS "FIX" WOULD BE
  214. NEEDED.
  215.  
  216. bUT _WHY_ DOES THE rom NOT WORK, IF THE LIGHT BARRIER IS UNCONNECED?
  217.  
  218. lET'S LOOK AT THE ELECTRONICS FIRST, FIGURE 1 SHOWS THE SIGNIFICANT
  219. PARTS OUT OF THE SCHEMATICS OF THE 1541c MAINBOARD. yOU CAN SEE, THAT
  220. THE PHOTOACTIVE TRANSISTOR OF THE LIGHT BARRIER IS MOUNTED EXTERNALLY,
  221. WHILE THE PULLUP AND THE INVERTERS ARE ON THE 1541c BOARD ITSELF.
  222.  
  223.        +5v
  224.         {$7c}
  225.         {$7c}
  226.        +++
  227.        {$7c} {$7c} 47KoHM
  228.        {$7c} {$7c}                              {$7e}{$7e}{$7e}{$7e}{$7e}
  229.        {$7c} {$7c}                               {$7c}
  230.        +++                               {$7c}
  231.         {$7c}        +---+      +---+        {$7c}
  232.         +--------{$7c} 1 {$7c}o-----{$7c} 1 {$7c}o-------{$7c} pa0
  233.         {$7c}        +---+      +---+        {$7c}
  234.         {$7e}{$7e}{$7e}{$7e}{$7e}                             {$7c}
  235.         {$7e}{$7c}{$7e}{$7e}{$7e}                            {$7e}{$7e}{$7e}{$7e}{$7e}
  236.          {$7c}
  237.  \\>  {$7c} /
  238.   \>  {$7c}/
  239.    >  {$7c}\
  240.       {$7c} \
  241.          {$7c}
  242.          {$7c}
  243.        =====
  244. fIG. 1: sIGNAL PREPARATION OF THE 1541c'S TRACK 0 LIGHT BARRIER
  245.  
  246. tHE PHOTOACTIVE TRANSISTOR IS CONNECTED "oPEN cOLLECTOR", THAT MEANS, IT
  247. CAN ONLY PRODUCE AN ACTIVE LOW SIGNAL. wHENEVER LIGHT FALLS ONTO THE
  248. TRANSISTOR, IT PULLS THE OUPUT LINE TO LOW. iF THE LIGHT BEAM IS BROKEN
  249. (THE HEAD REACHED TRACK 0), THE OUTPUTS BECOMES SOMETHING LIKE AN OPEN
  250. STATE LIKE BEEING UNCONNECTED. tO GET THE INVERTER INPUT SIGNAL HIGH IN
  251. THIS SITUATION WE NEED THE PULLUP RESITOR.
  252.  
  253.  
  254. yOU CAN SEE NOW, WHAT HAPPENS, IF THE LIGHT BARRIER IS NOT CONNECTED TO
  255. THE BOARD. tHE DESIRED INPUT LINE IS SIMPLY OPEN, THE SAME AS IF THE
  256. TRANSISTOR BECOMES OPEN, BECAUSE THE LIGHT BEAM IS BROKEN. tHE PULLUP
  257. RESISTOR NOW PUTS THE INPUT SIGNAL TO A HIGH, WHICH "SAYS" TO pa0, THAT
  258. TRACK 0 IS REACHED BY THE HEAD.
  259.  
  260. rEGARDLESS IF THE LIGHT BEAM IS BROKEN (TRACK 0 REACHED) OR THE WHOLE
  261. LIGHT BARRIER IS NOT MOUNTED OR NOT CONNECTED TO THE BOARD, IT BOTH
  262. MEANS THE SAME: "tRACK 0 REACHED".
  263.  
  264. aND IF THIS CONDITION BECOMES TRUE, THE rom ROUTINES PREVENTS HEAD MOVES
  265. TO THE OUTERMOST TRACKS. tHAT'S THE REASON, WHY THE HEAD MOVES INWARDS
  266. ONLY, IF YOU SWITCH A 1541c ON AND WANT TO ACCESS IT.
  267.  
  268.  
  269. a SOLUTION MAY BE A MORE INTELLIGENT TRACK 0 CHECK ROUTINE, THAT ALSO
  270. MAKES A PROOF, THAT THE TRACK 0 LIGHT BARRIER IS WORKING CORRECTLY. tHAT
  271. MEANS, THAT SUCH A ROUTINE HAS TO CHECK, THAT THE pa0 INPUT SIGNAL
  272. BECOMES LOW SOME TIME, ESPECIALLY, WHEN THE HEAD IS MOVED SOME TRACKS
  273. INWARDS. tHIS TEST COULD BE DONE WITH THE RESET ROUTINE, BUT IT WOULD BE
  274. BETTER TO ALSO INTEGRATE THIS TEST INTO THE STEPPER ROUTINE.
  275.  
  276.  
  277. hERE ARE SOME MORE GOALS, THAT SHOULD BE REACHED FOR A FIX OF ALL MODERN
  278. 1541 DRIVES, NAMELY THE 1541c AND 1541-ii DRIVES.
  279.  
  280. 1. tHE INPUT SIGNAL SHOULD BE CONNECTED TO THE via INPUT PIN cb2
  281.    INSTEAD OF pa0, SO THAT STANDARD PARALLEL CABLES CAN FREELY
  282.    USE PORT a (UNTIL KNOW IT IS UNTESTED, IF cb2 IS "FREE" IN A
  283.    MANNER, SO THAT IT CAN BE USED FOR THIS PURPOSE).
  284. 2. aDDITIONALLY NEEDED ELECTRONICS MUST BE AS SIMPLE AS
  285.    POSSIBLE, SO THAT PEOPLE CAN EVEN ADD A LIGHT BARRIER TO
  286.    THEIR 1541-ii DRIVES.
  287. 3. tHE rom REPLACEMENT SHOULD BE A PATCHED 1541-ii rom AND THE
  288.    PATCH MUST BE AS COMPATIBLE AS POSSIBLE TO EXISTING SOFTWARE.
  289.    iT WOULD BE BETTER, THE DRIVE "RATTLES" WITH BAD WRITTEN
  290.    SOFTWARE INSTEAD OF NOT WORKING IN GENERAL.
  291. 4. tHE rom REPLACEMENTS SHOULD WORK IN EVERY CASE, EVEN IF
  292.    THERE'S NO LIGHT BARRIER CONNECTED AT ALL. tHIS WOULD BE
  293.    FINE, BECAUSE EVERYONE COULD USE THIS rom AS A BASE FOR OWN
  294.    PATCHES, IMPROVEMENTS OR ADDONS LIKE SPEEDER SYSTEMS.
  295. 5. iT MAY BE ANOTHER GOAL TO PRODUCE A MORE COMPATIBLE 1541 rom
  296.    PART FOR THE 1571 DRIVE, WHICH BASES ON THE 1541-ii rom.
  297.  
  298.  
  299. tO BE DONE SOMEWHERE IN THE FUTURE, wOMO <WOMO (AT) D81 (DOT) DE>
  300.