Subversion Repositories pentevo

Rev

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

Rev Author Line No. Line
635 savelij 1
 
2
;LAST UPDATE: 05.02.2014 savelij
3
 
4
;᭠砫� �������� atm=0, ���㥬 ZXRAR header=off
5
;��⮬ �������� atm=1
6
COVPORT         EQU 251
7
sound           EQU 1
8
;atm            EQU 0
9
smuc            EQU atm
10
sectcycl        EQU 8 ;1 �� ��� ��㪮���
11
 
12
reaction        EQU 5;4 ;�६� ॠ�樨
13
z               EQU 6;5    ;����প� �⭮�⥫쭮 T��/1.7554
14
 
15
                IF smuc=1;       IFN    smuc
16
                IF atm=1;      IFN      atm
17
;�奬� ATM:
18
hddstat         EQU 0XFEEF
19
hddcmd          EQU 0XFEEF
20
hddhead         EQU 0XFECF
21
hddcylhi        EQU 0XFEAF
22
hddcyllo        EQU 0XFE8F
23
hddsec          EQU 0XFE6F
24
hddcount        EQU 0XFE4F
25
hdderr          EQU 0XFE2F
26
hdddatlo        EQU 0XFE0F
27
hdddathi        EQU 0XFF0F
28
hddupr          EQU 0XFEBE ;�� ��⠭�������� b7 FFBA
29
hdduprON        EQU 0XFFBA
30
hddupr1         EQU 0XF7
31
hddupr0         EQU 0X77
32
      ELSE     
33
;�奬� SMUC:
34
hddstat         EQU 0XFFBE
35
hddcmd          EQU 0XFFBE
36
hddhead         EQU 0XFEBE
37
hddcylhi        EQU 0XFDBE
38
hddcyllo        EQU 0XFCBE
39
hddsec          EQU 0XFBBE
40
hddcount        EQU 0XFABE
41
hdderr          EQU 0XF9BE
42
hdddatlo        EQU 0XF8BE
43
hdddathi        EQU 0XD8BE
44
hddupr          EQU 0XFEBE ;�� ��⠭�������� b7 FFBA
45
hdduprON        EQU 0XFFBA
46
hddupr1         EQU 0XF7
47
hddupr0         EQU 0X77
48
      ENDIF    
49
       ELSE    
50
;�奬� Nemo:
51
hddstat         EQU 0XF0
52
hddcmd          EQU 0XF0
53
hddhead         EQU 0XD0
54
hddcylhi        EQU 0XB0
55
hddcyllo        EQU 0X90
56
hddsec          EQU 0X70
57
hddcount        EQU 0X50
58
hdderr          EQU 0X30
59
hdddatlo        EQU 0X10
60
hdddathi        EQU 0X11
61
hddupr          EQU 0XC8
62
hdduprON        EQU 0
63
       ENDIF   
64
 
65
SECBUF          EQU 0XB500
66
LASTSND         EQU 0XB500
67
SNDLEN          EQU 2048
68
pusto           EQU 0XBF00
69
PROUTBUF        EQU 0XBF00 ;32 bytes �ࠩ� ᨬ����
70
TY              EQU 0XBD00 ;512 ;��易⥫쭮 ��� ATM A8=1!!!
71
RARS            EQU 0X4000 ;��� �ᯠ����� ��࠭��
72
addr            EQU 0X9F00 ;��� �ᯠ����� ��࠭�� (<0XA000)
73
 
74
                IF atm=1;       IFN     atm
75
pgspr           EQU 0X10
76
pgfnt           EQU 0X10
77
pgIQ            EQU 0X10
78
pgpic           EQU 0X14
79
pgmuz           EQU 0X16
80
p14             EQU 0X11 ;���0 ᫮�0
81
p15             EQU 0X15 ;���0 ᫮�1
82
p16             EQU 0X13 ;���1 ᫮�0 (�뢮����� ���0)
83
p17             EQU 0X17 ;���1 ᫮�1
84
p1C             EQU 0X19 ;���0 ᫮�0 (�뢮����� ���1)
85
 
86
xy2adr        MACRO;    xy2adr
87
_a := _y*40+_x+0XC004
88
        ENDM   
89
       ELSE    
90
pgspr           EQU 0X10
91
pgfnt           EQU 0X10
92
pgIQ            EQU 0X10
93
pgpic           EQU 0X11
94
pgmuz           EQU 0X13
95
p14             EQU 0X14 ;���0 ᫮�0
96
p15             EQU 0X15 ;���0 ᫮�1
97
p16             EQU 0X16 ;���1 ᫮�0 (�뢮����� ���0)
98
p17             EQU 0X17 ;���1 ᫮�1
99
p1C             EQU 0X1C ;���0 ᫮�0 (�뢮����� ���1)
100
 
101
xy2adr        MACRO;    xy2adr
102
_a := (_y&7)<<8+((_y&56)<<2)+((_y&192)<<5)+_x+0XC000
103
        ENDM   
104
       ENDIF   
105
 
106
outim           MACRO;  outi
107
       IF       atm=0
108
        CALL    pause
109
       ENDIF   
110
        OUTI   
111
                ENDM
112
 
113
        ORG     0X6000
114
begin
115
        JP      LOADPEX
116
WASLOA
117
                binclude loa16.bin;        INCBIN       "loa16. "
118
Lloa := $-WASLOA
119
WASPENT
120
                binclude pent.bin;        INCBIN        "PENT. "
121
                DUPL 0X7F00-$,0;        DS      0X7F00-$
122
LOADPEX
123
;B=⨯ ��������:
124
 ;0=PENTAGON, 1=ATM, 2=SCORPION, 3=PROFI, 4=SPRINTER
125
        PUSH    BC
126
        DEC     B
127
        POP     BC
128
        JP      Z,GO ;ATM
129
       PUSH     AF
130
       PUSH BC
131
       PUSH DE
132
       PUSH HL
133
  ;depack PENT version
134
        LD      HL,0X5800
135
        LD      DE,0X5801
136
        LD      BC,0X2FF
137
        LD      (HL),L
138
        LDIR   
139
        LD      IX,WASPENT
140
        LD      DE,0X8200
141
        LD      HL,0X3E00
142
        CALL    UNILDRAR ;�ᯠ���뢠�� IX->DE (�����=HL)
143
 
144
       POP      HL
145
       POP DE
146
       POP BC
147
       POP AF
148
        JP      GO
149
                DUPL 0X8000-$,0;        DS      0X8000-$
150
                include smallunr.a80;        INCLUDE    "B:smallunr",0X44
151
 
152
  ;����� �����塞�� ����
153
                DUPL 0X8200-$,0;        DS      0X8200-$
154
GO
155
;SP=0X6000, DI
156
;A=0XA0 (master) ��� 0XB0 (slave)
157
;C=⨯ ����஫��� IDE:
158
 ;0=NEMO, 1=ATM, 2=SMUC, 3=PROFI, 4=SPRINTER
159
;D=��:
160
 ;0=ENGLISH, 1=�������
161
;E=���� COVOX:
162
 ;0XFB=ATM/PENTAGON
163
;H=����㯭� �����०��� (������뢠���� �� OR)
164
 ;1=512x192 BW VMG
165
 ;2=384x304 ZX AC
166
 ;4=256x192 15 AC
167
 ;8=320x200 16 ATM
168
        LD      SP,0X8000
169
       LD       (REG_SDH),A
170
       LD       A,E
171
       LD       (varcovport),A
172
 
173
      ;LD A,4
174
      ;OUT (-2),A
175
 
176
        LD      BC,32765
177
        LD      A,0X10
178
        OUT     (C),A
179
        LD      HL,WASLOA
180
        LD      DE,loa
181
        LD      BC,Lloa
182
        LDIR   
183
 
184
        CALL    CLSATM
185
 
186
                IF 1;      IFN  1
187
        LD      BC,32765
188
        LD      A,pgpic
189
        OUT     (C),A
190
        LD      HL,0X9F00
191
        LD      DE,0XC000
192
        LD      BC,0X2100
193
        LDIR   
194
        LD      BC,32765
195
        LD      A,0X10
196
        OUT     (C),A
197
 
198
      ;LD A,5
199
      ;OUT (-2),A
200
 
201
        LD      HL,loa
202
        LD      BC,Lloa
203
;����砥� 2-� ��࠭ � ���. � ���⨭����
204
        LD      A,0X18
205
        LD      (curplane),A
206
       LD       IXH,0X00 ;��� ���� ��࠭�
207
        CALL    DEPKS16
208
 
