Subversion Repositories pentevo

Rev

Rev 1056 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
507 savelij 1
 
1120 savelij 2
; LAST UPDATE: 10.02.2024 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
1056 savelij 127
        EVOPORT WIN_P6,ZXSTD_CPU2
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
157
                LD BC,WIN_P6
158
                XOR A
159
                OUT (C),A
160
.INIT91_2       POP BC
161
                POP HL
162
                RET
507 savelij 163
 
781 savelij 164
.INI_912        LD BC,WIN_P6
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
781 savelij 417
                LD BC,WIN_P6
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
1056 savelij 466
                LD BC,WIN_P6
467
                XOR A
468
                OUT (C),A
781 savelij 469
                RET