home *** CD-ROM | disk | FTP | other *** search
/ CBM Funet Archive / cbm-funet-archive-2003.iso / cbm / firmware / drives / old / 8050 / d / 8250romfdc.dis < prev    next >
Text File  |  1995-02-02  |  20KB  |  740 lines

  1.               IRQCOUNTER_FDC = $0
  2.               IRQ16COUNTER_FDC = $1
  3.               ACLTIM_FDC? = $2
  4.               DRVST_FDC = $4
  5.               TMP_FDC = $8
  6.               WORK_FDC = $9
  7.               la = $a
  8.               CSECT_FDC = $d
  9.               HEADER_ID1_FDC = $e
  10.               HEADER_TRACK_FDC = $10
  11.               HEADER_SECT_FDC = $11
  12.               DRIVE_FDC = $13
  13.               TRACC_FDC = $14
  14.               NEXTS_FDC = $15
  15.               SECTR_FDC = $16
  16.               BUFPNT_FDC = $17
  17.               BUFPNT_FDC+1 = $18
  18.               HDRPNT_FDC = $19
  19.               SYNC_COUNTER_FDC = $1e
  20.               JOB_FDC = $1f
  21.               JOBN_FDC = $20
  22.               DRVTRK_FDC = $21
  23.               STEPTMP_FDC = $23
  24.               CHKSUM_FDC = $25
  25.               SAVE_JOBN_FDC = $28
  26.               NXTRK_FDC = $29
  27.               IO_VIA40_PB_FDC = $40
  28.               IO_DISKDATA_READ_FDC = $41
  29.               IO_VIA40_T1LC_FDC = $45
  30.               IO_VIA40_PCR_FDC = $4c
  31.               IO_VIA40_IFR_FDC = $4d
  32.               IO_DISKDATA_WRITE_FDC = $80
  33.               IO_RIOT80_PB_FDC = $82
  34.               IO_RIOT80_T8_FDC = $8f
  35.               l2a0 = $2a0
  36.               FDC_RESETPHASE_FDC = $400
  37.               l401 = $401
  38.               l402 = $402
  39.               JOBS_FDC = $403
  40.               HWDEP_1099_MAXSECPERZONE = $499
  41.               HEADERGAP_SIZE_FDC = $49d
  42.               l4a0 = $4a0
  43.               PHASE_FDC = $4a1
  44.               MIN_SYNC_LENGTH_FDC = $4a5
  45.               WPSW_FDC = $4a6
  46.               LWPT_FDC = $4a8
  47.               l4a9 = $4a9
  48.               KILLP_FLAG_FDC = $4ab
  49.               TRKNUM_SIDE0?_FDC-1 = $4af
  50.               TRKNUM_SIDE0?_FDC = $4b0
  51.               TRKNUM_SIDE1?_FDC-1 = $4b3
  52.               STEPS?_FDC = $4eb
  53.               MINTRK_SIDE2?_FDC = $4ed
  54.               BUFF0_FDC = $500
  55.               l9a9 = $9a9
  56.               lba9 = $ba9
  57.               .org $fc00
  58. fc00          ITOP_FDC:
  59. fc02          IERRR_FDC = * + 2
  60. fc00 17 fc db   .byte $17,$fc,$db
  61. fc03          lfc03:
  62. fc03 fe a0 02   inc l2a0,x
  63. fc06          LCC_FDC:
  64. fc06 8c 00 04   sty FDC_RESETPHASE_FDC
  65. fc09          lfc09:
  66. fc09 ad 00 04   lda FDC_RESETPHASE_FDC
  67. fc0c d0 fb      bne lfc09
  68. fc0e          lfc0e:
  69. fc0e 88         dey
  70. fc0f d0 f5      bne LCC_FDC
  71. fc11          lfc11:
  72. fc11 4c 00 05   jmp BUFF0_FDC
  73. fc14          lfc14:
  74. fc14 88         dey
  75. fc15 10 02      bpl CONT10_FDC
  76. fc17          TOP_FDC:
  77. fc17 a0 0e      ldy #$e
  78. fc19          CONT10_FDC:
  79. fc19 58         cli
  80. fc1a b9 03 04   lda JOBS_FDC,y
  81. fc1d 10 f5      bpl lfc14
  82. fc1f          lfc1f:
  83. fc1f c9 d0      cmp #$d0
  84. fc21 d0 06      bne CONT30_FDC
  85. fc23          lfc23:
  86. fc23 98         tya
  87. fc24 85 20      sta JOBN_FDC
  88. fc26 4c 00 fd   jmp lfd00
  89. fc29          CONT30_FDC:
  90. fc29 78         sei
  91. fc2a 29 01      and #$1
  92. fc2c aa         tax
  93. fc2d 85 13      sta DRIVE_FDC
  94. fc2f a5 40      lda IO_VIA40_PB_FDC
  95. fc31 3d e6 ff   and PHASE_1_FDC,x
  96. fc34 f0 11      beq lfc47
  97. fc36          lfc36:
  98. fc36 45 40      eor IO_VIA40_PB_FDC
  99. fc38 85 40      sta IO_VIA40_PB_FDC
  100. fc3a a5 01      lda IRQ16COUNTER_FDC
  101. fc3c 6d 01 04   adc l401
  102. fc3f 95 02      sta ACLTIM_FDC?,x
  103. fc41 b5 04      lda DRVST_FDC,x
  104. fc43 09 80      ora #$80
  105. fc45 95 04      sta DRVST_FDC,x
  106. fc47          lfc47:
  107. fc47 b5 04      lda DRVST_FDC,x
  108. fc49 30 c9      bmi lfc14
  109. fc4b          lfc4b:
  110. fc4b 20 d9 ff   jsr lffd9
  111. fc4e b5 04      lda DRVST_FDC,x
  112. fc50 0a         asl a
  113. fc51 30 c1      bmi lfc14
  114. fc53          lfc53:
  115. fc53 58         cli
  116. fc54 a0 0e      ldy #$e
  117. fc56 84 20      sty JOBN_FDC
  118. fc58          lfc58:
  119. fc58 20 20 fd   jsr SETJB_FDC
  120. fc5b 30 20      bmi QUE20_FDC
  121. fc5d          QUE05_FDC?:
  122. fc5d c6 20      dec JOBN_FDC
  123. fc5f 10 f7      bpl lfc58
  124. fc61          lfc61:
  125. fc61 a4 28      ldy SAVE_JOBN_FDC
  126. fc63 20 22 fd   jsr SETJB_Y_FDC
  127. fc66 a5 29      lda NXTRK_FDC
  128. fc68 78         sei
  129. fc69 9d eb 04   sta STEPS?_FDC,x
  130. fc6c a9 08      lda #$8
  131. fc6e 95 23      sta STEPTMP_FDC,x
  132. fc70 a9 41      lda #$41
  133. fc72 15 04      ora DRVST_FDC,x
  134. fc74 95 04      sta DRVST_FDC,x
  135. fc76 b1 19      lda (HDRPNT_FDC),y
  136. fc78 95 21      sta DRVTRK_FDC,x
  137. fc7a          lfc7a:
  138. fc7a 4c 17 fc   jmp TOP_FDC
  139. fc7d          QUE20_FDC:
  140. fc7d 29 01      and #$1
  141. fc7f c5 13      cmp DRIVE_FDC
  142. fc81 d0 da      bne QUE05_FDC?
  143. fc83          lfc83:
  144. fc83 a5 82      lda IO_RIOT80_PB_FDC
  145. fc85 09 10      ora #$10
  146. fc87 85 82      sta IO_RIOT80_PB_FDC
  147. fc89 b1 19      lda (HDRPNT_FDC),y
  148. fc8b cd b0 04   cmp TRKNUM_SIDE0?_FDC
  149. fc8e 90 12      bcc lfca2
  150. fc90          lfc90:
  151. fc90 a5 82      lda IO_RIOT80_PB_FDC
  152. fc92 29 ef      and #$ef
  153. fc94 85 82      sta IO_RIOT80_PB_FDC
  154. fc96 b5 21      lda DRVTRK_FDC,x
  155. fc98 cd b0 04   cmp TRKNUM_SIDE0?_FDC
  156. fc9b b0 11      bcs lfcae
  157. fc9d          lfc9d:
  158. fc9d 6d ed 04   adc MINTRK_SIDE2?_FDC
  159. fca0 d0 0a      bne lfcac
  160. fca2          lfca2:
  161. fca2 b5 21      lda DRVTRK_FDC,x
  162. fca4 cd b0 04   cmp TRKNUM_SIDE0?_FDC
  163. fca7 90 05      bcc lfcae
  164. fca9          lfca9:
  165. fca9 ed ed 04   sbc MINTRK_SIDE2?_FDC
  166. fcac          lfcac:
  167. fcac 95 21      sta DRVTRK_FDC,x
  168. fcae          lfcae:
  169. fcae b5 21      lda DRVTRK_FDC,x
  170. fcb0 f0 0d      beq GOTU_FDC
  171. fcb2          lfcb2:
  172. fcb2 38         sec
  173. fcb3 f1 19      sbc (HDRPNT_FDC),y
  174. fcb5 f0 08      beq GOTU_FDC
  175. fcb7          lfcb7:
  176. fcb7 85 29      sta NXTRK_FDC
  177. fcb9 a5 20      lda JOBN_FDC
  178. fcbb 85 28      sta SAVE_JOBN_FDC
  179. fcbd 10 9e      bpl QUE05_FDC?
  180. fcbf          GOTU_FDC:
  181. fcbf a2 04      ldx #$4
  182. fcc1 b1 19      lda (HDRPNT_FDC),y
  183. fcc3 85 14      sta TRACC_FDC
  184. fcc5 cd b0 04   cmp TRKNUM_SIDE0?_FDC
  185. fcc8 b0 08      bcs lfcd2
  186. fcca          lfcca:
  187. fcca dd af 04   cmp TRKNUM_SIDE0?_FDC-1,x
  188. fccd ca         dex
  189. fcce b0 fa      bcs lfcca
  190. fcd0          lfcd0:
  191. fcd0 90 06      bcc lfcd8
  192. fcd2          lfcd2:
  193. fcd2 dd b3 04   cmp TRKNUM_SIDE1?_FDC-1,x
  194. fcd5 ca         dex
  195. fcd6 b0 fa      bcs lfcd2
  196. fcd8          lfcd8:
  197. fcd8 bd 99 04   lda HWDEP_1099_MAXSECPERZONE,x
  198. fcdb 85 16      sta SECTR_FDC
  199. fcdd 8a         txa
  200. fcde 0a         asl a
  201. fcdf 85 09      sta WORK_FDC
  202. fce1 a5 82      lda IO_RIOT80_PB_FDC
  203. fce3 29 f8      and #$f8
  204. fce5 05 09      ora WORK_FDC
  205. fce7 05 13      ora DRIVE_FDC
  206. fce9 85 82      sta IO_RIOT80_PB_FDC
  207. fceb a6 13      ldx DRIVE_FDC
  208. fced b5 04      lda DRVST_FDC,x
  209. fcef 30 89      bmi lfc7a
  210. fcf1          lfcf1:
  211. fcf1 a5 1f      lda JOB_FDC
  212. fcf3 c9 40      cmp #$40
  213. fcf5 f0 11      beq BMP_FDC
  214. fcf7          EXE_FDC:
  215. fcf7 c9 60      cmp #$60
  216. fcf9 f0 03      beq EX_FDC
  217. fcfb          lfcfb:
  218. fcfb 4c 5a fe   jmp SEAK_FDC
  219. fcfe          EX_FDC:
  220. fcfe a5 20      lda JOBN_FDC
  221. fd00          lfd00:
  222. fd00 18         clc
  223. fd01 69 05      adc #$5
  224. fd03 85 18      sta BUFPNT_FDC+1
  225. fd05 6c 17 00   jmp (BUFPNT_FDC)
  226. fd08          BMP_FDC:
  227. fd08 78         sei
  228. fd09 a9 41      lda #$41
  229. fd0b 95 04      sta DRVST_FDC,x
  230. fd0d a9 01      lda #$1
  231. fd0f 95 21      sta DRVTRK_FDC,x
  232. fd11 bd e4 ff   lda PHASE_3_FDC,x
  233. fd14 05 40      ora IO_VIA40_PB_FDC
  234. fd16 85 40      sta IO_VIA40_PB_FDC
  235. fd18 a9 5c      lda #$5c
  236. fd1a 9d eb 04   sta STEPS?_FDC,x
  237. fd1d 4c ea ff   jmp lffea
  238. fd20          SETJB_FDC:
  239. fd20 a4 20      ldy JOBN_FDC
  240. fd22          SETJB_Y_FDC:
  241. fd22 b9 03 04   lda JOBS_FDC,y
  242. fd25 48         pha
  243. fd26 29 78      and #$78
  244. fd28 85 1f      sta JOB_FDC
  245. fd2a 98         tya
  246. fd2b 0a         asl a
  247. fd2c 0a         asl a
  248. fd2d 0a         asl a
  249. fd2e 69 21      adc #$21
  250. fd30 85 19      sta HDRPNT_FDC
  251. fd32 a0 02      ldy #$2
  252. fd34 68         pla
  253. fd35 60         rts
  254. fd36          lfd36:
  255. fd36 a0 03      ldy #$3
  256. fd38 b1 19      lda (HDRPNT_FDC),y
  257. fd3a 85 11      sta HEADER_SECT_FDC
  258. fd3c          WSECT_FDC?:
  259. fd3c a9 7f      lda #$7f
  260. fd3e 85 0d      sta CSECT_FDC
  261. fd40 a5 11      lda HEADER_SECT_FDC
  262. fd42 18         clc
  263. fd43 69 02      adc #$2
  264. fd45 c5 16      cmp SECTR_FDC
  265. fd47 90 02      bcc L_460_FDC
  266. fd49          lfd49:
  267. fd49 a9 00      lda #$0
  268. fd4b          L_460_FDC:
  269. fd4b 85 15      sta NEXTS_FDC
  270. fd4d a2 0e      ldx #$e
  271. fd4f 86 20      stx JOBN_FDC
  272. fd51 a2 ff      ldx #$ff
  273. fd53          L_480_FDC:
  274. fd53 20 20 fd   jsr SETJB_FDC
  275. fd56 10 2c      bpl L_470_FDC
  276. fd58          lfd58:
  277. fd58 85 09      sta WORK_FDC
  278. fd5a 29 01      and #$1
  279. fd5c c5 13      cmp DRIVE_FDC
  280. fd5e d0 24      bne L_470_FDC
  281. fd60          lfd60:
  282. fd60 b1 19      lda (HDRPNT_FDC),y
  283. fd62 c5 14      cmp TRACC_FDC
  284. fd64 d0 1e      bne L_470_FDC
  285. fd66          lfd66:
  286. fd66 a5 1f      lda JOB_FDC
  287. fd68 c9 60      cmp #$60
  288. fd6a f0 18      beq L_470_FDC
  289. fd6c          lfd6c:
  290. fd6c c8         iny
  291. fd6d 38         sec
  292. fd6e b1 19      lda (HDRPNT_FDC),y
  293. fd70 e5 15      sbc NEXTS_FDC
  294. fd72 10 03      bpl L_465_FDC
  295. fd74          lfd74:
  296. fd74 18         clc
  297. fd75 65 16      adc SECTR_FDC
  298. fd77          L_465_FDC:
  299. fd77 c5 0d      cmp CSECT_FDC
  300. fd79 b0 09      bcs L_470_FDC
  301. fd7b          DOITT_FDC:
  302. fd7b 85 0d      sta CSECT_FDC
  303. fd7d a5 20      lda JOBN_FDC
  304. fd7f aa         tax
  305. fd80 69 05      adc #$5
  306. fd82 85 18      sta BUFPNT_FDC+1
  307. fd84          L_470_FDC:
  308. fd84 c6 20      dec JOBN_FDC
  309. fd86 10 cb      bpl L_480_FDC
  310. fd88          lfd88:
  311. fd88 8a         txa
  312. fd89 10 03      bpl lfd8e
  313. fd8b          lfd8b:
  314. fd8b 4c 17 fc   jmp TOP_FDC
  315. fd8e          lfd8e:
  316. fd8e 8e a0 04   stx l4a0
  317. fd91 86 20      stx JOBN_FDC
  318. fd93 20 20 fd   jsr SETJB_FDC
  319. fd96 a5 1f      lda JOB_FDC
  320. fd98          REED_FDC:
  321. fd98 c9 00      cmp #$0
  322. fd9a d0 36      bne WRIGHT_FDC
  323. fd9c          READ01_FDC:
  324. fd9c 20 c7 fd   jsr DSTRT_FDC
  325. fd9f          lfd9f:
  326. fd9f 50 fe      bvc lfd9f
  327. fda1          lfda1:
  328. fda1 b8         clv
  329. fda2 a5 41      lda IO_DISKDATA_READ_FDC
  330. fda4 91 17      sta (BUFPNT_FDC),y
  331. fda6 c8         iny
  332. fda7 d0 f6      bne lfd9f
  333. fda9          READ_CHECKSUM_FDC:
  334. fda9 50 fe      bvc READ_CHECKSUM_FDC
  335. fdab          lfdab:
  336. fdab a5 41      lda IO_DISKDATA_READ_FDC
  337. fdad 85 25      sta CHKSUM_FDC
  338. fdaf a9 10      lda #$10
  339. fdb1 24 4d      bit IO_VIA40_IFR_FDC
  340. fdb3 d0 0f      bne lfdc4
  341. fdb5          lfdb5:
  342. fdb5 20 36 ff   jsr CHKBLK_FDC
  343. fdb8 c5 25      cmp CHKSUM_FDC
  344. fdba d0 03      bne lfdbf
  345. fdbc          lfdbc:
  346. fdbc 4c 9f fe   jmp DONE_FDC
  347. fdbf          lfdbf:
  348. fdbf a9 05      lda #$5
  349. fdc2          lfdc2 = * + 1
  350.               ; iNSTRUCTION PARAMETER JUMPED TO.
  351. fdc1 2c a9 04   bit l4a9
  352. fdc4          lfdc4:
  353. fdc4 4c db fe   jmp ERRR_FDC
  354. fdc7          DSTRT_FDC:
  355. fdc7 20 aa fe   jsr SRCH_FDC
  356. fdca 20 f7 fe   jsr SYNC?_FDC
  357. fdcd c9 07      cmp #$7
  358. fdcf d0 f1      bne lfdc2
  359. fdd1          lfdd1:
  360. fdd1 60         rts
  361. fdd2          WRIGHT_FDC:
  362. fdd2 c9 10      cmp #$10
  363. fdd4 d0 65      bne VRFY_FDC
  364. fdd6          lfdd6:
  365. fdd6 20 36 ff   jsr CHKBLK_FDC
  366. fdd9 85 25      sta CHKSUM_FDC
  367. fddb a5 82      lda IO_RIOT80_PB_FDC
  368. fddd 29 08      and #$8
  369. fddf d0 e3      bne lfdc4
  370. fde1          WRT10_FDC:
  371. fde1 20 aa fe   jsr SRCH_FDC
  372. fde4 ae 9d 04   ldx HEADERGAP_SIZE_FDC
  373. fde7          lfde7:
  374. fde7 50 fe      bvc lfde7
  375. fde9          lfde9:
  376. fde9 b8         clv
  377. fdea ca         dex
  378. fdeb d0 fa      bne lfde7
  379. fded          lfded:
  380. fded a9 de      lda #$de
  381. fdef 85 4c      sta IO_VIA40_PCR_FDC
  382. fdf1 a9 dc      lda #$dc
  383. fdf3 a2 ff      ldx #$ff
  384. fdf5 20 2d ff   jsr WRITE_2_BYTES_FDC
  385. fdf8 20 2d ff   jsr WRITE_2_BYTES_FDC
  386. fdfb          lfdfb:
  387. fdfb 50 fe      bvc lfdfb
  388. fdfd          lfdfd:
  389. fdfd b8         clv
  390. fdfe 85 4c      sta IO_VIA40_PCR_FDC
  391. fe00 a9 07      lda #$7
  392. fe02 85 80      sta IO_DISKDATA_WRITE_FDC
  393. fe04 a0 00      ldy #$0
  394. fe06          lfe06:
  395. fe06 50 fe      bvc lfe06
  396. fe08          lfe08:
  397. fe08 b8         clv
  398. fe09 b1 17      lda (BUFPNT_FDC),y
  399. fe0b 85 80      sta IO_DISKDATA_WRITE_FDC
  400. fe0d c8         iny
  401. fe0e d0 f6      bne lfe06
  402. fe10          lfe10:
  403. fe10 a6 25      ldx CHKSUM_FDC
  404. fe12          lfe12:
  405. fe12 50 fe      bvc lfe12
  406. fe14          lfe14:
  407. fe14 b8         clv
  408. fe15 86 80      stx IO_DISKDATA_WRITE_FDC
  409. fe17 20 30 ff   jsr WRITE_A_BYTE_FDC
  410. fe1a a2 00      ldx #$0
  411. fe1c 20 30 ff   jsr WRITE_A_BYTE_FDC
  412. fe1f a9 fc      lda #$fc
  413. fe21          lfe21:
  414. fe21 50 fe      bvc lfe21
  415. fe23          lfe23:
  416. fe23 b8         clv
  417. fe24 85 4c      sta IO_VIA40_PCR_FDC
  418. fe26 a2 28      ldx #$28
  419. fe28          lfe28:
  420. fe28 20 27 ff   jsr READ_A_BYTE_FDC
  421. fe2b ca         dex
  422. fe2c d0 fa      bne lfe28
  423. fe2e          lfe2e:
  424. fe2e a4 20      ldy JOBN_FDC
  425. fe30 b9 03 04   lda JOBS_FDC,y
  426. fe33 49 30      eor #$30
  427. fe35 99 03 04   sta JOBS_FDC,y
  428. fe38 4c 36 fd   jmp lfd36
  429. fe3b          VRFY_FDC:
  430. fe3b c9 20      cmp #$20
  431. fe3d d0 16      bne SECTSK_FDC
  432. fe3f          lfe3f:
  433. fe3f 20 c7 fd   jsr DSTRT_FDC
  434. fe42          lfe42:
  435. fe42 50 fe      bvc lfe42
  436. fe44          lfe44:
  437. fe44 b8         clv
  438. fe45 a5 41      lda IO_DISKDATA_READ_FDC
  439. fe47 d1 17      cmp (BUFPNT_FDC),y
  440. fe49 d0 06      bne lfe51
  441. fe4b          lfe4b:
  442. fe4b c8         iny
  443. fe4c d0 f4      bne lfe42
  444. fe4e          lfe4e:
  445. fe4e 4c a9 fd   jmp READ_CHECKSUM_FDC
  446. fe51          lfe51:
  447. fe51 a9 07      lda #$7
  448. fe53 d0 52      bne lfea7
  449. fe55          SECTSK_FDC:
  450. fe55 20 aa fe   jsr SRCH_FDC
  451. fe58 f0 45      beq DONE_FDC
  452. fe5a          SEAK_FDC:
  453. fe5a a2 b4      ldx #$b4
  454. fe5c 20 d5 fe   jsr WAIT_FOR_HDRBLOCK_FDC
  455. fe5f a0 04      ldy #$4
  456. fe61          lfe61:
  457. fe61 50 fe      bvc lfe61
  458. fe63          lfe63:
  459. fe63 b8         clv
  460. fe64 a5 41      lda IO_DISKDATA_READ_FDC
  461. fe66 99 0e 00   sta HEADER_ID1_FDC,y
  462. fe69 88         dey
  463. fe6a 10 f5      bpl lfe61
  464. fe6c          lfe6c:
  465. fe6c a0 04      ldy #$4
  466. fe6e a9 00      lda #$0
  467. fe70          lfe70:
  468. fe70 59 0e 00   eor HEADER_ID1_FDC,y
  469. fe73 88         dey
  470. fe74 10 fa      bpl lfe70
  471. fe76          lfe76:
  472. fe76 c9 00      cmp #$0
  473. fe78 d0 28      bne lfea2
  474. fe7a          lfe7a:
  475. fe7a a6 13      ldx DRIVE_FDC
  476. fe7c a5 10      lda HEADER_TRACK_FDC
  477. fe7e 95 21      sta DRVTRK_FDC,x
  478. fe80 a5 1f      lda JOB_FDC
  479. fe82 c9 30      cmp #$30
  480. fe84 f0 0f      beq ESEEK_FDC
  481. fe86          lfe86:
  482. fe86 a0 01      ldy #$1
  483. fe88          lfe88:
  484. fe88 b1 19      lda (HDRPNT_FDC),y
  485. fe8a d9 0e 00   cmp HEADER_ID1_FDC,y
  486. fe8d d0 16      bne BADID_FDC
  487. fe8f          lfe8f:
  488. fe8f 88         dey
  489. fe90 10 f6      bpl lfe88
  490. fe92          lfe92:
  491. fe92 4c 3c fd   jmp WSECT_FDC?
  492. fe95          ESEEK_FDC:
  493. fe95 a0 04      ldy #$4
  494. fe97          lfe97:
  495. fe97 b9 0e 00   lda HEADER_ID1_FDC,y
  496. fe9a 91 19      sta (HDRPNT_FDC),y
  497. fe9c 88         dey
  498. fe9d 10 f8      bpl lfe97
  499. fe9f          DONE_FDC:
  500. fe9f a9 01      lda #$1
  501. fea2          lfea2 = * + 1
  502.               ; iNSTRUCTION PARAMETER JUMPED TO.
  503. fea1 2c a9 09   bit l9a9
  504. fea5          BADID_FDC = * + 1
  505.               ; iNSTRUCTION PARAMETER JUMPED TO.
  506. fea4 2c a9 0b   bit lba9
  507. fea7          lfea7:
  508. fea7 4c db fe   jmp ERRR_FDC
  509. feaa          SRCH_FDC:
  510. feaa a0 03      ldy #$3
  511. feac a9 00      lda #$0
  512. feae          lfeae:
  513. feae 51 19      eor (HDRPNT_FDC),y
  514. feb0 88         dey
  515. feb1 10 fb      bpl lfeae
  516. feb3          lfeb3:
  517. feb3 a0 04      ldy #$4
  518. feb5 91 19      sta (HDRPNT_FDC),y
  519. feb7 a4 20      ldy JOBN_FDC
  520. feb9 a2 b4      ldx #$b4
  521. febb          lfebb:
  522. febb 20 d5 fe   jsr WAIT_FOR_HDRBLOCK_FDC
  523. febe a0 04      ldy #$4
  524. fec0          lfec0:
  525. fec0 50 fe      bvc lfec0
  526. fec2          lfec2:
  527. fec2 b8         clv
  528. fec3 a5 41      lda IO_DISKDATA_READ_FDC
  529. fec5 d1 19      cmp (HDRPNT_FDC),y
  530. fec7 d0 f2      bne lfebb
  531. fec9          lfec9:
  532. fec9 88         dey
  533. feca 10 f4      bpl lfec0
  534. fecc          lfecc:
  535. fecc c8         iny
  536. fecd          lfecd:
  537. fecd 60         rts
  538. fece          lfece:
  539. fece 20 f7 fe   jsr SYNC?_FDC
  540. fed1 c9 08      cmp #$8
  541. fed3 f0 f8      beq lfecd
  542. fed5          WAIT_FOR_HDRBLOCK_FDC:
  543. fed5 58         cli
  544. fed6 ca         dex
  545. fed7 d0 f5      bne lfece
  546. fed9          lfed9:
  547. fed9 a9 02      lda #$2
  548. fedb          ERRR_FDC:
  549. fedb a4 20      ldy JOBN_FDC
  550. fedd 99 03 04   sta JOBS_FDC,y
  551. fee0 48         pha
  552. fee1 a5 01      lda IRQ16COUNTER_FDC
  553. fee3 a6 13      ldx DRIVE_FDC
  554. fee5 6d 02 04   adc l402
  555. fee8 95 02      sta ACLTIM_FDC?,x
  556. feea 68         pla
  557. feeb 4a         lsr a
  558. feec d0 03      bne lfef1
  559. feee          lfeee:
  560. feee 4c 36 fd   jmp lfd36
  561. fef1          lfef1:
  562. fef1 a2 3f      ldx #$3f
  563. fef3 9a         txs
  564. fef4 4c 17 fc   jmp TOP_FDC
  565. fef7          SYNC?_FDC:
  566. fef7 a9 1e      lda #$1e
  567. fef9 85 1e      sta SYNC_COUNTER_FDC
  568. fefb          lfefb:
  569. fefb a5 40      lda IO_VIA40_PB_FDC
  570. fefd 29 bf      and #$bf
  571. feff 85 40      sta IO_VIA40_PB_FDC
  572. ff01 78         sei
  573. ff02 a9 d0      lda #$d0
  574. ff04 85 45      sta IO_VIA40_T1LC_FDC
  575. ff06 a9 03      lda #$3
  576. ff08 c6 1e      dec SYNC_COUNTER_FDC
  577. ff0a 30 cf      bmi ERRR_FDC
  578. ff0c          lff0c:
  579. ff0c 24 45      bit IO_VIA40_T1LC_FDC
  580. ff0e 10 cb      bpl ERRR_FDC
  581. ff10          lff10:
  582. ff10 24 40      bit IO_VIA40_PB_FDC
  583. ff12 30 f8      bmi lff0c
  584. ff14          lff14:
  585. ff14 ac a5 04   ldy MIN_SYNC_LENGTH_FDC
  586. ff17          lff17:
  587. ff17 24 40      bit IO_VIA40_PB_FDC
  588. ff19 30 e0      bmi lfefb
  589. ff1b          lff1b:
  590. ff1b 88         dey
  591. ff1c d0 f9      bne lff17
  592. ff1e          lff1e:
  593. ff1e a5 40      lda IO_VIA40_PB_FDC
  594. ff20 09 40      ora #$40
  595. ff22 85 40      sta IO_VIA40_PB_FDC
  596. ff24 24 41      bit IO_DISKDATA_READ_FDC
  597. ff26 b8         clv
  598. ff27          READ_A_BYTE_FDC:
  599. ff27 50 fe      bvc READ_A_BYTE_FDC
  600. ff29          lff29:
  601. ff29 b8         clv
  602. ff2a a5 41      lda IO_DISKDATA_READ_FDC
  603. ff2c 60         rts
  604. ff2d          WRITE_2_BYTES_FDC:
  605. ff2d 20 30 ff   jsr WRITE_A_BYTE_FDC
  606. ff30          WRITE_A_BYTE_FDC:
  607. ff30 50 fe      bvc WRITE_A_BYTE_FDC
  608. ff32          lff32:
  609. ff32 b8         clv
  610. ff33 86 80      stx IO_DISKDATA_WRITE_FDC
  611. ff35 60         rts
  612. ff36          CHKBLK_FDC:
  613. ff36 a9 00      lda #$0
  614. ff38 a8         tay
  615. ff39          lff39:
  616. ff39 51 17      eor (BUFPNT_FDC),y
  617. ff3b c8         iny
  618. ff3c d0 fb      bne lff39
  619. ff3e          lff3e:
  620. ff3e 60         rts
  621. ff3f          IRQ_FDC:
  622. ff3f 48         pha
  623. ff40 8a         txa
  624. ff41 48         pha
  625. ff42 a9 03      lda #$3
  626. ff44 85 8f      sta IO_RIOT80_T8_FDC
  627. ff46 85 8f      sta IO_RIOT80_T8_FDC
  628. ff48 e6 00      inc IRQCOUNTER_FDC
  629. ff4a a5 00      lda IRQCOUNTER_FDC
  630. ff4c 29 0f      and #$f
  631. ff4e d0 02      bne lff52
  632. ff50          lff50:
  633. ff50 e6 01      inc IRQ16COUNTER_FDC
  634. ff52          lff52:
  635. ff52 a2 01      ldx #$1
  636. ff54 a5 82      lda IO_RIOT80_PB_FDC
  637. ff56 48         pha
  638. ff57 09 01      ora #$1
  639. ff59          lff59:
  640. ff59 85 82      sta IO_RIOT80_PB_FDC
  641. ff5b a5 82      lda IO_RIOT80_PB_FDC
  642. ff5d 29 08      and #$8
  643. ff5f dd a8 04   cmp LWPT_FDC,x
  644. ff62 9d a8 04   sta LWPT_FDC,x
  645. ff65 f0 05      beq lff6c
  646. ff67          lff67:
  647. ff67 a9 01      lda #$1
  648. ff69 9d a6 04   sta WPSW_FDC,x
  649. ff6c          lff6c:
  650. ff6c a5 01      lda IRQ16COUNTER_FDC
  651. ff6e d5 02      cmp ACLTIM_FDC?,x
  652. ff70 d0 11      bne lff83
  653. ff72          lff72:
  654. ff72 16 04      asl DRVST_FDC,x
  655. ff74 b0 07      bcs lff7d
  656. ff76          lff76:
  657. ff76 bd e6 ff   lda PHASE_1_FDC,x
  658. ff79 05 40      ora IO_VIA40_PB_FDC
  659. ff7b 85 40      sta IO_VIA40_PB_FDC
  660. ff7d          lff7d:
  661. ff7d 20 d9 ff   jsr lffd9
  662. ff80 18         clc
  663. ff81 76 04      ror DRVST_FDC,x
  664. ff83          lff83:
  665. ff83 bd eb 04   lda STEPS?_FDC,x
  666. ff86 d0 14      bne lff9c
  667. ff88          lff88:
  668. ff88 b5 23      lda STEPTMP_FDC,x
  669. ff8a f0 04      beq lff90
  670. ff8c          lff8c:
  671. ff8c d6 23      dec STEPTMP_FDC,x
  672. ff8e 10 38      bpl lffc8
  673. ff90          lff90:
  674. ff90 9d a1 04   sta PHASE_FDC,x
  675. ff93 b5 04      lda DRVST_FDC,x
  676. ff95 29 bf      and #$bf
  677. ff97 95 04      sta DRVST_FDC,x
  678. ff99 4c c8 ff   jmp lffc8
  679. ff9c          lff9c:
  680. ff9c 0a         asl a
  681. ff9d a5 40      lda IO_VIA40_PB_FDC
  682. ff9f 3d e0 ff   and PHASE_MASKREST_FDC,x
  683. ffa2 85 08      sta TMP_FDC
  684. ffa4 a5 40      lda IO_VIA40_PB_FDC
  685. ffa6 3d e4 ff   and PHASE_3_FDC,x
  686. ffa9 b0 09      bcs lffb4
  687. ffab          lffab:
  688. ffab de eb 04   dec STEPS?_FDC,x
  689. ffae 5d e4 ff   eor PHASE_3_FDC,x
  690. ffb1 4c b7 ff   jmp lffb7
  691. ffb4          lffb4:
  692. ffb4 fe eb 04   inc STEPS?_FDC,x
  693. ffb7          lffb7:
  694. ffb7 5d e2 ff   eor PHASE_2_FDC,x
  695. ffba f0 08      beq lffc4
  696. ffbc          lffbc:
  697. ffbc dd e4 ff   cmp PHASE_3_FDC,x
  698. ffbf f0 03      beq lffc4
  699. ffc1          lffc1:
  700. ffc1 5d e4 ff   eor PHASE_3_FDC,x
  701. ffc4          lffc4:
  702. ffc4 05 08      ora TMP_FDC
  703. ffc6 85 40      sta IO_VIA40_PB_FDC
  704. ffc8          lffc8:
  705. ffc8 a5 82      lda IO_RIOT80_PB_FDC
  706. ffca 29 fe      and #$fe
  707. ffcc ca         dex
  708. ffcd 10 8a      bpl lff59
  709. ffcf          lffcf:
  710. ffcf 4e ab 04   lsr KILLP_FLAG_FDC
  711. ffd2 68         pla
  712. ffd3 85 82      sta IO_RIOT80_PB_FDC
  713. ffd5 68         pla
  714. ffd6 aa         tax
  715. ffd7 68         pla
  716. ffd8 40         rti
  717. ffd9          lffd9:
  718. ffd9 a5 01      lda IRQ16COUNTER_FDC
  719. ffdb 95 02      sta ACLTIM_FDC?,x
  720. ffdd d6 02      dec ACLTIM_FDC?,x
  721. ffdf 60         rts
  722. ffe0          PHASE_MASKREST_FDC:
  723. ffe2          PHASE_2_FDC = * + 2
  724. ffe0 f3 fc 08   .byte $f3,$fc,$8
  725. ffe4          PHASE_3_FDC = * + 1
  726. ffe3 02 0c 03   .byte $2,$c,$3
  727. ffe6          PHASE_1_FDC:
  728. ffe6 20 10 aa   .byte $20,$10,$aa
  729. ffe9 aa         .byte $aa
  730. ffea          lffea:
  731. ffea 95 23      sta STEPTMP_FDC,x
  732. ffec 4c 9f fe   jmp DONE_FDC
  733. ffef aa aa aa   .byte $aa,$aa,$aa
  734. fff2 aa aa aa   .byte $aa,$aa,$aa
  735. fff5 aa aa aa   .byte $aa,$aa,$aa
  736. fff8 aa aa 53   .byte $aa,$aa,$53
  737. fffb a3 04 fc   .byte $a3,$4,$fc
  738. 0000          IRQCOUNTER_FDC = * + 2
  739. fffe 3f ff 00   .byte $3f,$ff,$0
  740.