;MAIN "VERA",8
 
        ;ORG FINAL,PG_MISC
 
 
 
BVIDEO  EQU #4400      ;финал видео
 
SUNP    EQU BVIDEO+768 ;спрайт солнца
 
MYSL    EQU SUNP+1404  ;спрайт финальной мысли
 
TABLE   EQU MYSL+224   ;таб. заливки
 
ATTR    EQU 48+6+64    ;атрибут заливки
 
 
 
        DISP #4000
 
;de=конец FINAL = 0x41b2
 
        PUSH DE,DE
 
        LD HL,MUS
 
        LD (IM2N-2),HL
 
 
 
        LD A,4
 
        CALL MUSNXT+3
 
 
 
;Распаковка видео,спрайтов,таблиц
 
        LD A,PG_MISC
 
        CALL PAGE
 
 
 
        LD HL,FINPACK
 
        LD DE,BVIDEO
 
        CALL DEHRUST
 
 
 
        ;LD A,16+8
 
        ;CALL CURSCR
 
        call setcurscr1
 
 
 
       if EGA
 
        ld a,(user_scr1_high) ;ok
 
        SETPGC000
 
        ld hl,0xd800
 
        ld de,0xd801
 
        ld bc,767
 
        ld (hl),l;0
 
        ldir
 
        ld de,standardpal
 
        OS_SETPAL
 
       endif
 
 
 
        LD A,ATTR
 
        LD (fill_3+1),A
 
       ;if !EGA
 
        CALL FILL ;затирание кружочком сверху справа
 
       ;endif
 
 
 
;Распаковка ключевого кадра для храма
 
        LD A,PG_MISC
 
        CALL PAGE
 
        LD HL,BKEY
 
        LD BC,ABOUTS-BKEY
 
        POP DE
 
        LDIR 
 
       if EGA
 
        ld a,(user_scr1_high) ;ok
 
        SETPGC000
 
       else
 
        ;LD A,PG_VIEW
 
        ;CALL PAGE
 
        call PAGE_PG_VIEW
 
       endif
 
        POP HL
 
        CALL LC5
 
 
 
        LD A,PG_MISC
 
        CALL PAGE
 
        LD HL,FINPACK
 
        LD DE,BVIDEO
 
        CALL DEHRUST ;зачем второй раз?
 
        
 
       if EGA
 
        ld a,(user_scr1_high) ;ok
 
        SETPGC000
 
       else
 
        ;LD A,PG_VIEW
 
        ;CALL PAGE
 
        call PAGE_PG_VIEW
 
       endif
 
 
 
FINLP   CALL VIDEO2
 
        HALT 
 
        HALT 
 
 
 
FNCN    LD HL,0
 
        INC HL
 
        LD (FNCN+1),HL
 
        LD DE,700
 
;       LD DE,1160
 
        LD BC,1160
 
;       LD BC,2010
 
        PUSH HL
 
        AND A
 
        SBC HL,DE
 
        POP HL
 
        JR Z,POINT1
 
        AND A
 
        SBC HL,BC
 
        JR Z,POINT2
 
 
 
        HALT 
 
        HALT 
 
        HALT 
 
 
 
;       LD A,(MKEYSp1) ;нажатие "Огня" на мышке
 
;       BIT 4,A
 
;       JR NZ,POINT2
 
 
 
        JR FINLP
 
 
 
POINT1
 
        ;запомнили атрибуты
 
        LD HL,#D800
 
        LD DE,#5800
 
        LD BC,768
 
        LDIR 
 
 
 
        CALL FILL
 
 
 
        CALL SUNPR
 
 
 
        ;восстановили атрибуты
 
        LD HL,#5800
 
        LD DE,#D800
 
        LD BC,768
 
        LDIR 
 
 
 
        JR FINLP
 
 
 
POINT2
 
        CALL FILL
 
 
 
        LD HL,#C000
 
        LD DE,#C001
 
        LD (HL),L
 
        LD BC,6143
 
        LDIR 
 
 
 
;       LD HL,#D800
 
;       LD DE,#D801
 
        LD BC,767
 
        LD (HL),64+48
 
        LDIR 
 
 
 
        XOR A
 
        LD (MKEYSp1),A
 
 
 
        LD B,80
 
        HALT 
 
        DJNZ $-1
 
 
 
;Вывод случайным образом спрайта
 
        LD BC,700 ;кол-во циклов
 
 
 
PNTLP   PUSH BC
 
 
 
;Расчет коорд. X
 
 
 
PNT1    CALL RNDX2
 
        LD D,A
 
        CP 14     ;X
 
        JR NC,PNT1
 
 
 
;Расчет коорд. Y
 
 
 
PNT11   CALL RNDX2
 
        LD E,A
 
        CP 16     ;Y
 
        JR NC,PNT11
 
 
 
;       AND A
 
;       LD A,D
 
;       JR Z,PNT33
 
;       LD H,E
 
 
 
        ADD A,A ;A=A*14
 
        LD B,A
 
        ADD A,A
 
        LD C,A
 
        ADD A,A
 
        ADD A,C
 
        ADD A,B
 
        
 
;       XOR A
 
;PNT22  ADD A,14  ;Y*14
 
;       DEC H
 
;       JR NZ,PNT22
 
 
 
        ADD A,D ;A - смещение байта
 
                ;от начала спрайта
 
 
 
;Берем байт в зависимости от смещения
 
 
 
PNT33   LD B,0
 
        LD C,A
 
        LD HL,MYSL
 
        ADD HL,BC
 
 
 
;       LD A,D
 