209
                IF atm=1;       IFN     atm
210
        LD      BC,0XFF77 ;�몫.⥭��� �����
211
        LD      A,%10101000 ;EGA
212
        CALL    OUTSHAD
213
       ELSE    
214
         LD     A,0XFE
215
         IN     A,(0XFE)
216
         RRA   
217
        LD      BC,0XEFF7
218
        LD      A,1
219
        ;JNC $+4 ;CS - turbo for Pentagon 1024SL 2.2
220
        ;OR 0X10 ;noturbo for ZX Evo
221
        OUT     (C),A
222
       ENDIF   
223
 
224
        LD      BC,32765
225
        LD      A,pgpic
226
        OUT     (C),A ;��� 1-� ��࠭
227
        LD      HL,0XC000
228
        LD      DE,0X9F00
229
        LD      BC,0X2100
230
        LDIR   
231
        LD      A,0X17
232
        LD      (curplane),A
233
 
234
       LD       DE,0
235
WAIT1S          REPT 4; DUP     4
236
       ADD      HL,HL
237
                ENDM;       EDUP        
238
       DEC      DE
239
       LD       A,D
240
       OR       E
241
       JR NZ,WAIT1S
242
 
243
      ENDIF    
244
        LD      BC,32765
245
        LD      A,0X10
246
        OUT     (C),A
247
 
248
        LD      HL,AP_READTOC
249
        CALL    SEND_ATAPI
250
      ;RET C
251
        CALL    NO_BSY
252
      ;RET C
253
        CALL    WAIT_DRQ
254
      ;RET C
255
        CALL    LEN_TO_HL
256
        LD      B,H
257
        LD C,L
258
        LD      HL,SECBUF
259
        CALL    TRANS_IN
260
        CALL    NO_BSY
261
 
262
        CALL    SCANCAT
263
      ;LD A,4
264
      ;OUT (-2),A
265
 
266
        LD      HL,AP_1x
267
        CALL    SEND_ATAPI
268
      ;LD A,5
269
      ;OUT (-2),A
270
 
271
        LD      HL,TY
272
     ;��� 2 ��⯫���� (+0/64), +128 - ��� ������ ����
273
MKTY
274
        LD      A,L
275
        AND     31
276
        JR NZ,MKTYN0
277
                IF atm=1;      IFN      atm
278
        LD      DE,0XC004
279
      ELSE     
280
        LD      DE,0XC000
281
      ENDIF    
282
MKTYN0
283
         LD     A,L
284
         AND    31
285
         CP     24
286
         JR C,$+5
287
         LD     DE,0
288
        LD      (HL),E
289
        INC     H
290
        LD      (HL),D
291
        DEC     H
292
                IF atm=1;       IFN     atm
293
        LD      A,E
294
        ADD     A,LOW (40*8)
295
        LD      E,A
296
        JR NC,$+3
297
        INC     D
298
        INC     D
299
       ELSE    
300
        LD      A,E
301
        ADD     A,32
302
        LD      E,A
303
        JR NC,$+6
304
        LD      A,D
305
        ADD     A,8
306
        LD      D,A
307
       ENDIF   
308
        INC     L
309
        JR NZ,MKTY
310
 
311
        CALL    CLSATM
312
 
313
                IF atm=1;       IFN     atm
314
        LD      A,%10101000 ;EGA
315
        CALL    OPENPORTS_A
316
        LD      A,0XED
317
        LD      (IN_A),A
318
        LD      (OUT_A),A
319
        LD      A,0X78 ;in a,(c)
320
        LD      (IN_A+1),A
321
        INC     A    ;out (c),a
322
        LD      (OUT_A+1),A
323
        LD      A,0XC9
324
        LD      (IN_A+2),A
325
        LD      (OUT_A+2),A
326
       ELSE    
327
        LD      BC,0XEFF7
328
        LD      A,1
329
        OUT     (C),A
330
       ENDIF   
331
 
332
        LD      DE,0XE00
333
SHUT0   DEC     D
334
        CALL    OUTAY
335
        JR NZ,SHUT0
336
;��ࠥ� ⮭ � ������饩 � ������ B
337
        LD      DE,0X7FD
338
        CALL    OUTAY
339
        LD      DE,0X910
340
        CALL    OUTAY
341
 
342
       ;LD A,7
343
       ;OUT (-2),A
344
 
345
        LD      HL,TFILES
346
NEWVIDEO
347
        LD      DE,SECTOR
348
        LD      BC,4
349
        LDIR   
350
        LD      DE,CUREVENT
351
        LDI     ;���� �ਯ�
352
        LDI     ;
353
        LD      DE,CURENDOFVIDEO
354
        LDI    
355
        LDI    
356
 
357
        LD      HL,LASTSND
358
        LD      DE,LASTSND+1
359
        LD      BC,SNDLEN-1
360
        LD      (HL),0X80
361
        LDIR   
362
 
363
        CALL    READ_P1
364
       XOR      A
365
       OUT      (0XFE),A
366
 
367
        LD      HL,0
368
        LD      (SOUNDFRAME),HL
369
        LD      HL,(CUREVENT)
370
        LD      E,(HL)
371
        INC     HL
372
        LD      D,(HL)
373
        INC     HL
374
        LD      (CUREVENT),HL
375
        LD      (EVENTTIME),DE ;����� �㤥� ��ࢮ� ᮡ�⨥
376
        LD      HL,NEWPLANEOK
377
        LD      (JPENDOFVIDEO),HL ;��᫥ ������� ����
378
        XOR     A
379
        LD      (CURKEY),A ;����頥� ������, ���� ��� ��५��
380
       LD       HL,BADBIBIK
381
       LD       (keySND),HL
382
 
383
        EXX    
384
        LD      HL,LASTSND
385
varcovport := $+1
386
        LD      C,COVPORT
387
        EXX    
388
SNDLOOP
389
        CALL    INKEY
390
        LD      A,C
391
OLDKEY := $+1
392
        CP      0
393
        LD      (OLDKEY),A
394
        JR Z,KEYOFF ;�᫨ ���. ������ �� ���﫮�� - ��室��
395
CURKEY := $+1
396
        LD      A,-1
397
        CP      -1
398
        JR NZ,KEYOFF ;�᫨ 㦥 �������� ��-� - ��室��
399
        LD      A,C
400
        LD      (CURKEY),A
401
NEEDKEY := $+1
402
        CP      111
403
        JR Z,KEYGOOD
404
        INC     A
405
keySND := $+1
406
        CALL    NZBADBIBIK ;Z=����⨫�, NZ=������
407
                        ;� �� ���� ��室��� ���� � ⠪,� ����
408
        JR      KEYOFF
409
KEYGOOD
410
        CALL    GOODBIBIK
411
KEYOFF
412
SOUNDFRAME := $+1
413
        LD      HL,0
414
EVENTTIME := $+1
415
        LD      DE,0
416
        OR      A
417
        SBC     HL,DE
418
        ADD     HL,DE
419
        INC     HL
420
        LD      (SOUNDFRAME),HL
421
        JR NZ,NOEVENT
422
CUREVENT := $+1
423
        LD      HL,0
424
        LD      E,(HL) ;⨯ ᮡ���
425
        INC     HL    ;
426
        LD      D,(HL) ;
427
        INC     HL
428
        LD      C,(HL) ;��ࠬ��� ᮡ���
429
        INC     HL    ;
430
        LD      B,(HL) ;
431
        INC     HL
432
        LD      (EVENTPARAM),BC
433
       PUSH     HL
434
        LD      ($+5),DE
435
        CALL    0
436
       POP      HL
437
        LD      E,(HL) ;�६� ᫥���饣� ᮡ���
438
        INC     HL    ;
439
        LD      D,(HL) ;
440
        INC     HL
441
        LD      (EVENTTIME),DE
442
        LD      (CUREVENT),HL
443
NOEVENT
444
 
445
       IF       sound=0
446
        LD      IXL,sectcycl-2 ;�� -1!
447
        JP      SECTLOOP
448
       ENDIF   
449
       ;�⥭�� ᥪ�� ��㪠 � �����뢠��� ���⪠
450
     ;�����뢠�� ���⮪ ��㪠 ��� 128 ���� (�६� �⥭��)
451
        LD      C,LOW (hddstat)
452
        LD      DE,-1
453
         EXX   
454
         outim
455
         EXX   
456
        LD      HL,pusto
457
sldoigr
458
                IF atm=1;       IFN     atm
459
        IN      A,(C)
460
        LD      A,A
461
         OR     A
462
         JR C,$+2
463
        LD      A,H
