Login

Subversion Repositories NedoOS

Rev

Rev 505 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

;cтраница 7
TMOM    LD A,(CONTRB)
        AND %10000
        RET Z
        JR NZ,TMOM

;----работа с меню
bSETUP  ;нач
        XOR A
        LD (_S_CFt),A
        LD HL,TXC2-1
        LD (_S_CFx),HL
        ;
        LD HL,KEYJOY
        PUSH HL
        LD DE,S_kj
        LD BC,12
        LDIR
        LD HL,S_gSPD
        LD A,18
        SUB (HL)
        LD (HL),A
        DEC HL
        DEC (HL)
        LD HL,0
        LD (S_kb),HL
        POP HL
        LD A,(HL)
        OR A
        RET NZ
        LD HL,(KEYS)
        LD DE,KBR
        SBC HL,DE
        LD HL,S_kb
        JR Z,bSE1
        INC HL
bSE1    INC (HL)
        RET

SETUP    CALL bSETUP ;вх.уст
         CALL TMOM
         CALL oSETUP
         JP eSETUP

oSETUP  ;блок настроек
        CALL STD ;????
        if EGA
;выключить стрелочку
;стереть стрелочку
        LD A,2
        LD (V_FLAG),A
        CALL V_PUT1
        endif        
        LD HL,setuTB
        LD B,6
sup1    PUSH BC
        LD E,(HL)
        INC HL
        LD D,(HL)
        INC HL
        LD C,(HL)
        INC HL
        LD B,(HL)
        INC HL
        INC HL
        CALL MU_BOX
        POP BC
        DJNZ sup1
        ;выв текстов
        LD DE,#102
        LD HL,TXC1
        CALL PRINTS
        LD DE,#402
        LD HL,TXM2
        CALL PRINTS
        LD DE,#502
        LD HL,TXM3
        CALL PRINTS
        LD DE,#602
        LD HL,TXM4
        CALL PRINTS
        LD DE,#903
        LD HL,TXM5
        CALL PRINTS
        LD DE,#C02
        LD HL,TX_MUS
        CALL PRINTS
        LD DE,#D02
        LD HL,TX_EFF
        CALL PRINTS
        LD DE,#E02
        LD HL,TXcolr
        CALL PRINTS
        LD DE,#F02
        LD HL,TXdisc
        CALL PRINTS
        LD DE,#1202
        LD HL,TXM9
        CALL PRINTS
        LD DE,#1502
        LD HL,TXM10
        CALL PRINTS
        ;раскрас
        LD HL,setuTB
        CALL STS
        LD B,6
sup2    PUSH BC
        LD E,(HL)
        INC HL
        LD D,(HL)
        INC HL
        LD B,(HL)
        INC HL
        LD C,(HL)
        INC HL
        LD A,(HL)
        INC HL
        PUSH HL
        EX DE,HL
        LD E,A
        CALL ATRBAR
        POP HL
        POP BC
        DJNZ sup2
        if EGA
;прочитать стрелочку
;включить стрелочку
        CALL V_GET1
        xor a
        LD (V_FLAG),A
        else
        LD HL,#2828
        LD (ATR+532),HL
        LD (ATR+564),HL
        LD HL,#3939
        LD (ATR+468),HL
        LD (ATR+436),HL
        endif
Setup0
        if EGA==0
        CALL BLITE2 ;иначе мигает
        endif
        CALL oSETpr

        if EGA
        LD A,2
        LD (V_FLAG),A ;cursor off
        CALL V_PUT1 ;visible screen
        endif
       
        CALL Copper
       
        if EGA
        CALL V_GET1
        call V_MRK1 ;на видимом экране (в это время G_MX не обновляется, т.к. стрелочка выключена)
        xor a
        LD (V_FLAG),A ;cursor on
        endif
       
        CALL BMOV
        CALL fSzone
        HALT ;YIELD никогда не попадёт в наш перехваченный обработчик прерываний
        JR Setup0

BLITE2  CALL BLITER ;копируем на экран, рисуем курсор
        JP V_PUT2 ;стираем курсор

