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 |