Subversion Repositories pentevo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
801 savelij 1
 
2
hddstat         EQU 0XF0
3
hddcmd          EQU 0XF0
4
hddhead         EQU 0XD0
5
hddcylhi        EQU 0XB0
6
hddcyllo        EQU 0X90
7
hddsec          EQU 0X70
8
hddcount        EQU 0X50
9
hdderr          EQU 0X30
10
hdddatlo        EQU 0X10
11
hdddathi        EQU 0X11
12
hddupr          EQU 0XC8
13
hdduprON        EQU 0
14
 
15
HDDBINI CALL SET_7FFD_0
16
        LD HL,HDDREAD
17
        LD DE,0XE800    ;0X5B60
18
        LD B,8          ;BC,HDDRDLN
19
        LDIR
20
        RET
21
 
22
HDDBOOT DI
23
        CALL HDDBINI
24
INIT0   LD A,0XA0       ;MASTER+CHS ���������
25
        LD (devnum),A
26
        CALL SELDEVICE
27
        LD A,0X0C
28
        LD BC,hddupr
29
        PUSH BC
30
        CALL OUT_A      ;��稭��� ���
31
        LD B,0
32
        DJNZ $
33
        LD A,8
34
        POP BC
35
        CALL OUT_A      ;��ᨫ�!
36
        CALL NO_BSY
37
        LD A,0X10       ;������� RECALIBRATE
38
        CALL HDSC       ;������ COMMAND
39
INIT2   IN A,(LOW (hddstat))    ;�⥭�� STATUS REGISTER (0111)
40
        BIT 7,A         ;�஢�ઠ ��� BSY �������� HDD
41
        JR NZ,INIT2     ;���室 �᫨ ������⥫� �����
42
        AND 0XE9
43
        CP 0X40
44
        ;CP 0X50                ;�஢�ઠ ��⮢ DSC (���-�� �������)
45
                        ;� DRDY(��⮢����� HDD)
46
        JR NZ,INIT0     ;�᫨ ��⠭������ - ��室
47
        JP 0XE800
48
;,**************************************************************
49
;������ ��������
50
HDDREAD PHASE 0XE800
51
        CALL NO_BSY     ;�������� � �������� ��������,�������,�������
52
        LD BC,hddhead   ;������� ����������/�������
53
        LD A,0XA0       ;������� 0,���� MASTER 0XB0-SLAVE
54
        CALL OUT_A
55
        LD BC,hddcylhi  ;������� �������� (HI)
56
        XOR A
57
        CALL OUT_A
58
        LD BC,hddcyllo  ;������� �������� (LOW)
59
        CALL OUT_A
60
        LD BC,hddsec    ;������� ������ �������
61
        LD A,3          ;����� �������
62
        CALL OUT_A
63
        LD BC,hddcount  ;������� �������� �������
64
        LD A,0X30       ;������� ��������  24K
65
        CALL OUT_A
66
        LD A,0X20
67
        CALL HDSC       ;������� "������"
68
        LD HL,0X6000
69
        PUSH HL
70
        LD B,0X30
71
READ1   PUSH BC
72
        CALL WAIT_DRQ
73
;������ ������
74
        LD B,0
75
READ_1  PUSH BC
76
        LD BC,hdddatlo  ;������� ����
77
        INI
78
        LD BC,hdddathi  ;������� ����
79
        INI
80
        POP BC
81
        DJNZ READ_1
82
        POP         BC
83
        DJNZ       READ1
84
        RET    
85
 
86
;�������� ���������� �������� ������
87
WAIT_DRQ
88
        CALL    IN_HDDSTAT
89
        BIT     3,A
90
        RET     NZ
91
        JR      WAIT_DRQ
92
 
93
;������� ������� �� ����
94
HDSC    PUSH AF
95
        CALL SELDEVICE
96
        POP AF
97
        LD BC,hddcmd
98
        CALL OUT_A
99
;�������� ������������ ����������
100
NO_BSY  CALL IN_HDDSTAT
101
        RLCA
102
        RET NC
103
        JR NO_BSY
104
 
105
IN_HDDSTAT
106
        CALL SELDEVICE
107
        LD BC,hddstat
108
IN_A    IN A,(C)
109
        RET    
110
 
111
SELDEVICE
112
devnum  EQU $+1
113
        LD A,device
114
        LD BC,hddhead
115
OUT_A   OUT (C),A
116
        RET
