Rev 1120 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
507 | savelij | 1 | |
1186 | savelij | 2 | ; LAST UPDATE: 06.02.2025 savelij |
507 | savelij | 3 | |
1120 | savelij | 4 | HDD_TIME_OUT EQU 0x8000 |
781 | savelij | 5 | |
1056 | savelij | 6 | ENABLE_INIR EQU 0 ; ⥭ ᥪ INIR' |
781 | savelij | 7 | |
952 | savelij | 8 | ; 室 ࠬ 騥: |
9 | ; HL - ⥭/ |
||
10 | ; BCDE - 32- ᥪ |
||
11 | ; A - ⢮ ᥪ (512 ) |
||
12 | ; A' - 0 = 0/1 Master/Slave |
||
13 | ; ⮫쪮 筮 /⥭ |
||
14 | |||
15 | ; 뤠 訡 |
||
782 | savelij | 16 | ; 0 - ok |
17 | ; 1 - 訡 ⠩ |
||
18 | ; 6 - 訡 믮 |
||
19 | ; 7 - 㦥 CD/DVD |
||
20 | |||
952 | savelij | 21 | ; 窠 室 ࠡ HDD NEMO |
507 | savelij | 22 | COMHDDN EX AF,AF' |
952 | savelij | 23 | LD (TMP_NUMHDD),A |
507 | savelij | 24 | LD A,IYL |
25 | AND A |
||
26 | LD A,(NEXTBYTERST8) |
||
27 | JR Z,COMHDDN1 |
||
28 | EX (SP),HL |
||
29 | LD A,(HL) |
||
30 | INC HL |
||
31 | EX (SP),HL |
||
32 | COMHDDN1 ADD A,A |
||
33 | PUSH HL |
||
34 | LD HL,RET4NEMO |
||
35 | EX (SP),HL |
||
36 | PUSH HL |
||
37 | LD HL,TBLHDDN |
||
38 | ADD A,L |
||
39 | LD L,A |
||
40 | ADC A,H |
||
41 | SUB L |
||
42 | LD H,A |
||
43 | LD A,(HL) |
||
44 | INC HL |
||
45 | LD H,(HL) |
||
46 | LD L,A |
||
952 | savelij | 47 | LD A,(TMP_NUMHDD) |
507 | savelij | 48 | EX AF,AF' |
49 | EX (SP),HL |
||
50 | RET |
||
51 | |||
52 | RET4NEMO PUSH AF |
||
53 | LD A,IYL |
||
54 | AND A |
||
55 | JR NZ,RET4NEMO1 |
||
553 | savelij | 56 | LD (RREG_L),HL |
507 | savelij | 57 | EX (SP),HL |
553 | savelij | 58 | LD (RREG_F),HL |
507 | savelij | 59 | EX (SP),HL |
60 | RET4NEMO1 POP AF |
||
61 | RET |
||
62 | |||
781 | savelij | 63 | TBLHDDN DW .HDDINIT |
64 | DW .HDDOFF |
||
1056 | savelij | 65 | DW .DRIVER_READ_SECTORS ; READ MULTI |
66 | DW .DRIVER_WRITE_SECTORS ; WRITE MULTI |
||
781 | savelij | 67 | DW .DRIVER_READ_ID |
507 | savelij | 68 | |
952 | savelij | 69 | ; 室 ࠬ 騥: |
70 | ; HL - ⥭/ |
||
71 | ; BCDE-32- ᥪ |
||
72 | ; A-⢮ (=512 ) |
||
73 | ; ⮫쪮 筮 /⥭ |
||
74 | ; 室: |
||
1056 | savelij | 75 | ; H- MASTER 0-HDD, 1-CD-ROM, 0xFF-none |
76 | ; L- SLAVE 0-HDD, 1-CD-ROM, 0xFF-none |
||
781 | savelij | 77 | .HDDINIT PUSH IX |
789 | savelij | 78 | PUSH DE |
79 | PUSH BC |
||
952 | savelij | 80 | LD IX,_IDENTIFY_DEVICE << 8 + 1 |
781 | savelij | 81 | PUSH HL |
952 | savelij | 82 | LD BC,0xE000 |
781 | savelij | 83 | LD DE,0 |
782 | savelij | 84 | CALL .READ_ID_TEST |
781 | savelij | 85 | POP HL |
782 | savelij | 86 | CP 7 |
87 | LD D,1 |
||
88 | JR Z,.HDDINIT_5 |
||
781 | savelij | 89 | AND A |
90 | JR Z,.HDDINIT_1 |
||
91 | LD A,0XFF |
||
92 | .HDDINIT_1 CALL Z,.INIT_91 |
||
1120 | savelij | 93 | ; LD D,A |
94 | LD H,A |
||
95 | LD L,0xFF |
||
96 | .HDDINIT_5 |
||
97 | ; PUSH DE |
||
98 | ; LD IX,_IDENTIFY_DEVICE << 8 + 1 |
||
99 | ; PUSH HL |
||
100 | ; LD BC,0xF000 |
||
101 | ; LD DE,0 |
||
102 | ; CALL .READ_ID_TEST |
||
103 | ; POP HL |
||
104 | ; CP 7 |
||
105 | ; JR NZ,.HDDINIT_3 |
||
106 | ; POP HL |
||
107 | ; LD L,1 |
||
108 | ; JR .HDDINIT_4 |
||
782 | savelij | 109 | |
1120 | savelij | 110 | ;.HDDINIT_3 AND A |
111 | ; JR Z,.HDDINIT_2 |
||
112 | ; LD A,0XFF |
||
113 | ;.HDDINIT_2 CALL Z,.INIT_91 |
||
114 | ; POP HL |
||
115 | ; LD L,A |
||
782 | savelij | 116 | .HDDINIT_4 XOR A |
789 | savelij | 117 | POP BC |
118 | POP DE |
||
781 | savelij | 119 | POP IX |
120 | RET |
||
507 | savelij | 121 | |
781 | savelij | 122 | .INIT_91 PUSH HL |
123 | PUSH BC |
||
124 | LD A,IYL |
||
125 | AND A |
||
126 | JR NZ,.INIT91_1 |
||
1186 | savelij | 127 | EVOPORT WIN_P2,ZXSTD_CPU2 |
1056 | savelij | 128 | .INIT91_1 LD L,49 * 2 + 1 |
781 | savelij | 129 | LD A,(HL) |
130 | AND 2 |
||
131 | JR Z,.INI_912 |
||
132 | LD BC,0XFF00+PN_1F2 |
||
1056 | savelij | 133 | LD L,0x0C |
781 | savelij | 134 | LD A,(HL) |
135 | OUT (C),A |
||
136 | LD L,6 |
||
137 | LD C,PN_1F6 |
||
138 | LD A,(HL) |
||
139 | DEC A |
||
140 | OUT (C),A |
||
141 | LD C,PN_1F7 |
||
952 | savelij | 142 | LD A,_INIT_DEVICE_PARAMETERS |
781 | savelij | 143 | OUT (C),A |
1056 | savelij | 144 | LD DE,0x4000 |
781 | savelij | 145 | .INI_911 DEC DE |
146 | LD A,D |
||
147 | OR E |
||
148 | JR Z,.INI_912 |
||
149 | IN A,(C) |
||
1056 | savelij | 150 | AND 0x80 |
781 | savelij | 151 | JR NZ,.INI_911 |
152 | LD L,A |
||
153 | LD A,IYL |
||
154 | AND A |
||
155 | LD A,L |
||
156 | JR NZ,.INIT91_2 |
||
1186 | savelij | 157 | LD BC,WIN_P2 |
781 | savelij | 158 | XOR A |
159 | OUT (C),A |
||
160 | .INIT91_2 POP BC |
||
161 | POP HL |
||
162 | RET |
||
507 | savelij | 163 | |
1186 | savelij | 164 | .INI_912 LD BC,WIN_P2 |
781 | savelij | 165 | XOR A |
166 | OUT (C),A |
||
1056 | savelij | 167 | LD A,0xFF |
781 | savelij | 168 | POP BC |
169 | POP HL |
||
170 | RET |
||
171 | |||
172 | .SEND_CMD_TEST PUSH HL |
||
173 | PUSH DE |
||
789 | savelij | 174 | LD D,B |
781 | savelij | 175 | LD E,C |
176 | JR .SEND_CMD_1 |
||
782 | savelij | 177 | |
1056 | savelij | 178 | ; ⠭ ॣ HDD |
179 | ; 室: |
||
781 | savelij | 180 | ; IXH = HDD |
181 | ; BCDE = LBA ᥪ |
||
182 | ; A = ⢮ ᥪ |
||
183 | ; A' = ன⢠ ( 0 = 0/1 - master/slave) |
||
184 | .SEND_CMD LD IXL,A |
||
185 | CALL ICOM_DEV |
||
186 | DB _SET_DEVICE |
||
187 | PUSH HL |
||
188 | PUSH DE |
||
789 | savelij | 189 | LD D,B |
781 | savelij | 190 | LD E,C |
952 | savelij | 191 | .SEND_CMD_1 |
192 | ; LD BC,0XFF<<8+PN_3F6 |
||
193 | ; LD A,%00001010 |
||
194 | ; OUT (C),A |
||
781 | savelij | 195 | LD C,PN_1F6 |
196 | LD A,D |
||
952 | savelij | 197 | AND 0xF0 |
781 | savelij | 198 | OUT (C),A |
199 | LD C,PN_1F7 |
||
200 | LD HL,HDD_TIME_OUT |
||
201 | .SEND_WAIT DEC HL |
||
202 | LD A,H |
||
203 | OR L |
||
204 | JR Z,.SEND_ERROR1 |
||
205 | IN A,(C) |
||
789 | savelij | 206 | ; AND A |
207 | ; JR Z,.SEND_CMD_2;.SEND_ERROR7 |
||
781 | savelij | 208 | BIT 7,A |
209 | JR NZ,.SEND_WAIT |
||
210 | BIT 6,A |
||
211 | JR Z,.SEND_WAIT |
||
789 | savelij | 212 | .SEND_CMD_2 LD C,PN_1F6 |
781 | savelij | 213 | OUT (C),D |
214 | LD C,PN_1F5 |
||
215 | OUT (C),E |
||
216 | POP DE |
||
217 | LD C,PN_1F4 |
||
218 | OUT (C),D |
||
219 | LD C,PN_1F3 |
||
220 | OUT (C),E |
||
221 | LD C,PN_1F2 |
||
222 | LD A,IXL |
||
223 | OUT (C),A |
||
224 | LD C,PN_1F1 |
||
225 | XOR A |
||
226 | OUT (C),A |
||
227 | LD C,PN_1F7 |
||
228 | LD A,IXH |
||
229 | OUT (C),A |
||
230 | POP HL |
||
231 | .DRIVER_CHECK_DEVICE |
||
232 | XOR A |
||
233 | .HDDOFF RET |
||
234 | |||
1056 | savelij | 235 | .SEND_ERROR7 LD A,7 ; 㦥 CD/DVD |
781 | savelij | 236 | JR .SEND_ERROR |
237 | |||
1056 | savelij | 238 | .SEND_ERROR1 LD A,1 ; 訡 HDD TIMEOUT |
781 | savelij | 239 | .SEND_ERROR POP HL |
240 | POP HL |
||
241 | RET |
||
242 | |||
782 | savelij | 243 | .READ_ID_TEST PUSH IX |
244 | PUSH DE |
||
245 | PUSH BC |
||
952 | savelij | 246 | ; LD IXH,_IDENTIFY_DEVICE |
782 | savelij | 247 | CALL .SEND_CMD_TEST |
248 | JR .READID_WAIT_ |
||
249 | |||
1056 | savelij | 250 | ; ⥭ ᥪ 䨪樨 |
251 | ; 室: |
||
781 | savelij | 252 | ; HL = ⥭ |
253 | ; A' = ன⢠ ( 0 = 0/1 - master/slave) |
||
254 | .DRIVER_READ_ID |
||
255 | PUSH IX |
||
256 | PUSH DE |
||
257 | PUSH BC |
||
789 | savelij | 258 | LD DE,0 |
259 | LD C,E |
||
260 | EX AF,AF' |
||
261 | BIT 0,A |
||
952 | savelij | 262 | LD B,0xE0 |
789 | savelij | 263 | JR Z,.DRVRDID1 |
952 | savelij | 264 | LD B,0xF0 |
265 | .DRVRDID1 LD IXH,_IDENTIFY_DEVICE |
||
789 | savelij | 266 | CALL .SEND_CMD_TEST |
782 | savelij | 267 | .READID_WAIT_ AND A |
781 | savelij | 268 | JR NZ,.READID_ERROR |
269 | LD DE,HDD_TIME_OUT |
||
270 | .READID_WAIT DEC DE |
||
271 | LD A,D |
||
272 | OR E |
||
273 | JR Z,.READID_ERROR1 |
||
789 | savelij | 274 | ; LD BC,0XFF << 8 + PN_1F4 |
275 | ; IN E,(C) |
||
276 | ; LD C,PN_1F5 |
||
277 | ; IN D,(C) |
||
278 | ; PUSH HL |
||
279 | ; LD HL,0XEB14 |
||
280 | ; AND A |
||
281 | ; SBC HL,DE |
||
282 | ; POP HL |
||
283 | ; JR Z,.SEND_ERROR7 |
||
782 | savelij | 284 | LD BC,0XFF << 8 + PN_1F7 |
781 | savelij | 285 | IN A,(C) |
286 | BIT 7,A |
||
287 | JR NZ,.READID_WAIT |
||
288 | BIT 1,A |
||
289 | JR NZ,.READID_ERROR6 |
||
290 | BIT 3,A |
||
291 | JR Z,.READID_WAIT |
||
292 | CALL .READSEC |
||
293 | XOR A |
||
294 | JR .READID_ERROR |
||
295 | |||
1056 | savelij | 296 | .READID_ERROR6 LD A,6 ; 訡 믮 |
781 | savelij | 297 | JR .READID_ERROR |
298 | |||
1056 | savelij | 299 | .READID_ERROR1 LD A,1 ; 訡 ⠩ |
781 | savelij | 300 | .READID_ERROR |
301 | POP BC |
||
302 | POP DE |
||
303 | POP IX |
||
304 | RET |
||
305 | |||
1056 | savelij | 306 | ; ⥭ ᥪ HDD |
307 | ; 室: |
||
781 | savelij | 308 | ; HL = ⥭ |
309 | ; BCDE = ᥪ |
||
310 | ; A = ⢮ ᥪ |
||
311 | ; A' = ன⢠ ( 0 = 0/1 - master/slave) |
||
312 | .DRIVER_READ_SECTORS |
||
313 | PUSH IX |
||
314 | PUSH DE |
||
315 | PUSH BC |
||
316 | LD IXL,A |
||
952 | savelij | 317 | LD IXH,_READ_SECTORS |
781 | savelij | 318 | CALL .SEND_CMD |
319 | AND A |
||
320 | JR NZ,.READID_ERROR |
||
321 | .READ_WAIT1 LD DE,HDD_TIME_OUT |
||
322 | .READ_WAIT DEC DE |
||
323 | LD A,D |
||
324 | OR E |
||
325 | JR Z,.READID_ERROR1 |
||
1056 | savelij | 326 | LD BC,0xFF << 8 + PN_1F7 |
781 | savelij | 327 | IN A,(C) |
328 | BIT 7,A |
||
329 | JR NZ,.READ_WAIT |
||
330 | BIT 1,A |
||
331 | JR NZ,.READID_ERROR6 |
||
332 | BIT 3,A |
||
333 | JR Z,.READ_WAIT |
||
334 | CALL .READSEC |
||
335 | DEC IXL |
||
336 | JR NZ,.READ_WAIT1 |
||
337 | XOR A |
||
338 | JR .READID_ERROR |
||
339 | |||
1056 | savelij | 340 | ; ᥪ HDD |
341 | ; 室: |
||
781 | savelij | 342 | ; HL = |
343 | ; BCDE = ᥪ |
||
344 | ; A = ⢮ ᥪ |
||
345 | ; A' = ன⢠ ( 0 = 0/1 - master/slave) |
||
346 | .DRIVER_WRITE_SECTORS |
||
347 | PUSH IX |
||
348 | PUSH DE |
||
349 | PUSH BC |
||
350 | LD IXL,A |
||
952 | savelij | 351 | LD IXH,_WRITE_SECTORS |
781 | savelij | 352 | CALL .SEND_CMD |
353 | AND A |
||
354 | JR NZ,.READID_ERROR |
||
355 | .WRITE_WAIT1 LD DE,HDD_TIME_OUT |
||
356 | .WRITE_WAIT DEC DE |
||
357 | LD A,D |
||
358 | OR E |
||
359 | JR Z,.READID_ERROR1 |
||
1056 | savelij | 360 | LD BC,0xFF << 8 + PN_1F7 |
781 | savelij | 361 | IN A,(C) |
362 | BIT 7,A |
||
363 | JR NZ,.WRITE_WAIT |
||
364 | BIT 1,A |
||
365 | JR NZ,.READID_ERROR6 |
||
366 | BIT 3,A |
||
367 | JR Z,.WRITE_WAIT |
||
368 | CALL .WRITSEC |
||
369 | DEC IXL |
||
370 | JR NZ,.WRITE_WAIT1 |
||
371 | XOR A |
||
372 | JR .READID_ERROR |
||
373 | |||
1056 | savelij | 374 | ; read sector (512 bytes) |
781 | savelij | 375 | ; switch (HDDTYPE) |
376 | ; case _NEMO |
||
377 | .READSEC LD A,IYL |
||
378 | BIT 1,A |
||
1056 | savelij | 379 | JR NZ,.RD_MEM |
781 | savelij | 380 | AND A |
1056 | savelij | 381 | JR NZ,.RD_MEM2 |
382 | ; 譨 맮. ⥭ ᥪ 맢襣 |
||
383 | .RD_MEM |
||
384 | READ_7FFD |
||
385 | AND 0x10 |
||
781 | savelij | 386 | LD BC,(B0_CPU2) |
1056 | savelij | 387 | JR Z,.RD_MEM1 |
781 | savelij | 388 | LD BC,(B1_CPU2) |
1056 | savelij | 389 | .RD_MEM1 LD A,0x37 |
781 | savelij | 390 | OR B |
391 | LD B,A |
||
392 | LD A,C |
||
393 | LD C,LOW (WIN_A0) |
||
394 | OUT (C),A |
||
1056 | savelij | 395 | ; ७ 맮. ⥭ ᥪ ७ |
396 | .RD_MEM2 LD BC,PN_1F0 |
||
952 | savelij | 397 | IF ENABLE_INIR |
781 | savelij | 398 | INIR |
399 | INIR |
||
952 | savelij | 400 | ELSE |
1056 | savelij | 401 | LD A,0x40 |
952 | savelij | 402 | LD C,PN_1F0 |
1056 | savelij | 403 | .READSC1 |
404 | REPT 4 |
||
952 | savelij | 405 | IN E,(C) |
406 | INC C |
||
407 | IN D,(C) |
||
408 | DEC C |
||
409 | LD (HL),E |
||
410 | INC HL |
||
411 | LD (HL),D |
||
412 | INC HL |
||
1056 | savelij | 413 | ENDM |
952 | savelij | 414 | DEC A |
415 | JR NZ,.READSC1 |
||
416 | ENDIF |
||
1186 | savelij | 417 | LD BC,WIN_P2 |
781 | savelij | 418 | XOR A |
419 | OUT (C),A |
||
420 | RET |
||
421 | |||
1056 | savelij | 422 | ; save sector (512 bytes) |
781 | savelij | 423 | ; switch (HDDTYPE) |
424 | ; case _NEMO |
||
1056 | savelij | 425 | .WRITSEC LD A,IYL |
426 | BIT 1,A |
||
427 | JR NZ,.WR_MEM |
||
428 | AND A |
||
429 | JR NZ,.WR_MEM2 |
||
430 | ; 譨 맮. ᥪ 맢襣 |
||
431 | .WR_MEM |
||
432 | READ_7FFD |
||
433 | AND 0x10 |
||
434 | LD BC,(B0_CPU2) |
||
435 | JR Z,.WR_MEM1 |
||
436 | LD BC,(B1_CPU2) |
||
437 | .WR_MEM1 LD A,0x37 |
||
438 | OR B |
||
439 | LD B,A |
||
440 | LD A,C |
||
441 | LD C,LOW (WIN_A0) |
||
442 | OUT (C),A |
||
443 | ; ७ 맮. ᥪ ७ |
||
444 | .WR_MEM2 EXX |
||
781 | savelij | 445 | LD HL,0 |
1056 | savelij | 446 | ADD HL,SP ; ࠭ ⥪ |
781 | savelij | 447 | EXX |
1056 | savelij | 448 | LD SP,HL ; |
449 | LD A,0x40 |
||
781 | savelij | 450 | LD HL,PRTN_RW |
1056 | savelij | 451 | .WR_SEC1 |
452 | REPT 4 |
||
781 | savelij | 453 | POP DE |
454 | LD C,L |
||
455 | OUT (C),D |
||
456 | LD C,H |
||
457 | OUT (C),E |
||
1056 | savelij | 458 | ENDM |
781 | savelij | 459 | DEC A |
460 | JR NZ,.WR_SEC1 |
||
461 | LD HL,0 |
||
1056 | savelij | 462 | ADD HL,SP ; |
781 | savelij | 463 | EXX |
1056 | savelij | 464 | LD SP,HL ; ⥪ |
781 | savelij | 465 | EXX |
1186 | savelij | 466 | LD BC,WIN_P2 |
1056 | savelij | 467 | XOR A |
468 | OUT (C),A |
||
781 | savelij | 469 | RET |