464
       IN       A,(LOW (hddstat))
465
        ADD     A,(HL)
466
        INC     A
467
        LD      A,(HL)
468
        LD      A,A
469
        ADC     A,H
470
        SUB     L
471
        LD      A,A
472
    PUSH        HL
473
                REPT 7;        DUP      8
474
        INI    
475
        ADD     HL,DE
476
                ENDM;        EDUP       
477
                INI;        ORG $-1
478
        EXX    
479
        OUTI   
480
        EXX    
481
    SET 5,A
482
                REPT 7;        DUP      8
483
        INI    
484
        ADD     HL,DE
485
                ENDM;        EDUP       
486
                INI;        ORG $-1
487
    POP HL
488
        EXX    
489
        OUTI   
490
       ELSE     ;~atm
491
        IN      A,(LOW (hddstat))
492
        LD      A,A
493
         OR     A
494
         JR C,$+2
495
       IN       A,(LOW (hddstat))
496
        ADD     A,(HL)
497
        INC     A
498
        LD      A,(HL)
499
                REPT 7;        DUP      8
500
        IN      A,(LOW (hddstat))
501
        LD      A,(HL)
502
        INC     H
503
                ENDM;        EDUP       
504
        IN      A,(LOW (hddstat))
505
        LD      A,(HL)
506
;        ORG    $-1
507
    NOP
508
        EXX    
509
        outim
510
        EXX    
511
    LD  C,H
512
    SET 5,A
513
                REPT 7;        DUP      8
514
        IN      A,(LOW (hddstat))
515
        LD      A,(HL)
516
        INC     H
517
                ENDM;        EDUP       
518
        IN      A,(LOW (hddstat))
519
        LD      A,(HL)
520
;        ORG    $-1
521
        EXX    
522
        outim
523
       ENDIF   
524
        LD      A,H
525
        EXX    
526
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;        CP    'SNDLEN+'LASTSND-1
527
        JR C,sldoigr
528
        EXX    
529
        LD      HL,LASTSND+SNDLEN-256
530
        EXX    
531
        LD      HL,LASTSND
532
        LD      BC,LOW (hdddatlo+0X0000) ;B=0X00 (2*128)
533
        LD      DE,0
534
RDSND0
535
                IF atm=1;      IFN      atm
536
        INC     B
537
        IN      A,(C)
538
        DEC     B
539
         OR     A
540
         JR C,$+2
541
        EXX    
542
        OUTI   
543
        EXX    
544
       IN       A,(LOW (hddstat))
545
        ADD     A,(HL)
546
        INC     A
547
        LD      A,(HL)
548
        LD      A,A
549
        ADC     A,H
550
        SUB     L
551
        LD      A,A
552
                REPT 7;        DUP      8
553
        INI    
554
        ADD     HL,DE
555
                ENDM;        EDUP       
556
                INI;        ORG $-1
557
    PUSH        HL
558
    POP HL
559
    SET 5,A
560
        EXX    
561
        OUTI   
562
        EXX    
563
                REPT 7;        DUP      8
564
        INI    
565
        ADD     HL,DE
566
                ENDM;        EDUP       
567
                INI;        ORG $-1
568
       ELSE     ;~atm
569
        IN      A,(LOW (hddstat))
570
         OR     A
571
         JR C,$+2
572
        EXX    
573
        outim
574
        EXX    
575
       IN       A,(LOW (hddstat))
576
        ADD     A,(HL)
577
        INC     A
578
        LD      A,A
579
                REPT 4;        DUP      4
580
        IN      A,(LOW (hdddatlo))
581
        LD      (HL),A
582
        INC     L
583
        IN      A,(LOW (hdddathi))
584
        LD      (HL),A
585
        INC     L
586
                ENDM;        EDUP       
587
    LD  C,H
588
    SET 5,A
589
        EXX    
590
        outim
591
        EXX    
592
                REPT 3;        DUP      4
593
        IN      A,(LOW (hdddatlo))
594
        LD      (HL),A
595
        INC     L
596
        IN      A,(LOW (hdddathi))
597
        LD      (HL),A
598
        INC     L
599
                ENDM;        EDUP       
600
        IN      A,(LOW (hdddatlo))
601
        LD      (HL),A
602
        INC     L
603
        IN      A,(LOW (hdddathi))
604
        LD      (HL),A
605
;        ORG    $-1
606
        INC     HL
607
       ENDIF   
608
        LD      A,H
609
                CP HIGH (SNDLEN+LASTSND);        CP     'SNDLEN+'LASTSND
610
        JR C,RDSND0
611
        EXX    
612
        LD      HL,LASTSND
613
        outim
614
        EXX    
615
        LD      IXL,sectcycl
616
        JP      LOOPNEXTSEC ;1-� ��������� - � ��⮬ 7
617
NEWPLANE
618
       IF       atm=0
619
       IN       A,(LOW (hdddathi))
620
       ENDIF   
621
curplane := $+1
622
        LD      A,0X17
623
;���冷� ��ࠡ�⪨: SCR0(lo,hi), SCR1(lo,hi)
624
                       ;0X1C,0X1D      0X16,0X17
625
                  ;ATM ;0X19,0X1D      0X13,0X17
626
                IF atm=1;      IFN      atm
627
        XOR     4
628
        BIT     2,A
629
      ELSE     
630
        XOR     1
631
        BIT     0,A
632
      ENDIF    
633
        JR NZ,NONEWSCR
634
        XOR     0X1C!0X16 ;=0X19!0X13 ;=0X0A
635
        INC     L
636
        JP      Z,ENDOFVIDEO
637
        DEC     L
638
JPENDOFVIDEO := $+1
639
        JP      NEWPLANEOK ;ENDOFVIDEODEAD; ENDOFVIDEO
640
NEWPLANEOK
641
NONEWSCR
642
        LD      (curplane),A
643
       PUSH     BC
644
        LD      BC,32765
645
        OUT     (C),A
646
       POP      BC
647
        JP      NEWPLQ
648
SECTLOOP
649
                IF atm=1;       IFN     atm
650
        LD      BC,0XF20F ;B=0XF2 (18*113)
651
        LD      DE,39
652
       ELSE    
653
        LD      B,113
654
       ENDIF   
655
         EXX   
656
         outim
657
         EXX   
658
FRAMELOOP
659
                IF atm=1;       IFN     atm
660
        IN      A,(C)
661
       ELSE    
662
        IN      A,(LOW (hdddatlo))
663
       ENDIF   
664
        LD      L,A
665
         RLA   
666
         JR C,NEWPLANE
667
NEWPLQ  LD      H,HIGH (TY);'TY        ;22
668
                IF atm=1;       IFN     atm
669
        LD      A,H
670
       ENDIF   
671
       IN       A,(LOW (hdddathi))
672
        ADD     A,(HL)
673
        INC     H
674
        LD      H,(HL)
675
        LD      L,A          ;33
676
                IF atm=1;       IFN     atm
677
        ADC     A,H
678
        SUB     L
679
        LD      H,A
680
    PUSH        HL
681
       ELSE    
682
    LD  C,H              ;4
683
       ENDIF   
684
     ;HL=screen
685
                IF atm=1;       IFN     atm
686
                REPT 7;        DUP      8
687
        INI    
688
        ADD     HL,DE
689
                ENDM;        EDUP       
690
                INI
691
       ELSE    
692
                REPT 3;        DUP      4
693
        IN      A,(LOW (hdddatlo))
694
        LD      (HL),A
695
        INC     H
696
        IN      A,(LOW (hdddathi))
697
        LD      (HL),A
698
        INC     H
699
                ENDM;        EDUP       
700
        IN      A,(LOW (hdddatlo))
701
        LD      (HL),A
702
        INC     H
703
        IN      A,(LOW (hdddathi))
704
        LD      (HL),A
705
       ENDIF   
706
;        ORG    $-1
707
                         ;172
708
                IF sound=1;       IFN   sound
709
        EXX    
710
        outim
711
        EXX                  ;24
712
       ENDIF   
713
                IF atm=1;       IFN     atm
714
    POP HL
715
       ELSE    
716
    LD  H,C
717
       ENDIF   
718
    SET 5,H              ;12
719
                IF atm=1;       IFN     atm
720
                REPT 7;        DUP      8
721
        INI    
722
        ADD     HL,DE
723
                ENDM;        EDUP       
724
                INI
725
       ELSE    
726
                REPT 3;        DUP      4
727
        IN      A,(LOW (hdddatlo))
728
        LD      (HL),A
729
        INC     H
730
        IN      A,(LOW (hdddathi))