117
 
118
CDBOOTGO
119
 
120
;�����稪 䠩�� "AUTORUN.ZX" � CD �� ����� 0X6000
121
;SP=0X6000, DI
122
;��।��� ��� � ॣ�����:
123
;A=0XA0 (master) ��� 0XB0 (slave)
124
;B=⨯ ��������:
125
 ;0=PENTAGON, 1=ATM, 2=SCORPION, 3=PROFI, 4=SPRINTER
126
;C=⨯ ����஫��� IDE:
127
 ;0=NEMO, 1=ATM, 2=SMUC, 3=PROFI, 4=SPRINTER
128
;D=��:
129
 ;0=ENGLISH, 1=�������
130
;E=���� COVOX:
131
 ;0XFB=ATM/PENTAGON, 0XFF=���������
132
;HL=����㯭� �����०��� (������뢠���� �� OR)
133
 ;1=512x192 BW VMG
134
 ;2=384x304 ZX AC
135
 ;4=256x192 15 AC
136
 ;8=320x200 16 ATM
137
device          EQU 0XB0
138
comptype        EQU 0
139
idetype         EQU 0
140
language        EQU 1
141
COVPORT         EQU 0XFB
142
videomodes      EQU 4;8
143
 
144
;===============���� �����ঠ�� ⮫쪮 NEMO,SMUC,ATM============
145
;        IF     comptype-1
146
;atm=1
147
;        ELSE   
148
;atm=0
149
;        ENDIF  
150
;        IF     idetype-2
151
;smuc=1|atm
152
;        ELSE   
153
;smuc=atm
154
;        ENDIF  
155
;       IFN     smuc
156
;      IFN      atm
157
;�奬� ATM:
158
;hddstat=0XFEEF
159
;hddcmd=0XFEEF
160
;hddhead=0XFECF
161
;hddcylhi=0XFEAF
162
;hddcyllo=0XFE8F
163
;hddsec=0XFE6F
164
;hddcount=0XFE4F
165
;hdderr=0XFE2F
166
;hdddatlo=0XFE0F
167
;hdddathi=0XFF0F
168
;hddupr=0XFEBE ;�� ��⠭�������� b7 FFBA
169
;hdduprON=0XFFBA
170
;hddupr1=0XF7
171
;hddupr0=0X77
172
;      ELSE     
173
;�奬� SMUC:
174
;hddstat=0XFFBE
175
;hddcmd=0XFFBE
176
;hddhead=0XFEBE
177
;hddcylhi=0XFDBE
178
;hddcyllo=0XFCBE
179
;hddsec=0XFBBE
180
;hddcount=0XFABE
181
;hdderr=0XF9BE
182
;hdddatlo=0XF8BE
183
;hdddathi=0XD8BE
184
;hddupr=0XFEBE ;�� ��⠭�������� b7 FFBA
185
;hdduprON=0XFFBA
186
;hddupr1=0XF7
187
;hddupr0=0X77
188
;      ENDIF    
189
;       ELSE    
190
;�奬� Nemo:
191
;hddstat=0XF0
192
;hddcmd=0XF0
193
;hddhead=0XD0
194
;hddcylhi=0XB0
195
;hddcyllo=0X90
196
;hddsec=0X70
197
;hddcount=0X50
198
;hdderr=0X30
199
;hdddatlo=0X10
200
;hdddathi=0X11
201
;hddupr=0XC8
202
;hdduprON=0
203
;       ENDIF   
204
 
205
SECBUF          EQU 0X6000
206
 
207
        ;DISP           0XE800
208
begin
209
;GO
210
;        LD     SP,0X6000
211
;        LD     (IY+1),0XCC
212
;        EI     
213
;        HALT   
214
;        XOR    A
215
;        OUT    (-2),A
216
;        LD     DE,0X5801
217
;        LD     H,D,L,A
218
;        LD     BC,767
219
;        LD     (HL),L
220
;        LDIR   
221
 
222
;       IFN     atm
223
;        CALL   0X3D46   ;�맮� "�஢��筮�" �窨 � (v)TR-DOS
224
;        OR     A         ;�᫨ �� 0,vTR-DOS ��� � ��� �� ������塞
225
;        CALL   Z,0X3C98 ;�맮� �ਣ��� ������� ��� TRD/vTRD
226
;       ENDIF   
227
 
228
;���樠������
229
iniini
230
      ; LD A,device ;0XB0=slave