TXM2    DEFB 22,59,48,50,56,48,66,67,64,48, 10, 32,12,26,28,24, 127
TXM3    DEFB 20,61,66,53,64,68,53,57,65, 10, 02, 127
TXM4    DEFB 22,53,60,63,65,66,62,61, 10, 52,54,62,57,65,66,56,58, 127
TXM5    DEFB 22,53,60,63,65,66,62,61, 10, 60,75,72,58,48, 127
TX_MUS  DEFB 12,86,10,24,67,55,75,58,48, 127
TX_EFF  DEFB 12,86,10,40,68,68,53,58,66,75, 127
TXcolr  DEFB 34,50,53,66,61,48,79,10,56,51,64,48, 127
TXdisc  DEFB 26,66,51,64,67,55,58,56,10,61,48,10,87,12,88, 127
TXM9    DEFB 24,84,81,10,10, 22,67,64,65,62,64,10,10, 24,12,33,127
TXM10   DEFB 24,84,81,10, 29,58,62,64,62,65,66,74,10
        DEFB 56,51,64,75,10, 24,12,33,127


;врем парм - порядок неизm
S_kb    DEFB 1
S_in2   DEFB 0
S_kj    DEFB 0

S_km    DEFB 0 ;начальное значение не влияет? см. PMOUSE
S_ayM   DEFB 1
S_ayE   DEFB 0
S_colr  DEFB 1
S_disk  DEFB 0
S_cSPD  DEFB 4
S_gSPD  DEFB 16
S_ani   DEFB 1
S_vis   DEFB 0
S_gsML  DEFB 15 ;unus
S_gsEL  DEFB 2 ;

_S_cnt  DEFB 1
_S_cn_  DEFB 1
_S_CFx  DEFW 0
_S_CFt  DEFB 0
_S_CFc  DEFB 0

_oSlet  LD A,12
        JR _oSpx1
        ;
_oSpx   LD A,96
_oSpx1  ADD A,(HL)
        INC HL
        CALL PRINT
        INC D
        DEC E
        RET

oSETpr  ;выв парм. сетупа
        CALL STD
        LD DE,#414
        LD HL,S_kb
        LD B,3
oSP1    CALL _oSpx
        DJNZ oSP1
        LD DE,#912
        CALL _oSpx
        LD B,3
        LD DE,#C0F
oSP2    CALL _oSpx
        DJNZ oSP2
        CALL _oSlet
        LD DE,#1302
        LD B,14
        CALL _oSlin
        LD DE,#1602
        LD B,19
        CALL _oSlin
        LD A,(S_ani)
        OR A
        LD A,113
        JR NZ,oSP3
        LD A,56
oSP3    LD DE,#B014
        CALL _oSani
        CALL ANIMTR
        LD A,(S_vis)
        CALL _shdw
        LD A,49
        LD DE,#A8B4
        JP _oSani

_oSlin  ;выв рулера (B-длина)
        LD A,92
        CALL PRINT
_oSl1   LD A,93
        CALL PRINT
        DJNZ _oSl1
        LD A,95
        CALL PRINT
        LD A,(HL)
        INC HL
        ADD A,3
        LD E,A
        LD A,94
        JP PRINT

SzoneT  ;X,widhtX, Y,widhtY
        DEFB 2,20, 4,3
        DEFB 3,16, 9,1
        DEFB 2,15, 12,4
        DEFB 3,14, 18,3
        DEFB 3,19, 21,3
        DEFB 19,4, 12,3
        DEFB 19,4, 16,3
        DEFB 24,8, 0,24


SFU5    LD HL,S_vis;темнота
        JR SFU_

SFU6    LD HL,S_ani
        JR SFU_

SFU0    LD HL,S_kb ;тип упр
        PUSH HL
        LD (HL),0
        INC HL
        LD (HL),0
        INC HL
        LD (HL),0
        POP HL
        CALL BA
        INC (HL)
        RET

SFU1    LD HL,S_km;мыша
SFU_    LD A,(_S_cnt)
        OR A
        RET NZ
        LD A,(HL)
        XOR 1
        LD (HL),A
        RET

SFU2    EX AF,AF
        LD A,(_S_cnt)
        OR A
        RET NZ
        EX AF,AF
        LD HL,S_ayM ;тип муз
        CALL BA
        XOR 1
        LD (HL),A
        RET