731
        LD      (HL),A
732
        INC     H
733
                ENDM;        EDUP       
734
        IN      A,(LOW (hdddatlo))
735
        LD      (HL),A
736
        INC     H
737
        IN      A,(LOW (hdddathi))
738
        LD      (HL),A
739
       ENDIF   
740
;        ORG    $-1
741
                         ;172
742
                IF atm=1;       IFN     atm
743
        DEC     B ;��� �⭮�� ���� ������
744
       ENDIF   
745
                IF sound=1;       IFN   sound
746
        EXX    
747
        outim
748
        EXX                  ;24
749
       ENDIF   
750
        DJNZ    FRAMELOOP   ;13 ;476 PENT / 576 ATM
751
      ;���⮪ ᥪ�� (14 ����)
752
                REPT 7;        DUP      7
753
                IF atm=1;       IFN     atm
754
        IN      A,(C)
755
       ELSE    
756
        IN      A,(LOW (hdddatlo))
757
       IN       A,(LOW (hdddathi)) ;ZX Evo fix
758
       ENDIF   
759
                ENDM;        EDUP                   ;77 PENT / 84 ATM
760
LOOPNEXTSEC
761
        LD      HL,SECTOR+3
762
        INC     (HL)
763
        DEC     HL
764
        JR Z,$-2           ;29*N-5 (����� ����� 24)
765
 
766
   ;⨯� ������ ������ ᮢ������ � ⥬�, �-� � ������� 横��
767
        LD      C,LOW (hddstat)
768
        LD      DE,-1
769
        LD      HL,pusto
770
        EXX    
771
        outim
772
        EXX                  ;24
773
BSYDOATAPI
774
                IF atm=1;       IFN     atm
775
        IN      A,(C)
776
        LD      A,A
777
        LD      A,H
778
        INC     A
779
        ADC     A,H
780
        SUB     L
781
        LD      A,A
782
    PUSH        HL
783
                REPT 7;        DUP      8
784
        INI    
785
        ADD     HL,DE
786
                ENDM;        EDUP       
787
                INI;        ORG $-1
788
        EXX    
789
       LD       A,H
790
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
791
       JR NC,$+4
792
        OUTI   
793
        EXX    
794
                REPT 7;        DUP      8
795
        INI    
796
        ADD     HL,DE
797
                ENDM;        EDUP       
798
                INI;        ORG $-1
799
    POP HL
800
        EXX    
801
       LD       A,H
802
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
803
       JR NC,$+4
804
        OUTI   
805
        EXX    
806
        XOR     A
807
       ELSE     ;~atm
808
        IN      A,(LOW (hddstat))
809
        LD      A,A
810
                REPT 7;        DUP      8
811
        IN      A,(LOW (hddstat))
812
        LD      A,(HL)
813
        INC     H
814
                ENDM;        EDUP       
815
        IN      A,(LOW (hddstat))
816
        LD      A,(HL)
817
;        ORG    $-1
818
        EXX    
819
       NOP     
820
       LD       A,H
821
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
822
       JR NC,_nouti
823
        outim
824
_nouti
825
        EXX    
826
       SET      5,A
827
                REPT 7;        DUP      8
828
        IN      A,(LOW (hddstat))
829
        LD      A,(HL)
830
        INC     H
831
                ENDM;        EDUP       
832
        IN      A,(LOW (hddstat))
833
        LD      A,(HL)
834
;        ORG    $-1
835
        EXX    
836
       LD       A,H
837
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
838
       JR NC,_nouti2
839
        outim
840
_nouti2
841
        EXX    
842
       ENDIF   
843
        IN      A,(LOW (hddstat))
844
        BIT     7,A
845
        JR NZ,BSYDOATAPI
846
 
847
;SEND_ATAPI
848
        LD      A,(REG_SDH)
849
       ;AND 16
850
       ;OR 0XA0
851
        OUT     (LOW (hddhead)),A  ;38
852
        XOR     A
853
        OUT     (LOW (hddcyllo)),A ;15
854
        LD      A,8
855
        OUT     (LOW (hddcylhi)),A ;18
856
        LD      A,0XA0
857
        OUT     (LOW (hddcmd)),A   ;18
858
 
859
        LD      C,LOW (hddstat)
860
        LD      DE,-1
861
         EXX   
862
         outim
863
         EXX   
864
        LD      HL,pusto
865
sAdrq
866
                IF atm=1;       IFN     atm
867
        IN      A,(C)
868
        LD      A,A
869
        LD      A,H
870
        INC     A
871
        ADC     A,H
872
        SUB     L
873
        LD      A,A
874
    PUSH        HL
875
                REPT 7;        DUP      8
876
        INI    
877
        ADD     HL,DE
878
                ENDM;        EDUP       
879
                INI;        ORG $-1
880
        EXX    
881
       LD       A,H
882
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
883
       JR NC,$+4
884
        OUTI   
885
        EXX    
886
                REPT 7;        DUP      8
887
        INI    
888
        ADD     HL,DE
889
                ENDM;        EDUP       
890
                INI;        ORG $-1
891
    POP HL
892
        EXX    
893
       LD       A,H
894
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
895
       JR NC,$+4
896
        OUTI   
897
        EXX    
898
        XOR     A
899
       ELSE     ;~atm
900
        IN      A,(LOW (hddstat))
901
        LD      A,A
902
                REPT 7;        DUP      8
903
        IN      A,(LOW (hddstat))
904
        LD      A,(HL)
905
        INC     H
906
                ENDM;        EDUP       
907
        IN      A,(LOW (hddstat))
908
        LD      A,(HL)
909
;        ORG    $-1
910
        EXX    
911
       NOP     
912
       LD       A,H
913
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
914
       JR NC,_nouti3
915
        outim
916
_nouti3
917
        EXX    
918
       SET      5,A
919
                REPT 7;        DUP      8
920
        IN      A,(LOW (hddstat))
921
        LD      A,(HL)
922
        INC     H
923
                ENDM;        EDUP       
924
        IN      A,(LOW (hddstat))
925
        LD      A,(HL)
926
;        ORG    $-1
927
        EXX    
928
       LD       A,H
929
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
930
       JR NC,_nouti4
931
        outim
932
_nouti4
933
        EXX    
934
       ENDIF   
935
        IN      A,(LOW (hddstat))
936
        BIT     3,A
937
        JR Z,sAdrq
938
 
939
        LD      HL,AP_READ
940
                REPT 2;       DUP       2
941
                IF atm=1;       IFN     atm
942
        INC     HL
943
        LD      A,(HL)
944
        LD      BC,hdddathi
945
        OUT     (C),A
946
        DEC     HL
947
        LD      A,(HL)
948
        LD      BC,hdddatlo
949
        OUT     (C),A
950
        INC     HL
951
        INC HL        ;117*2=244(+10)
952
                DUPL 7,0;        DS     7
953
       ELSE    
954
        LD      C,(HL)
955
        INC     HL
956
        LD      A,(HL)
957
        OUT     (LOW (hdddathi)),A
958
        LD      A,C
959
        OUT     (LOW (hdddatlo)),A
960
        INC     HL           ;52
961
       ENDIF   
962
                ENDM;       EDUP        
963
         EXX   
964
         outim
965
         EXX   
966
                REPT 2;       DUP       2
967
                IF atm=1;       IFN     atm
968
        INC     HL
969
        LD      A,(HL)
970
        LD      BC,hdddathi
971
        OUT     (C),A
972
        DEC     HL
973
        LD      A,(HL)
974
        LD      BC,hdddatlo
975
        OUT     (C),A
976
        INC     HL
977
        INC HL        ;117*2=244(+22)
978
                DUPL 7,0;        DS     7
979
       ELSE    
980
        LD      C,(HL)
981
        INC     HL
982
        LD      A,(HL)
983
        OUT     (LOW (hdddathi)),A
984
        LD      A,C
985
        OUT     (LOW (hdddatlo)),A
986
        INC     HL           ;52
987
       ENDIF   
988
                ENDM;       EDUP        
989
         EXX   
990
         outim
991
         EXX   
992
 
993
                REPT 2;       DUP       2
994
                IF atm=1;       IFN     atm
995
        INC     HL
996
        LD      A,(HL)
997
        LD      BC,hdddathi
998
        OUT     (C),A
999
        DEC     HL
1000
        LD      A,(HL)
1001
        LD      BC,hdddatlo
1002
        OUT     (C),A
1003
        INC     HL
1004
        INC HL        ;
1005
       ELSE    
1006
        LD      C,(HL)
1007
        INC     HL