231
      ; LD BC,hddhead
232
      ; CALL OUT_A ;���� ����� NO_BSY
233
        CALL    NO_BSY
234
    ;LD A,0XFE
235
    ;IN A,(-2)
236
    ;RRA
237
    ;JNC SKIPINI
238
      ;LD A,0X10        ;
239
      ;CALL HDSC       ;ZET9 ��� HDD
240
        LD      A,0X08        ;
241
        CALL    HDSC       ;SMT ��� CD (��� ��� ATAPI)
242
      ;RET C ;ATAPI only
243
      ; LD A,device ;0XB0=slave   ;
244
      ; LD BC,hddhead            ;BUDDER
245
      ; CALL OUT_A ;���� � HDSC  ;���� �� ������祭��� CD
246
                                 ;�� �뤠�� EB14!!!
247
        LD      A,0XEC ;identify
248
        CALL    HDSC
249
      ;RET C ;��� CD �뤠�� �訡�� (VEGA)
250
 
251
        LD      B,30
252
        HALT   
253
        DJNZ    $-1
254
 
255
        CALL    LEN_TO_HL
256
        LD      BC,0XEB14
257
        OR      A
258
        SBC     HL,BC
259
       JP       NZ,iniini;0 ;HDD
260
       ;LD A,1
261
       ;OUT (-2),A
262
 
263
    LD  HL,AP_00
264
    CALL        SEND_ATAPI ;VEGA
265
 
266
        LD      HL,AP_1x
267
        CALL    SEND_ATAPI
268
        LD      B,30
269
        HALT   
270
        DJNZ    $-1
271
SKIPINI
272
        DI     
273
 
274
       ;LD A,2
275
       ;OUT (-2),A
276
 
277
      ;ᥩ�� ����� ᥪ��=0,0,0,0
278
        CALL    READCDSECBUF ;���� �� ࠡ�⠥� READTOC
279
        LD      HL,AP_READTOC
280
        CALL    SEND_ATAPI
281
      ;RET C
282
        CALL    NO_BSY
283
      ;RET C
284
        CALL    WAIT_DRQ
285
      ;RET C
286
        CALL    LEN_TO_HL
287
        LD      B,H
288
        LD C,L
289
        LD      HL,SECBUF
290
        CALL    TRANS_IN
291
        CALL    NO_BSY
292
 
293
       ;LD A,3
294
       ;OUT (-2),A
295
 
296
     ;��६ ��� ���� (�।��� ������)
297
        LD      HL,SECBUF+1
298
        LD      A,(HL)
299
        ADD     A,-10
300
        LD      L,A
301
        LD      D,0X87
302
       ;CY=1
303
        CALL    LOADER ;��㧨� ��砫� ��ᨨ (0X8800 ����)
304
 
305
        LD      BC,0X80A2
306
        ADD     HL,BC
307
       ;CY=0
308
        CALL    LOADER ;��㧨� ��୥��� ��⠫��
309
       ;HL=SECBUF
310
 
311
       ;LD A,4
312
       ;OUT (-2),A
313
 
314
FNDIDLOOP
315
       PUSH     HL
316
        LD      C,33
317
        ADD     HL,BC
318
        LD      DE,autorunname
319
        LD      C,autorunnamesz
320
FNDID0  LD      A,(DE)
321
        CPI    
322
       JR NZ,FNDIDN
323
        INC     DE
324
        JP      PE,FNDID0
325
       POP      HL
326
        LD      C,6
327
        ADD     HL,BC
328
       ;CY=0
329
 
330
       ;LD A,5
331
       ;OUT (-2),A
332
 
333
        CALL    LOADER ;��㧨� autorun.zx
334
       PUSH     HL
335
        LD      A,device ;0XB0=slave
336
        LD      BC,comptype*256+idetype ;1=ATM,1=ATM
337
        LD      DE,language*256+COVPORT ;1=RUS,0XFB
338
        LD      HL,videomodes ;8=ATM
339
       RET     
340
FNDIDN
341
       POP      HL
342
        LD      C,(HL)
343
        INC     HL
344
        LD      B,(HL)
345
        DEC     HL
346
       LD       A,B
347
       OR       C
348
       JR NZ,NOPADDING
349
        INC     H
350
        LD      L,A
351
NOPADDING
352
        ADD     HL,BC
353
        LD      A,H
354
        CP      64
355
       JR NC,FNDIDLOOP