SFU3    LD A,(BX)
        SUB 3
        LD (S_cSPD),A
        RET

SFU4    LD A,(BX)
        SUB 3
        LD (S_gSPD),A
        RET

SFU7    ;return
        LD A,(_S_cnt)
        OR A
        RET NZ
        POP AF;!
        RET

SzoneF  DEFW SFU0,SFU1,SFU2,SFU3,SFU4,SFU5,SFU6,SFU7
fSzone  ;ф-ции по зонам
        LD HL,_S_cn_
        LD A,(HL)
        LD (_S_cnt),A
        LD A,(CONTRB)
        LD (HL),A
        AND %10000
        RET Z
fS4     LD B,0
        LD HL,SzoneT
fS0     PUSH HL
        CALL _fSzs
        POP HL
        JR C,fS1
        INC HL
        INC HL
        INC HL
        INC HL
        INC B
        LD A,B
        CP 8; макс число зон
        JR C,fS0
        RET NC
fS1     PUSH AF
        LD A,B
        LD HL,SzoneF
        CALL WT
        POP AF
        JP (HL)

_fSzs   LD DE,(BX)
        LD A,E
        SUB (HL)
        INC HL
        CP (HL)
        RET NC
        LD A,D
        INC HL
        SUB (HL)
        INC HL
        CP (HL)
        RET

TXC1    DEFB 10,10,10,10,35,80,64,61,75,57, 10
        DEFB 14,62,64,62,61, 10,10,10,10,127
TXC2    DEFB 12,50,66,62,64, 10
        DEFB 14,45,29,45,24,53,52,61,62,61,62,51,62,50, 127
TXC3    DEFB 29,26,28,28,17,82,10,85,17,17,30,10,10,87,65,88,1,9,9,7,127
TXC4    DEFB 10,10,10, 29,48,61,58,66,91,27,53,66,53,64,49,67,64,51
        DEFB 10,10,10, 127, 126

        if 1==0
;-----pM

tst60a  PUSH DE ;[**] на вх. =#C9
        PUSH AF
tst60   ADD A,(HL) ;[**]
        INC HL
        DEC C
        JR NZ,tst60
        DEC B
        JR NZ,tst60
        LD HL,#DB00
        CP (HL)
        RET NZ;err
        POP AF
        POP HL
        LD (tst60a),HL
        RET
        endif

Copper  LD HL,(_S_CFx)
        LD A,(HL)
        CP 127
        JR NZ,Cop1
        LD HL,_S_CFt
        INC (HL)
        LD A,(HL)
        CP 60
        RET C
        LD A,2
        LD (_S_CFc),A
        LD (_S_CFt),A
        LD HL,(_S_CFx)
        INC HL
        LD A,(HL)
        CP 126
        JR NZ,Cop2
        LD HL,TXC1
Cop2    LD (_S_CFx),HL
        RET
Cop1    LD HL,_S_CFc
        LD E,(HL)
        INC (HL)
        LD D,1
        LD HL,(_S_CFx)
        LD A,(HL)
        INC HL
        LD (_S_CFx),HL
        CALL PRINT
        RET

eSETUP  ;out menu
        LD HL,S_kj
        PUSH HL
        LD DE,KEYJOY
        LD BC,12
        LDIR
        LD HL,SLOW
        LD A,18
        SUB (HL)
        LD (HL),A
        DEC HL
        INC (HL)
        POP HL
        LD A,(HL)
        OR A
        RET NZ
        DEC HL
        LD A,(HL)
        OR A
        LD HL,KBR
        JR Z,eSE1
        LD HL,INT2
eSE1    LD (KEYS),HL
        RET



TXMM1   DEFB 31,65,66,48,61,62,50,56,66,74,10, 62,63,70,56,56,127
TXMM2   DEFB 10,29,62,69,64,48,61,56,66,74, 10, 56,51,64,67,127
TXMM3   DEFB 17,73,80,10, 62,52,61,48,10, 63,62,63,75,66,58,48,127
TXMM4   DEFB 10,19,48,58,62,61,71,56,66,74,10, 56,51,64,67,127

M_MENU  ;>>главное меню
        LD A,2
        LD (V_FLAG),A ;cursor off
        if EGA
        CALL V_PUT1 ;visible screen
        endif
       
        CALL STS
        ;пункты
        LD B,4
        LD HL,#403