1008
        LD      A,(HL)
1009
        OUT     (LOW (hdddathi)),A
1010
        LD      A,C
1011
        OUT     (LOW (hdddatlo)),A
1012
        INC     HL           ;52
1013
       ENDIF   
1014
                ENDM;       EDUP        
1015
     ;(���-� 2000 ⠪⮢ ���)
1016
     ;(�筥�, 20000 ����� 10-� ࠧ)
1017
          ;XOR A
1018
          ;IN A,(hddstat)
1019
          ;RLCA       ;BSY
1020
          ;JC $-4
1021
        LD      C,LOW (hddstat)
1022
        LD      DE,-1
1023
         EXX   
1024
         outim
1025
         EXX   
1026
        LD      HL,pusto
1027
sldrq
1028
                IF atm=1;       IFN     atm
1029
        IN      A,(C)
1030
        LD      A,A
1031
        LD      A,H
1032
        INC     A
1033
        ADC     A,H
1034
        SUB     L
1035
        LD      A,A
1036
    PUSH        HL
1037
                REPT 7;        DUP      8
1038
        INI    
1039
        ADD     HL,DE
1040
                ENDM;        EDUP       
1041
                INI;        ORG $-1
1042
        EXX    
1043
       LD       A,H
1044
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
1045
       JR NC,$+4
1046
        OUTI   
1047
        EXX    
1048
                REPT 7;        DUP      8
1049
        INI    
1050
        ADD     HL,DE
1051
                ENDM;        EDUP       
1052
                INI;        ORG $-1
1053
    POP HL
1054
        EXX    
1055
       LD       A,H
1056
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
1057
       JR NC,$+4
1058
        OUTI   
1059
        EXX    
1060
        XOR     A
1061
       ELSE     ;~atm
1062
        IN      A,(hddstat)
1063
        LD      A,A
1064
                REPT 7;        DUP      8
1065
        IN      A,(hddstat)
1066
        LD      A,(HL)
1067
        INC     H
1068
                ENDM;        EDUP       
1069
        IN      A,(hddstat)
1070
        LD      A,(HL)
1071
;        ORG    $-1
1072
        EXX    
1073
       NOP     
1074
       LD       A,H
1075
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
1076
       JR NC,_nouti5
1077
        outim
1078
_nouti5
1079
        EXX    
1080
       SET      5,A
1081
                REPT 7;        DUP      8
1082
        IN      A,(hddstat)
1083
        LD      A,(HL)
1084
        INC     H
1085
                ENDM;        EDUP       
1086
        IN      A,(hddstat)
1087
        LD      A,(HL)
1088
;        ORG    $-1
1089
        EXX    
1090
       LD       A,H
1091
                CP HIGH (SNDLEN)+HIGH (LASTSND)-1;       CP     'SNDLEN+'LASTSND-1
1092
       JR NC,_nouti6
1093
        outim
1094
_nouti6
1095
        EXX    
1096
       ENDIF   
1097
        IN      A,(LOW (hddstat))
1098
        BIT     3,A
1099
        JR Z,sldrq
1100
 
1101
        DEC     IXL
1102
        JP      NZ,SECTLOOP
1103
       IF       sound=0
1104
        EXX    
1105
        LD      HL,LASTSND
1106
        EXX    
1107
        LD      IXL,sectcycl-1
1108
        LD      HL,SECTOR+3
1109
        INC     (HL)
1110
        DEC     HL
1111
        JR Z,$-2           ;29*N-5 (����� ����� 24)
1112
        JP      SECTLOOP
1113
       ELSE    
1114
        JP      SNDLOOP
1115
       ENDIF   
1116
 
1117
ENDOFVIDEO
1118
        CALL    CLSATM
1119
                IF 0;       IFN 0
1120
        LD      HL,LEVEL
1121
        INC     (HL)
1122
        LD      A,(HL)
1123
        CP      16
1124
        JR C,EOVNOPRINT
1125
 
1126
        LD      A,(LIVES)
1127
        ADD     A,"0"
1128
        LD      (TLIVESN),A
1129
        LD      HL,TLIVES
1130
_y := 96
1131
_x := 9
1132
        xy2adr
1133
        LD      DE,_a
1134
        CALL    PRW
1135
 
1136
        LD      A,(LEVEL)
1137
        CALL    CODEDIG
1138
        LD      A,(LIVES)
1139
        CALL    CODEDIG
1140
        LD      A,(SCORE)
1141
        CALL    CODEDIG
1142
        LD      A,(SCORE+1)
1143
        CALL    CODEDIG
1144
        LD      HL,(SCORE)
1145
        LD      A,(LIVES)
1146
        XOR     L
1147
        XOR     H
1148
        LD      L,A
1149
        LD      A,(LEVEL)
1150
        XOR     L
1151
        CALL    CODEDIG
1152
        LD      HL,TCODEN
1153
        LD      B,8
1154
TCODELET0
1155
        LD      A,(HL)
1156
        AND     31
1157
        ADD     A,"0"
1158
        CP      ":"
1159
        JR C,$+4
1160
        ADD A,0X41-0X3A;        A,"A"-":"
1161
        LD      (HL),A
1162
        INC     HL
1163
        DJNZ    TCODELET0
1164
 
1165
        LD      HL,TCODE
1166
_y := 80
1167
_x := 9
1168
        xy2adr
1169
        LD      DE,_a
1170
        CALL    PRW
1171
EOVNOPRINT
1172
       ENDIF   
1173
ENDOFVIDEODEAD
1174
CURENDOFVIDEO := $+1
1175
        LD      HL,TFILES
1176
       PUSH     HL
1177
        LD      HL,LASTSND
1178
        CALL    READ_P2
1179
       POP      HL
1180
        JP      NEWVIDEO
1181
 
1182
CODEDIG
1183
        LD      HL,TCODEN
1184
        LD      B,8
1185
CODEDIG0
1186
        RLA    
1187
        RL      (HL)
1188
        INC     HL
1189
        DJNZ    CODEDIG0
1190
        RET    
1191
 
1192
TLIVES  DB      "   LIVES: 0",0
1193
TLIVESN := $-2
1194
TCODE   DB      "CODE: 00000000",0
1195
TCODEN := $-9
1196
 
1197
PRW
1198
;C=䮭��� 梥� (� ���� ��ਡ��)
1199
        LD      C,0
1200
;IX=⠡��� ���᪨ �㪢� �� ��ப��
1201
        LD      IX,BUK_W
1202
        CALL    PRTXT88
1203
        LD      A,(curplane)
1204
        LD      BC,32765
1205
        OUT     (C),A
1206
        RET    
1207
INKEY
1208
;C=11LRDUBF (B=break)
1209
        LD      A,254
1210
        IN      A,(254)
1211
        RRA    
1212
        LD      A,239
1213
        IN      A,(254)
1214
        JR      C,UANOCAP
1215
        LD      C,0XFF
1216
        RRA         ;CS+"0" = "0"
1217
        JR C,$+3
1218
        DEC     C
1219
        RRA    
1220
        RRA         ;CS+"8"
1221
        JR C,$+4
1222
        RES     4,C
1223
        RRA         ;CS+"7"
1224
        JR C,$+4
1225
        RES     2,C
1226
        RRA         ;CS+"6"
1227
        JR C,$+4
1228
        RES     3,C
1229
        LD      A,0XF7
1230
        IN      A,(254)
1231
        BIT     4,A ;CS+"5"
1232
        JR NZ,$+4
1233
        RES     5,C
1234
        RLA         ;CS+"1"
1235
        JR C,INKEYF
1236
        RES     1,C
1237
        JR      INKEYF
1238
UANOCAP
1239
        RRCA   
1240
        RLA    
1241
        RLA    
1242
        OR      0XC2
1243
        LD      C,A
1244
        LD      A,0XDF
1245
        IN      A,(254)
1246
        RRA         ;"P"
1247
        JR      C,$+4
1248
        RES     4,C
1249
        RRA         ;"O"
1250
        JR      C,$+4
1251
        RES     5,C
1252
        LD      A,0XFB
1253
        IN      A,(254)
1254
        RRA         ;"Q"
1255
        JR      C,$+4
1256
        RES     2,C
1257
        RRA    
1258
        RRA         ;"E"
1259
        JR      C,$+4
1260
        RES     1,C
1261
        LD      A,0XFD
1262
        IN      A,(254)
1263
        RRA         ;"A"
1264
        JR C,$+4
1265
        RES     3,C
1266
INKEYF  LD      A,0X7F
1267
        IN      A,(254)
1268
        CPL    