356
        RST     0
357
 
358
LOADER
359
;��㧨� 䠩�
360
;HL 㪠�뢠�� �� ���� ���न��� 䠩�� � motorola ���浪�
361
;CY=1: ࠧ��� � DE
362
;CY=0: ࠧ��� � (HL+4)
363
       PUSH     DE
364
        LD      DE,SECTOR
365
        LD      BC,4
366
        LDIR   
367
       POP      DE
368
        JR C,$+5
369
         LD     E,(HL)
370
         INC    HL
371
         LD     D,(HL)
372
        EX DE,HL       
373
        SCF    
374
        LD      DE,2048
375
        INC     B
376
        SBC     HL,DE
377
        JR NC,$-3
378
        LD      HL,SECBUF
379
       PUSH     HL
380
LOADER0 PUSH    BC
381
        CALL    READCD
382
        PUSH    HL
383
        LD      HL,SECTOR+3
384
        INC     (HL)
385
        DEC     HL
386
        JR Z,$-2
387
        POP     HL
388
        POP     BC
389
        DJNZ    LOADER0
390
       POP      HL
391
        RET    
392
 
393
;***************************************************************
394
;OUT_A
395
;       IFN     smuc
396
;      IFN      atm
397
;        PUSH   AF,BC
398
;        CALL   OPENPORTS
399
;        POP    BC,AF
400
;        OUT    (C),A
401
;        JR     CLOSEPORTS
402
;OPENPORTS
403
;        LD     A,%10101011
404
;        LD     BC,0X2A53
405
;        PUSH   BC
406
;        LD     BC,0X4177
407
;        JP     0X3D2F
408
;      ELSE     
409
;        LD     IX,0X3FF0
410
;        PUSH   IX
411
;        JP     0X3D2F
412
;      ENDIF    
413
;       ELSE    ;nemo
414
;        OUT    (C),A
415
;        RET    
416
;       ENDIF   
417
 
418
;IN_HDDSTAT
419
;      LD       A,device
420
;      LD       BC,hddhead
421
;      CALL     OUT_A
422
;        LD     BC,hddstat
423
;IN_A
424
;       IFN     smuc
425
;      IFN      atm
426
;        PUSH   BC
427
;        CALL   OPENPORTS
428
;        POP    BC
429
;        IN     A,(C)
430
;CLOSEPORTS
431
;        PUSH   AF,BC
432
;        LD     A,%10101011
433
;        LD     BC,0XFF77
434
;        OUT    (C),A
435
;        POP    BC,AF
436
;        RET    
437
;      ELSE     
438
;        LD     IX,0X3FF3
439
;        PUSH   IX
440
;        JP     0X3D2F
441
;      ENDIF    
442
;       ELSE    
443
;        IN     A,(C)
444
;        RET    
445
;       ENDIF   
446
 
447
;������� ������� �� ����
448
;HDSC
449
;      PUSH     AF
450
;      LD       A,device
451
;      LD       BC,hddhead
452
;      CALL     OUT_A
453
;      POP      AF
454
;        LD     BC,hddcmd
455
;        CALL   OUT_A
456
;�������� ������������ ����������
457
;NO_BSY
458
;        CALL   IN_HDDSTAT
459
;        RLCA   
460
;       RET     NC
461
;        JR     NO_BSY
462
;�������� ���������� �������� ������
463
;WAIT_DRQ
464
;        CALL   IN_HDDSTAT
465
;        BIT    3,A
466
;       RET     NZ
467
;        JR     WAIT_DRQ
468
 
469
;�����E ����� �� �������� ��������
470
LEN_TO_HL
471
        LD      BC,hddcyllo
472
        CALL    IN_A
473
        LD      L,A
474
        LD      BC,hddcylhi
475
        CALL    IN_A
476
        LD      H,A
477
        RET    
478
 
479
;IN:HL-����� ������ ������
480
;   BC-���-�� ����
481
TRANS_IN
482
        PUSH    BC
483
        CALL    NO_BSY
484
       ;POP BC
485
      ;RET C
486
       ;PUSH BC
487
        CALL    WAIT_DRQ
488
        POP     BC
489
      ;RET C
490
        INC     BC
491
        SRL     B
492
        RR      C
493
TR_IN0  PUSH    BC
494
        LD      BC,hdddatlo
495
        CALL    IN_A
496
        LD      (HL),A
497
        INC     HL