M_M1    PUSH BC
        PUSH HL
        LD BC,#312
        LD E,#7A
        CALL ATRBAR
        LD BC,#1203
        POP DE
        PUSH DE
        CALL MU_BOX
        POP HL
        INC H
        INC H
        INC H
        INC H
        POP BC
        DJNZ M_M1
        LD HL,TXMM1
        LD DE,#504
        LD B,4
M_M2    PUSH DE
        CALL PRINTS
        INC HL
        POP DE
        INC D
        INC D
        INC D
        INC D
        DJNZ M_M2

        if EGA
        CALL V_GET1
        call V_MRK1 ;на видимом экране (в это время G_MX не обновляется, т.к. стрелочка выключена)
        endif
        XOR A
        LD (V_FLAG),A ;cursor on
        ;опрос гл.меню
        CALL TMOM
M_M3    CALL Mfunc
        LD B,4
        LD HL,#1003
M_M30   LD A,D
        INC A
        CP B
        LD E,#7A
        JR NZ,M_M31
        LD E,#71
M_M31   PUSHs
        LD BC,#312
        CALL ATRBAR
        POPs
        DEC H
        DEC H
        DEC H
        DEC H
        DJNZ M_M30
        HALT
        LD A,(CONTRB)
        AND %10000
        JR Z,M_M3
        ;по ф-циям
        LD A,D
        CP #FF
        RET Z
        OR A
        JP Z,SETUP ;-в уст
        CP 2
        JP C,M_M9
        PUSH AF
        ;exit menu
        LD A,2
        LD (V_FLAG),A
        CALL V_PUT1
        LD HL,TXMMex
        LD DE,#1104
        POP AF
        PUSH AF
        JR NZ,M_M5
        LD HL,TXMrst
        LD D,#D
M_M5    CALL PRINTS
        CALL YES_NO
        JR Z,M_M6
        POP AF ;No
        RET
M_M6    POP AF
        JP Z,LODrtr
        ;exit
       
        if 1==1
;NedoOS
        call swapimer
        im 1
        call shutay ;outSND уже затёрт?
        ei
        halt ;чтобы кнопка была поймана системой
        GET_KEY ;вычитать кнопку Y
        QUIT
shutay
        ld de,0xe00
shutay0
        dec d
        ld bc,0xfffd
        out (c),d
        ld b,0xbf
        out (c),e
        jr nz,shutay0
        ret

        else
       
        DI
        LD HL,#4000
        LD DE,#4001
        LD (HL),4
        LD B,#20
        LDIR
        XOR A
        LD BC,#7FFD
        JP M_Mexi
        endif

YES_NO  LD BC,#DFFE  ;Z-Yes/NZ-No
        IN A,(C)
        AND #10
        RET Z
        LD B,#7F
        IN A,(C)
        CPL
        AND 8
        RET NZ
        JR YES_NO