1269
        AND     31
1270
        RET     Z
1271
        RES     0,C
1272
        RET    
1273
 
1274
CLSATM
1275
                REPT 2;       DUP       2
1276
;��⨬ �������� ��࠭
1277
        CALL    CLSATMPLANE
1278
;��४��砥� ��࠭
1279
        LD      A,(curplane)
1280
        XOR     8
1281
        LD      (curplane),A
1282
                ENDM;       EDUP        
1283
        RET    
1284
;��⨬ �������� ��࠭
1285
CLSATMPLANE
1286
        LD      A,(curplane)
1287
        AND     0X18
1288
        LD      C,A
1289
        CPL    
1290
        RRA    
1291
        RRA    
1292
        AND     2
1293
        OR      C
1294
        OR      5
1295
        CALL    CLSPG
1296
                IF atm=1;       IFN     atm
1297
        SUB     4
1298
       ELSE    
1299
        DEC     A
1300
       ENDIF   
1301
CLSPG   LD      BC,32765
1302
        OUT     (C),A
1303
        LD      HL,0XC000
1304
        CALL    CLS7999
1305
        LD      HL,0XE000
1306
CLS7999 LD      BC,7999
1307
CLSI1   LD      D,H
1308
                LD E,1
1309
        LD      (HL),L
1310
        LDIR   
1311
        RET    
1312
 
1313
SCANCAT
1314
     ;��६ ��� ���� (�।��� ������)
1315
        LD      HL,SECBUF+1
1316
        LD      A,(HL)
1317
        ADD     A,-10
1318
        LD      L,A
1319
;��㧨� ��砫� ��ᨨ (17*0X800 ����)
1320
        LD      D,7
1321
        CALL    LOADER
1322
        LD      B,16
1323
SCANL0  PUSH    BC
1324
        LD      B,1
1325
        CALL    LOADERLOOP
1326
        POP     BC
1327
        DJNZ    SCANL0
1328
        LD      C,0XA2
1329
        ADD     HL,BC
1330
       ;CY=0
1331
        CALL    LOADER ;��㧨� ��୥��� ��⠫��
1332
       ;HL=SECBUF
1333
        LD      DE,TFILES
1334
FNDNEWFILE
1335
        LD      HL,SECBUF
1336
FNDFILELOOP
1337
       PUSH     HL
1338
        LD      C,33
1339
        ADD     HL,BC
1340
        LD      C,4
1341
       PUSH     DE
1342
FNDFI0  LD      A,(DE)
1343
        CPI    
1344
       JR NZ,FNDFIN
1345
        INC     DE
1346
        JP      PE,FNDFI0
1347
       POP      DE
1348
       POP      HL
1349
        LD      C,6
1350
        ADD     HL,BC
1351
        LD      C,4
1352
        LDIR   
1353
FNDFIOK         REPT 4
1354
                INC     DE
1355
                ENDM
1356
        LD      A,D
1357
                CP HIGH (ENDFILES);        CP   'ENDFILES
1358
        JR NZ,FNDNEWFILE
1359
        LD      A,E
1360
        CP      LOW (ENDFILES)
1361
        JR NZ,FNDNEWFILE
1362
        RET    
1363
FNDFIN
1364
       POP      DE
1365
       POP      HL
1366
PADDIN0 LD      C,(HL)
1367
        INC     HL
1368
        LD      B,(HL)
1369
        DEC     HL
1370
       LD       A,B
1371
       OR       C
1372
       JR NZ,NOPADDING
1373
        INC     H
1374
        LD      L,A
1375
NOPADDING
1376
       INC      B
1377
       DJNZ     CATEND ;B<>0
1378
        ADD     HL,BC
1379
        LD      A,H
1380
        CP      64
1381
       JR NC,FNDFILELOOP
1382
CATEND
1383
        LD      A,-2 ;��� 䠩��
1384
        LD      (DE),A
1385
                REPT 4
1386
        INC     DE
1387
                ENDM
1388
        JR      FNDFIOK
1389
 
1390
LOADER
1391
;��㧨� 䠩�
1392
;HL 㪠�뢠�� �� ���� ���न��� 䠩�� � motorola ���浪�
1393
;CY=1: ࠧ��� � DE
1394
;CY=0: ࠧ��� � (HL+4)
1395
       PUSH     DE
1396
        LD      DE,SECTOR
1397
        LD      BC,4
1398
        LDIR   
1399
       POP      DE
1400
        JR C,$+5
1401
         LD     E,(HL)
1402
         INC    HL
1403
         LD     D,(HL)
1404
        EX DE,HL       
1405
        SCF    
1406
        LD      DE,2048
1407
        INC     B
1408
        SBC     HL,DE
1409
        JR NC,$-3
1410
LOADERLOOP
1411
        LD      HL,SECBUF
1412
       PUSH     HL
1413
LOADER0 PUSH    BC
1414
        CALL    READCD
1415
       CALL     READ_P2 ;!!! � ��� �� �室�� � READCD
1416
       LD       BC,2048
1417
       ADD      HL,BC
1418
        PUSH    HL
1419
        LD      HL,SECTOR+3
1420
        INC     (HL)
1421
        DEC     HL
1422
        JR Z,$-2
1423
        POP     HL
1424
        POP     BC
1425
        DJNZ    LOADER0
1426
       POP      HL
1427
        RET    
1428
 
1429
READ_P1
1430
       PUSH     BC
1431
       PUSH DE
1432
       PUSH HL
1433
        CALL    READCD
1434
       POP      HL
1435
       POP DE
1436
       POP BC
1437
        RET    
1438
READ_P2
1439
       PUSH     BC
1440
       PUSH DE
1441
       PUSH HL
1442
        CALL    READ_S
1443
        CALL    READ_S
1444
        CALL    READ_S
1445
        CALL    READ_S
1446
        CALL    NO_BSY
1447
       POP      HL
1448
       POP DE
1449
       POP BC
1450
        RET    
1451
NXTSEC
1452
       PUSH     HL
1453
        LD      HL,SECTOR+3
1454
        INC     (HL)
1455
        DEC     HL
1456
        JR Z,$-2
1457
       POP      HL
1458
        RET    
1459
 
1460
                IF atm=1;       IFN     atm
1461
OUTSHAD
1462
        LD      IX,10835
1463
        PUSH    IX
1464
        JP      0X3D2F
1465
       ENDIF   
1466
 
1467
;������ 512 ����
1468
READ_S
1469
                IF smuc=1;       IFN    smuc
1470
        LD      B,0
1471
READ_S0 PUSH    BC
1472
        LD      BC,hdddatlo
1473
        CALL    IN_A
1474
        LD      (HL),A
1475
        INC     HL
1476
        LD      BC,hdddathi
1477
        CALL    IN_A
1478
        LD      (HL),A
1479
        INC     HL
1480
        POP     BC
1481
        DJNZ    READ_S0
1482
       ELSE     ;nemo
1483
        LD      C,hdddatlo
1484
                REPT 256;        DUP    256
1485
        INI    
1486
        INC     C
1487
        INI    
1488
        DEC     C
1489
                ENDM;        EDUP       
1490
       ENDIF   
1491
        RET    
1492
 
1493
OUT_A
1494
                IF smuc=1;       IFN    smuc
1495
                IF atm=1;      IFN      atm
1496
        PUSH    AF
1497
        PUSH BC
1498
        CALL    OPENPORTS
1499
        POP     BC
1500
        POP AF
1501
        OUT     (C),A
1502
        JR      CLOSEPORTS
1503
OPENPORTS
1504
        LD      A,%10101000;11
1505
OPENPORTS_A
1506
        LD      BC,0X2A53
1507
        PUSH    BC
1508
        LD      BC,0X4177
1509
        JP      0X3D2F
1510
      ELSE     
1511
        LD      IX,0X3FF0
1512
        PUSH    IX
1513
        JP      0X3D2F
1514
      ENDIF    
1515
       ELSE     ;nemo
1516
        OUT     (C),A
1517
        RET    
1518
       ENDIF   
1519
 
1520
IN_HDDSTAT
1521
        LD      BC,hddstat
1522
IN_A
1523
                IF smuc=1;       IFN    smuc
1524
                IF atm=1;      IFN      atm
1525
        PUSH    BC
1526
        CALL    OPENPORTS
1527
        POP     BC
1528
        IN      A,(C)
1529
CLOSEPORTS
1530
        PUSH    AF
1531
        PUSH BC
1532
        LD      A,%10101000;11
1533
        LD      BC,0XFF77
1534
        OUT     (C),A
1535
        POP     BC