;       ADD A,9
 
;       LD D,A
 
;       LD A,E
 
;       ADD A,80
 
;       LD E,A
 
 
 
;Делаем смещение координат для вывода
 
        LD BC,#0950
 
        EX DE,HL
 
        ADD HL,BC
 
        EX DE,HL
 
 
 
;       CALL SCR_ADR
 
 
 
;by axor (the last courier)
 
;SCR_ADR
 
        LD A,E ;Вход: DE-координаты
 
        AND 7  ;Выход: DE-адрес в экране
 
        LD C,A ;За 80 тактов!
 
        LD A,E
 
        AND 192
 
        RRCA 
 
        RRCA 
 
        RRCA 
 
        OR #C0 ;40
 
        OR C
 
        LD C,A
 
        LD A,E
 
        AND 56
 
        RLCA 
 
        RLCA 
 
        OR D
 
        LD E,A
 
        LD D,C
 
;       RET
 
 
 
        LDI 
 
 
 
;       LD A,R
 
;       LD (DE),A
 
 
 
;       HALT
 
 
 
        POP BC
 
        DEC BC
 
        LD A,B
 
        OR C
 
        JR NZ,PNTLP
 
 
 
;выводим окончательно спрайт
 
 
 
        LD A,14
 
        LD (LDI13+1),A
 
        LD DE,MYSL
 
        LD HL,#C849
 
        LD C,16
 
        CALL SPS
 
 
 
;Ожидаем нажатие "огонь"
 
PNT2    HALT 
 
        ;LD A,(MKEYSp1) ;почему не работает???
 
        ;BIT 4,A
 
       ld a,0x7f
 
       in a,(0xfe)
 
       cpl
 
       and 1 ;space
 
        JR Z,PNT2
 
 
 
        XOR A
 
        LD (fill_3+1),A
 
 
 
        CALL FILL
 
 
 
        JP GAMEOVER_MMENU;MMENU
 
 
 
;       DI
 
;       LD A,255
 
;       CALL MUSNXT+3
 
;       JP SKPMN
 
 
 
;Вывод спрайта солнца
 
;  ---
 
SUNPR
 
        LD DE,SUNP
 
        LD HL,#C013
 
        LD C,12*8
 
SPS     CALL LDI13
 
        CALL LINE_HL
 
        DEC C
 
        JR NZ,SPS
 
 
 
;Вывод атрибутов
 
        LD HL,#5813
 
        LD C,12
 
SPS1    CALL LDI13
 
        CALL HL32
 
        DEC C
 
        JR NZ,SPS1
 
        RET 
 
;  ---
 
 
 
LDI13   LD B,13
 
        PUSH HL
 
LDILP   LD A,(DE)
 
        LD (HL),A
 
        INC L
 
        INC DE
 
        DJNZ LDILP
 
        POP HL
 
        RET 
 
 
 
HL32    PUSH DE
 
        LD DE,32
 
        ADD HL,DE
 
        POP DE
 
        RET 
 
 
 
;На выходе в А ПСЧ
 
RNDX2
 
;       PUSH HL
 
RNDX1   LD HL,0
 
        INC HL
 
        LD A,H
 
        AND #3F
 
        LD H,A
 
        LD (RNDX1+1),HL
 
        LD A,R
 
        XOR (HL)
 
;       POP HL
 
        RET 
 
 
 
;Вывод кадра колоколов
 
VIDEO2
 
        LD A,0    ;Кадры
 
        INC A
 
        CP 12
 
        JR C,$+3
 
        XOR A
 
        LD (VIDEO2+1),A
 
        ADD A,A
 
        LD E,A
 
        LD D,0
 
        LD HL,BELTAB
 
        ADD HL,DE
 
        LD E,(HL)
 
        INC HL
 
        LD D,(HL)
 
        LD (VID1m2),DE ;адрес кадра
 
        DI 
 
        CALL VIDEO
 
        EI 
 
        RET 
 
 
 
;fill_atributes
 
 
 
FILL
 
        LD BC,TABLE
 
fill_1
 
;       LD HL,#581F  ;#4000
 
        LD HL,#D81F  ;#C000
 
        LD A,(BC)
 
        INC A        ;#FF - конец заливки
 
        RET Z
 
fill_2
 
        LD A,(BC)
 
        AND A        ;0 - конец кадра
 
        JR Z,fill_4
 
        LD D,A
 
        LD A,L
 
fill_3
 
        LD (HL),ATTR
 
        DEC L
 
        DEC D
 
        JR NZ,fill_3
 
        ADD A,32
 
        LD L,A
 
        ADC A,H
 
        SUB L
 
        LD H,A
 
        INC BC
 
        JR fill_2
 
fill_4
 
        HALT 
 
        INC BC
 
        JR fill_1
 
 
 
;Табличка кадров колокола (видео)
 
BELTAB  DW BVIDEO
 
        DW BVIDEO+120
 
        DW BVIDEO+120+144
 
        DW BVIDEO+120+144+96
 
        DW BVIDEO+120+144+96+132
 
        DW BVIDEO+120+144+96+132+132
 
        DW BVIDEO+120+144+96+132+132
 
        DW BVIDEO+120+144+96+132
 
        DW BVIDEO+120+144+96
 
        DW BVIDEO+120+144
 
        DW BVIDEO+120
 
        DW BVIDEO
 
 
 
;       INCLUDE "TABLES"
 
 
 
        ENT 
 
ENDFIN
 
 
 
FINLEN  EQU ENDFIN-FINAL
 
       DISPLAY "FINLEN=",FINLEN