Mfunc   CALL BMOV ;(D:=#FF,0-3)
        LD D,#FF
        LD A,(BX)
        CP 3
        RET C
        CP 21
        RET NC
        LD A,(BY)
        SUB 4
        RET C
        CP 16
        RET NC
        LD E,A
        AND 3
        CP 3
        RET Z
        LD D,E
        SRL D
        SRL D
        RET

TXMMex  DEFB 27,64,62,73,48,53,60,65,79,10,87,86,90,81,88,44,127
TXMrst  DEFB 10,28,53,65,66,48,64,66,10,87,86,90,81,88,44,10,127
TXMsav  DEFB 61,48,10,52,56,65,58,10,00,43,87,86,90,81,88,44,127 ;на диск Х

M_M9    ;меню save
        INC A
        LD (V_FLAG),A
        CALL V_PUT2
        LD HL,#606
        PUSH HL
        LD BC,#C0C
        PUSH BC
        LD E,#4
        CALL ATRBAR
        POP BC
        POP DE
        CALL MU_BOX
        LD B,8
        LD DE,#F08
        LD HL,TXMgme
M_M90   PUSHs
        LD A,B
        LD (TXMgme+7),A
        CALL PRINTS
        POPs
        DEC D
        DJNZ M_M90
        CALL V_GET1
        XOR A
        LD (V_FLAG),A
        CALL TMOM
M_M91   HALT
        CALL BMOV
        LD D,#FF
        LD HL,(BX)
        LD A,L
        SUB 6
        CP 12
        JR NC,M_M92
        LD A,H
        SUB 8
        CP 8
        JR NC,M_M92
        LD D,A
M_M92   LD B,8
        LD HL,#F06
M_M94   PUSHs
        LD A,D
        INC A
        CP B
        LD E,#4
        JR NZ,M_M93
        LD E,#4F
M_M93   LD BC,#10C
        CALL ATRBAR
        POPs
        DEC H
        DJNZ M_M94
        LD A,(CONTRB)
        AND %10000
        JR Z,M_M91
        CALL TMOM
        LD A,D
        CP #FF
        RET Z
        PUSH AF
        LD A,2
        LD (V_FLAG),A
        CALL V_PUT1
        LD BC,#0414
        LD HL,#1102
        LD E,#57
        PUSH HL
        CALL ATRBAR
        POP DE
        LD BC,#1404
        CALL MU_BOX
        LD HL,TXMM2
        LD DE,#1204
        CALL PRINTS
        LD A,(SAVDSK)
        ADD A,12
        LD (TXMsav+8),A
        LD DE,#1304
        LD HL,TXMsav
        CALL PRINTS
        CALL YES_NO
        POP BC
        RET NZ
        LD A,B
        JP SAVgam

;----окончание
MU_END  ;A=1/2 -победа/поражение
        PUSH AF
        CALL STS
        LD A,2
        LD (V_FLAG),A
        CALL V_PUT1
        POP AF
        DEC A
        JR NZ,meMIS
        ;победа
        LD DE,#701
        PUSH DE
        LD BC,#160C
        CALL MU_BOX
        POP HL
        LD BC,#0C16
        LD E,%01001110
        CALL ATRBAR
        LD DE,#909
        LD HL,Evic1
        CALL PRINTS
        LD DE,#A03
        LD HL,Evic2
        CALL PRINTS
        LD DE,#C05
        CALL TUtime
        LD DE,#1004
        LD HL,TXMM2
        CALL PRINTS
        LD DE,#1109
        LD HL,Ey_n
        CALL PRINTS
        ATRs #1005,#20E,%01011110
        CALL YES_NO
        CALL Z,M_M9
        JP LODnxt
meMIS   ;поражение
        LD DE,#802
        PUSH DE
        LD BC,#140A
        CALL MU_BOX
        POP HL
        LD BC,#A14
        LD E,%01111010
        CALL ATRBAR
        LD DE,#A06
        LD HL,Emis1
        CALL PRINTS
        LD DE,#C07
        LD HL,Emis2
        CALL PRINTS
        LD DE,#F05
        PUSH DE
        LD HL,Emis3
        CALL PRINTS
        POP HL
        LD BC,#10F
        LD E,%01101010
        CALL ATRBAR
        CALL bWAIT
        CALL TMOM
        JP LODrtr

setuTB  DEFW #0000,#1807
        DEFB #31
        DEFW #0B01,#170D
        DEFB #4E
        DEFW #0800,#1509
        DEFB #69
        DEFW #0301,#1507
        DEFB #7A
        DEFW #0802,#1203
        DEFB #7B
        DEFW #0C13,#0407
        DEFB #60

;----- п/п вывода панели

oMN_WD  ;вывод денег/леcа
        LD HL,(MONEY1)
        LD A,L
        OR H
        JR NZ,oMN1WD
        LD HL,(WOOD1)
        LD A,L
        OR H
        JR NZ,oMN1WD
        LD HL,ATR+57
        EXX
        LD DE,#119
        LD HL,MONEY
        CALL outmw
        LD HL,ATR+121
        EXX
        LD DE,#319
        LD HL,WOOD
outmw   LD C,0
om0     LD A,(HL)
        INC HL
        OR A
        JR NZ,om2
        CP C
        JR NZ,om2
        LD A,11
        LD B,#50
        JR om1
om2     INC C
        LD B,#68
om1     CALL MONEYPRINT
        if EGA==0
        LD A,B
        EXX
        LD (HL),A
        INC HL
        EXX
        endif
        LD A,E
        CP #1E
        JR C,om0
        RET NZ
        LD A,(HL)
        JR om2

oMN1WD  LD HL,ATR+57 ;альт.вывод
        EXX
        LD DE,#119
        LD HL,MONEY1+1
        CALL out1mw
        LD HL,ATR+121
        EXX
        LD DE,#319
        LD HL,WOOD1+1
out1mw  LD C,0
        LD A,11
        CALL MONEYPRINT
        LD A,11
        CALL MONEYPRINT
        if EGA==0
        EXX
        LD (HL),#50
        INC HL
        LD (HL),#50
        INC HL
        EXX
        endif
o1m8    CALL o1m0
o1m0    LD A,(HL)
        RLCA
        RLCA
        RLCA
        RLCA
        CALL o1m7
        LD A,(HL)
        LD (HL),0
        DEC HL
o1m7    AND #F
        OR A
        JR NZ,o1m2
        CP C
        JR NZ,o1m2
        LD A,E
        CP #1E
        LD A,0
        JR NC,o1m2
        LD A,11
        LD B,#50
        JR o1m1
o1m2    INC C
        LD B,#58
o1m1    CALL MONEYPRINT
        if EGA==0
        LD A,B
        EXX
        LD (HL),A
        INC HL
        EXX
        endif
        RET

TX48x7 
;выв.назв.героя
        if EGA
        ld a,24;29
        call _128
        LD A,2
        LD (V_FLAG),A ;выключить стрелочку
        CALL V_PUT1 ;на видимом экране
        LD de,(TX_AD) ;выв.назв.героя (переменная в 8000+!)
        call setpgsscr40008000_current
        call TX48x7doscr ;на выходе должна поставить pgmain
        CALL V_GET1
        call V_MRK1 ;на видимом экране (в это время G_MX не обновляется, т.к. стрелочка выключена)
        xor a
        LD (V_FLAG),A ;включить стрелочку
        CALL V_PUT2 ;на рисуемом экране
        LD de,(TX_AD) ;выв.назв.героя (переменная в 8000+!)
        call setpgsscr40008000 ;на рисуемом экране
        call TX48x7doscr ;на выходе должна поставить pgmain
        jp V_GET_MRK2 ;на рисуемом экране
TX48x7doscr
        ld hl,scrbase+(65*40)+25
        ld bc,0x0718
        jp primgega_pixsz
        else ;~EGA
        LD HL,(TX_AD) ;выв.назв.героя
        LD E,(HL)
        INC HL
        LD D,(HL)
        INC HL
        LD (SET_SP+1),SP
        LD SP,HL
        LD HL,SCR+#900+25
        LD B,3
T4S0    LD (HL),E
        INC H
        LD (HL),D
        INC H
        POP DE
        LD (HL),E
        INC H
        LD (HL),D
        INC H
        POP DE
        LD (HL),E
        INC H
        LD (HL),D
        INC H
        POP DE
        LD (HL),E
        LD H,SCR/256+9
        INC L
        LD (HL),D
        INC H
        POP DE
        LD (HL),E
        INC H
        LD (HL),D
        INC H
        POP DE
        LD (HL),E
        INC H
        LD (HL),D
        INC H
        POP DE
        LD (HL),E
        INC H
        LD (HL),D
        POP DE
        LD H,SCR/256+9
        INC L
        DJNZ T4S0
        JP SET_SP
        endif

OUTBAR  ;общий вывод панели
;TODO выводить это всё на двух экранах и обвязать стиранием стрелочки
        CALL STS
;;      LD HL,WFONT
;;      LD (FONT),HL
        CALL oMN_WD
        CALL outTX
        CALL oINDY
        if EGA
        call clearbuttonframes ;затирает рамки кнопок (немножко срезает с левой цифры)
        CALL oBUT ;не перерисовывает кнопки, если они не изменились?
        CALL outNUM ;
        CALL outSQR
        else
        CALL outSQR
        CALL oBUT
        CALL outNUM
        endif
        JP outLED

        ;ds #FFFE-$
        ;nop ;CHK_7     DEFB #EE; [**B] чек-сум7 7:#FFFE
        ;ds 1