1536
        POP AF
1537
        RET    
1538
      ELSE     
1539
        LD      IX,0X3FF3
1540
        PUSH    IX
1541
        JP      0X3D2F
1542
      ENDIF    
1543
       ELSE    
1544
        IN      A,(C)
1545
        RET    
1546
       ENDIF   
1547
 
1548
;������� ������� �� ����
1549
HDSC
1550
        LD      BC,hddcmd
1551
        CALL    OUT_A
1552
;�������� ������������ ����������
1553
NO_BSY
1554
        CALL    IN_HDDSTAT
1555
        RLCA   
1556
        RET     NC
1557
        JR      NO_BSY
1558
;�������� ���������� �������� ������
1559
WAIT_DRQ
1560
        CALL    IN_HDDSTAT
1561
       OR       A
1562
        BIT     3,A
1563
        RET     NZ
1564
        JR      WAIT_DRQ
1565
 
1566
;�����E ����� �� �������� ��������
1567
LEN_TO_HL
1568
        LD      BC,hddcyllo
1569
        CALL    IN_A
1570
        LD      L,A
1571
        LD      BC,hddcylhi
1572
        CALL    IN_A
1573
        LD      H,A
1574
        RET    
1575
 
1576
;IN:HL-����� ������ ������
1577
;   BC-���-�� ����
1578
TRANS_IN
1579
        PUSH    BC
1580
        CALL    NO_BSY
1581
        POP     BC
1582
       RET      C
1583
        PUSH    BC
1584
        CALL    WAIT_DRQ
1585
        POP     BC
1586
       RET      C
1587
        INC     BC
1588
        SRL     B
1589
        RR      C
1590
TR_IN0  PUSH    BC
1591
        LD      BC,hdddatlo
1592
        CALL    IN_A
1593
        LD      (HL),A
1594
        INC     HL
1595
        LD      BC,hdddathi
1596
        CALL    IN_A
1597
        LD      (HL),A
1598
        POP     BC
1599
        CPI    
1600
        JP      PE,TR_IN0
1601
        RET    
1602
 
1603
;�������� ATAPI-������
1604
SEND_ATAPI
1605
REG_SDH := $+1
1606
       LD       A,0XB0
1607
       LD       BC,hddhead
1608
       CALL     OUT_A
1609
        LD      BC,hddcyllo
1610
        XOR     A
1611
        CALL    OUT_A
1612
        LD      BC,hddcylhi
1613
                LD A,HIGH (2048);        LD     A,'2048
1614
        CALL    OUT_A
1615
        LD      A,0XA0
1616
        CALL    HDSC
1617
        LD      B,6
1618
TR_OUT0 PUSH    BC
1619
        INC     HL
1620
        LD      A,(HL)
1621
        LD      BC,hdddathi
1622
        CALL    OUT_A
1623
        DEC     HL
1624
        LD      A,(HL)
1625
        LD      BC,hdddatlo
1626
        CALL    OUT_A
1627
        INC     HL
1628
        INC HL
1629
        POP     BC
1630
        DJNZ    TR_OUT0
1631
        RET    
1632
 
1633
READCD
1634
;������ �������
1635
LOAD_SECTOR_
1636
       PUSH     HL
1637
        LD      HL,AP_READ
1638
        CALL    SEND_ATAPI
1639
       POP      HL
1640
;�뢠�� �����,�� CHECK CONDITION (D0 �����)=0,
1641
;� �� �⮬ DRQ �� �뤠����!
1642
       ;CALL IN_HDDSTAT
1643
       ;RRA
1644
        CALL    NO_BSY ;���� ��᭥� �� ����-樨 CD
1645
       ;CALL WAIT_DRQ ;����� ��᭥�, �᫨ ������ ᫨誮� ࠭�
1646
                 ;��᫥ ��室� ࠧ�������, ���� ������ � �⠥�
1647
     ;�������� DRQ �� �楯�� Budder'�
1648
        LD      DE,0
1649
RDCDDRQ CALL    IN_HDDSTAT
1650
        BIT     3,A
1651
       RET      NZ ;��⮬ ���⠥�
1652
        INC     DE
1653
        BIT     2,D ;4,D
1654
        JR      Z,RDCDDRQ
1655
        PUSH    HL
1656
        LD      HL,AP_00
1657
        CALL    SEND_ATAPI
1658
        POP     HL
1659
        JR      LOAD_SECTOR_
1660
 
1661
;ATAPI-����� "��������"
1662
AP_00
1663
        DW      0
1664
                DUPL 10,0;        DS    10
1665
 
1666
;ATAPI-����� "SPEED 1x"
1667
AP_1x
1668
        DW      0XBB
1669
        DB      0
1670
        DB      176 ;1x=176k/s
1671
                DUPL 8,0;        DS     8
1672
 
1673
;ATAPI-����� "������"
1674
AP_READ
1675
                IF 0;       IFN 0
1676
        DW      0XBE   ;"READ CD"
1677
SECTOR  DB      0,0,0,0
1678
        DB      0
1679
        DB      0,1   ;=1 ᥪ��
1680
        DB      0X10   ;�⠥� ⮫쪮 �����
1681
        DB      0,0
1682
       ELSE    
1683
        DW      0X28   ;"READ(10)"
1684
SECTOR  DB      0,0,0,0
1685
        DB      0
1686
        DB      0,1   ;=1 ᥪ��
1687
        DB      0
1688
        DB      0,0
1689
       ENDIF   
1690
AP_READTOC
1691
        DW      0X43   ;SCMSF=0,�.�.ᥪ���,� �� MSF
1692
        DB      0     ;FORMAT=0:�� ��ᨨ
1693
                DUPL 3,0;        DS     3
1694
        DB      0     ;� 1-� ��ᨨ
1695
        DB      HIGH (2048);'2048 ;����� ⠡�
1696
        DB      LOW (2048)
1697
        DB      0X00   ;FUNC
1698
                DUPL 2,0;        DS     2
1699
 
1700
       IF       atm=0
1701
pause
1702
;162t - 17 (call) - 10 (ret) = 135
1703
                REPT 11;       DUP      11
1704
        JR      $+2
1705
                ENDM;       EDUP        
1706
        NOP     ;136
1707
        RET    
1708
       ENDIF   
1709
 
1710
evEMPTY
1711
        RET    
1712
 
1713
evRIGHTOFF
1714
        LD      DE,HINTOFF
1715
        CALL    evRIGHTPM
1716
        JR      UMER
1717
evRIGHTON
1718
        LD      A,%11101111
1719
        LD      (NEEDKEY),A
1720
        LD      A,-1
1721
        LD      (CURKEY),A
1722
        CALL    ASKBIBIK
1723
        LD      DE,HINTRIGHT
1724
evRIGHTPM
1725
_y := 88
1726
_x := 31
1727
        xy2adr
1728
        LD      HL,_a
1729
        JR      evLRPM
1730
evLEFTOFF
1731
        LD      DE,HINTOFF
1732
        CALL    evLEFTPM
1733
        JR      UMER
1734
evLEFTON
1735
        LD      A,%11011111
1736
        LD      (NEEDKEY),A
1737
        LD      A,-1
1738
        LD      (CURKEY),A
1739
        CALL    ASKBIBIK
1740
        LD      DE,HINTLEFT
1741
evLEFTPM
1742
_y := 88
1743
_x := 0
1744
        xy2adr
1745
        LD      HL,_a
1746
evLRPM
1747
        LD      A,(curplane)
1748
                       ;0X1C,0X1D 0X16,0X17
1749
                   ;ATM;0X19,0X1D 0X13,0X17
1750
        OR      7
1751
       PUSH     AF
1752
       PUSH     DE
1753
       PUSH HL
1754
        CALL    evSPR16PP
1755
       POP      HL
1756
       POP DE
1757
       POP      AF
1758
        SUB     2
1759
        CALL    evSPR16PP
1760
        LD      A,(curplane)
1761
        LD      BC,32765
1762
        OUT     (C),A
1763
        RET    
1764
 
1765
evFIREOFF
1766
        LD      DE,HINTOFF
1767
        CALL    evFIREPM
1768
UMER
1769
        LD      A,(NEEDKEY)
1770
        LD      C,A
1771
        LD      A,(CURKEY)
1772
        CP      C
1773
        RET     Z
1774
        INC     A
1775
        CALL    Z,BADBIBIK ;�� �������� ��祣� - ᬥ���
1776
EVENTPARAM := $+1
1777
        LD      HL,0
1778
        LD      (CURENDOFVIDEO),HL