498
        LD      BC,hdddathi
499
        CALL    IN_A
500
        LD      (HL),A
501
        POP     BC
502
        CPI    
503
        JP      PE,TR_IN0
504
        RET    
505
 
506
;�������� ATAPI-������
507
SEND_ATAPI
508
      ;LD A,device ;0XB0=slave
509
      ;LD BC,hddhead
510
      ;CALL OUT_A
511
        LD      BC,hddcyllo
512
        XOR     A
513
        CALL    OUT_A
514
        LD      BC,hddcylhi
515
        LD      A,HIGH (2048)
516
        CALL    OUT_A
517
        LD      A,0XA0
518
        CALL    HDSC
519
      ;RET C
520
        LD      B,6
521
TR_OUT0 PUSH    BC
522
        INC     HL
523
        LD      A,(HL)
524
        LD      BC,hdddathi
525
        CALL    OUT_A
526
        DEC     HL
527
        LD      A,(HL)
528
        LD      BC,hdddatlo
529
        CALL    OUT_A
530
        INC     HL
531
        INC HL
532
        POP     BC
533
        DJNZ    TR_OUT0
534
        RET    
535
READCDSECBUF
536
        LD      HL,SECBUF
537
READCD
538
;������ �������
539
lOAD_SECTOR
540
       PUSH     HL
541
        LD      HL,AP_READ
542
        CALL    SEND_ATAPI
543
       POP      HL
544
      ;RET C
545
;�뢠�� �����,�� CHECK CONDITION (D0 �����)=0,
546
;� �� �⮬ DRQ �� �뤠����!
547
       ;CALL IN_HDDSTAT
548
       ;RRA
549
      ;RET C
550
        CALL    NO_BSY ;���� ��᭥� �� ����-樨 CD
551
      ;RET C
552
       ;CALL WAIT_DRQ ;����� ��᭥�, �᫨ ������ ᫨誮� ࠭�
553
      ;RET C     ;��᫥ ��室� ࠧ�������, ���� ������ � �⠥�
554
     ;�������� DRQ �� �楯�� Budder'�
555
        LD      DE,0
556
RDCDDRQ CALL    IN_HDDSTAT
557
        BIT     3,A
558
       JR NZ,READ_P2
559
        INC     DE
560
        BIT     2,D ;4,D
561
        JR Z,RDCDDRQ
562
        PUSH    HL
563
        LD      HL,AP_00
564
        CALL    SEND_ATAPI
565
        POP     HL
566
        JR      lOAD_SECTOR
567
READ_P2
568
        LD      BC,2048
569
        CALL    TRANS_IN
570
        JP      NO_BSY
571
 
572
autorunname
573
        DB      "AUTORUN.ZX"
574
autorunnamesz   EQU $-autorunname
575
 
576
;ATAPI-����� "��������"
577
AP_00
578
        DW      0
579
        DUPL    10,0
580
 
581
;ATAPI-����� "SPEED 1x"
582
AP_1x
583
        DW      0XBB
584
        DB      0
585
        DB      176 ;1x=176k/s
586
        DUPL    8,0
587
 
588
;ATAPI-����� "������"
589
AP_READ
590
;       IFN     0
591
;        DW     0XBE   ;"READ CD"
592
;SECTOR  DB     0,0,0,0
593
;        DB     0
594
;        DB     0,1   ;=1 ᥪ��
595
;        DB     0X10   ;�⠥� ⮫쪮 �����
596
;        DB     0,0
597
;       ELSE    
598
        DW      0X28   ;"READ(10)"
599
SECTOR  DB      0,0,0,0
600
        DB      0
601
        DB      0,1   ;=1 ᥪ��
602
        DB      0
603
        DB      0,0
604
;       ENDIF   
605
AP_READTOC
606
        DW      0X43   ;SCMSF=0,�.�.ᥪ���,� �� MSF
607
        DB      0     ;FORMAT=0:�� ��ᨨ
608
        DUPL    3,0
609
        DB      0     ;� 1-� ��ᨨ
610
        DB      HIGH (2048) ;����� ⠡�
611
        DB      LOW (2048)
612
        DB      0X00   ;FUNC
613
        DUPL    2,0
614
 
615
;end
616
;       DISPLAY end-begin
617
;        ORG    0X5CDD
618
;        DB     "boot    B"
619
;        INCLUDE        "mrip.a80"      ;,0XC0
620
 
621
        DEPHASE