1779
        LD      HL,ENDOFVIDEODEAD
1780
        LD      (JPENDOFVIDEO),HL
1781
        RET    
1782
evFIREON
1783
        LD      A,%11111110
1784
        LD      (NEEDKEY),A
1785
        LD      A,-1
1786
        LD      (CURKEY),A
1787
        CALL    ASKBIBIK
1788
        LD      DE,HINTFIRE
1789
evFIREPM
1790
_y := 184
1791
_x := 28
1792
        xy2adr
1793
        LD      HL,_a
1794
        JR      evUDPM
1795
evDOWNOFF
1796
        LD      DE,HINTOFF
1797
        CALL    evDOWNPM
1798
        JR      UMER
1799
evDOWNON
1800
        LD      A,%11110111
1801
        LD      (NEEDKEY),A
1802
        LD      A,-1
1803
        LD      (CURKEY),A
1804
        CALL    ASKBIBIK
1805
        LD      DE,HINTDOWN
1806
evDOWNPM
1807
_y := 184
1808
_x := 15
1809
        xy2adr
1810
        LD      HL,_a
1811
        JR      evUDPM
1812
evUPOFF
1813
        LD      DE,HINTOFF
1814
        CALL    evUPPM
1815
        JR      UMER
1816
evUPON
1817
        LD      A,%11111011
1818
        LD      (NEEDKEY),A
1819
        LD      A,-1
1820
        LD      (CURKEY),A
1821
        CALL    ASKBIBIK
1822
        LD      DE,HINTUP
1823
evUPPM
1824
_y := 0
1825
_x := 15
1826
        xy2adr
1827
        LD      HL,_a
1828
evUDPM
1829
        LD      A,(curplane)
1830
                       ;0X1C,0X1D      0X16,0X17
1831
                  ;ATM ;0X19,0X1D      0X13,0X17
1832
        OR      7
1833
        PUSH    AF
1834
        PUSH HL
1835
        CALL    evUD88
1836
        POP     HL
1837
        POP AF
1838
        INC     HL
1839
evUD88
1840
       PUSH     AF
1841
       PUSH     DE
1842
       PUSH HL
1843
        CALL    evSPR8PP
1844
       POP      HL
1845
       POP DE
1846
       POP      AF
1847
        SUB     2
1848
        CALL    evSPR8PP
1849
        LD      A,(curplane)
1850
        LD      BC,32765
1851
        OUT     (C),A
1852
        RET    
1853
 
1854
evSPR16PP
1855
        LD      BC,32765
1856
        OUT     (C),A
1857
       PUSH     AF
1858
        PUSH    HL
1859
        PUSH    HL
1860
        CALL    HINTSTOLB
1861
        POP     HL
1862
        SET     5,H
1863
        CALL    HINTSTOLB
1864
        POP     HL
1865
       POP      AF
1866
                IF atm=1;       IFN     atm
1867
        SUB     4
1868
       ELSE    
1869
        DEC     A
1870
       ENDIF   
1871
        LD      BC,32765
1872
        OUT     (C),A
1873
        PUSH    HL
1874
        CALL    HINTSTOLB
1875
        POP     HL
1876
        SET     5,H
1877
HINTSTOLB
1878
                IF atm=1;       IFN     atm
1879
        LD      BC,40
1880
                REPT 15;        DUP     16
1881
        LD      A,(DE)
1882
        INC     E
1883
        LD      (HL),A
1884
        ADD     HL,BC
1885
                ENDM;        EDUP       
1886
        LD      A,(DE)
1887
        INC     E
1888
        LD      (HL),A
1889
       ELSE    
1890
                REPT 7;        DUP      8
1891
        LD      A,(DE)
1892
        INC     E
1893
        LD      (HL),A
1894
        INC     H
1895
                ENDM;        EDUP       
1896
        LD      A,(DE)
1897
        INC     E
1898
        LD      (HL),A
1899
;        ORG    $-1
1900
        LD      A,L
1901
        ADD     A,32
1902
        LD      L,A
1903
        LD      A,H
1904
        SUB     7
1905
        LD      H,A
1906
                REPT 7;        DUP      8
1907
        LD      A,(DE)
1908
        INC     E
1909
        LD      (HL),A
1910
        INC     H
1911
                ENDM;        EDUP       
1912
        LD      A,(DE)
1913
        INC     E
1914
        LD      (HL),A
1915
       ENDIF   
1916
;        ORG    $-1
1917
        RET    
1918
evSPR8PP
1919
        LD      BC,32765
1920
        OUT     (C),A
1921
       PUSH     AF
1922
        PUSH    HL
1923
        PUSH    HL
1924
        CALL    HINTSTOLB8
1925
        POP     HL
1926
        SET     5,H
1927
        CALL    HINTSTOLB8
1928
        POP     HL
1929
       POP      AF
1930
                IF atm=1;       IFN     atm
1931
        SUB     4
1932
       ELSE    
1933
        DEC     A
1934
       ENDIF   
1935
        LD      BC,32765
1936
        OUT     (C),A
1937
        PUSH    HL
1938
        CALL    HINTSTOLB8
1939
        POP     HL
1940
        SET     5,H
1941
HINTSTOLB8
1942
                IF atm=1;       IFN     atm
1943
        LD      BC,40
1944
                REPT 7;        DUP      8
1945
        LD      A,(DE)
1946
        INC     E
1947
        LD      (HL),A
1948
        ADD     HL,BC
1949
                ENDM;        EDUP       
1950
        LD      A,(DE)
1951
        INC     E
1952
        LD      (HL),A
1953
       ELSE    
1954
                REPT 7;        DUP      8
1955
        LD      A,(DE)
1956
        INC     E
1957
        LD      (HL),A
1958
        INC     H
1959
                ENDM;        EDUP       
1960
        LD      A,(DE)
1961
        INC     E
1962
        LD      (HL),A
1963
       ENDIF   
1964
;        ORG    $-1
1965
        RET    
1966
 
1967
                IF 0;       IFN 0
1968
CLSTOLB
1969
                IF atm=1;       IFN     atm
1970
        LD      BC,40
1971
        XOR     A
1972
                REPT 16;        DUP     16
1973
        LD      (HL),A
1974
        ADD     HL,BC
1975
                ENDM;        EDUP       
1976
       ELSE    
1977
                REPT 7;        DUP      8
1978
        LD      A,(DE)
1979
        INC     E
1980
        LD      (HL),A
1981
        INC     H
1982
                ENDM;        EDUP       
1983
        LD      A,(DE)
1984
        INC     E
1985
        LD      (HL),A
1986
;        ORG    $-1
1987
        LD      A,L
1988
        ADD     A,32
1989
        LD      L,A
1990
        LD      A,H
1991
        SUB     7
1992
        LD      H,A
1993
                REPT 7;        DUP      8
1994
        LD      A,(DE)
1995
        INC     E
1996
        LD      (HL),A
1997
        INC     H
1998
                ENDM;        EDUP       
1999
        LD      A,(DE)
2000
        INC     E
2001
        LD      (HL),A
2002
       ENDIF   
2003
;        ORG    $-1
2004
        RET    
2005
       ENDIF   
2006
OUTA
2007
       PUSH     BC
2008
        LD      C,A
2009
        LD      A,(curplane)
2010
        AND     0X18
2011
        OR      C
2012
        LD      BC,32765
2013
        OUT     (C),A
2014
       POP      BC
2015
        RET    
2016
 
2017
                include galarr.a80;        INCLUDE      "GALARR",0X84
2018
SCORE   DW      0
2019
LIVES   DB      0
2020
LEVEL   DB      0
2021
 
2022
                include galscrip.a80;        INCLUDE    "GALSCRIP",0XC4
2023
;       DISPLAY $
2024
                DUPL LOW (-$),0;        DS      .(-$)
2025
f88             binclude 88kriv.bin,0,0X800;     INCBIN "88kriv$",0X800
2026
loa
2027
end
2028
                IF 0
2029
                DUPL 0XC000-$,0;        DS      0XC000-$
2030
;       DISPLAY /T,end
2031
        ORG     0X5B00
2032
ObjTab  DB      "AUTORUN "
2033
        DB      "Z"
2034
        DW      begin,end-begin
2035
        DB      16
2036
        DB      "X "
2037
       IF       atm
2038
        DB      "PENT    "
2039
        DB      "C"
2040
        DW      0X8200,0X3E00
2041
        DB      16
2042
        DB      "  "
2043
       ENDIF   
2044
                ENDIF
2045
;               include saveobj5.a80;        INCLUDE    "SAVEOBJ*",0XC0