;******** "ЧЁРНЫЙ ВОРОН" - МОДУЛЬ ИНСТРУКЦИИ ********
 
;пока не работает - TODO
 
;лежит в 4000+
 
FONT42
 
        incbin "data/wnf1.fnt"
 
        incbin "data/wnf2.fnt"
 
 
 
WTR     EI
 
        HALT
 
        HALT
 
        DI
 
        RET
 
 
 
WT      RLCA
 
        ADD     A,L
 
        LD      L,A
 
        JR      NC,JA_
 
        INC     H
 
JA_     LD      A,(HL)
 
        INC HL
 
        LD H,(HL)
 
        LD L,A
 
        RET
 
 
 
PIC_T   DEFW PICbeg,PIC1,PIC2
 
DLPPIC  ;A-N экр
 
        PUSH AF
 
        LD DE,#4000
 
        LD HL,PIC_T
 
        CALL WT
 
        INC HL
 
        INC HL
 
        CALL DELPZ
 
        POP AF
 
        CALL ATRIB
 
        CALL SW5
 
        CALL MEM7
 
        CALL COPY
 
SW70    CALL SW7
 
        JP MEM0
 
 
 
ATR_T   DEFB #69,#28,#39
 
ATRIB   PUSH AF
 
        LD HL,ATR_T
 
        CALL BA
 
        LD HL,#5800
 
        LD (HL),A
 
        LD DE,#5801
 
        LD BC,#2FF
 
        LDIR
 
        POP AF
 
        OR A
 
        RET NZ
 
        LD HL,#58A0 ;для текста
 
        LD DE,#58A1
 
        LD BC,#23F
 
        LD (HL),#44
 
        LDIR
 
        JP TEXT
 
 
 
KEYS    ;0-none ;1..5 - <1>..<5> ;6-<A> ;7-<Q> ;8-<E>;9-<O>;10-<P>
 
        LD BC,#F7FE
 
        IN A,(C)
 
        CPL
 
        AND %11111
 
        JR Z,K768
 
        LD C,1
 
        RRA
 
        JR C,K1_5
 
        INC C
 
        RRA
 
        JR C,K1_5
 
        INC C
 
        RRA
 
        JR C,K1_5
 
        INC C
 
        RRA
 
        JR C,K1_5
 
        INC C
 
K1_5    LD A,C
 
        OR A
 
        RET
 
K768    LD B,#FD
 
        IN A,(C)
 
        RRA
 
        JR C,K78
 
        LD A,6
 
        OR A
 
        RET
 
K78     LD B,#FB
 
        IN A,(C)
 
        RRA
 
        JR C,K8
 
        LD A,7
 
        OR A
 
        RET
 
K8      RRA
 
        RRA
 
        JR C,Kop
 
        LD A,8
 
        OR A
 
        RET
 
Kop     LD B,#DF
 
        IN A,(C)
 
        RRA
 
        JR C,K10
 
        LD A,9
 
        OR A
 
        RET
 
K10     RRA
 
        JR C,Knon
 
        LD A,10
 
        OR A
 
        RET
 
Knon    XOR A
 
        RET
 
 
 
WAIT    CALL KEYS
 
        JR NZ,WAIT
 
        LD BC,#88
 
WA2     DEC BC
 
        LD A,C
 
        OR B
 
        JR NZ,WA2
 
        RET
 
 
 
;===========================
 
 
 
bINSTR  
 
        CALL SW70
 
XI00    XOR A
 
        OUT (#FE),A
 
        CALL DLPPIC
 
XI0     CALL TEXT
 
XI1     CALL COPY18
 
XI2     CALL KEYS
 
        JR Z,XI2
 
        CP 6
 
        JR NC,XI3
 
        CP 3
 
        JR NC,XI2
 
        CALL DLPPIC
 
        CALL WAIT
 
        CALL WTR
 
        CALL OFFS
 
        JR XI00
 
XI3     CP 7
 
        JR Z,XI4
 
        JR C,XI5
 
        CP 9
 
        JR Z,XI8
 
        JR NC,XI9
 
        ;CALL MEM7
 
        ;CALL OFFS
 
        ;CALL OFFD
 
        ;CALL MEM0
 
        ;JP bFLAG
 
        jp press_quit
 
 
 
XI4     CALL PgUp
 
        JR XI0
 
XI5     CALL PgDwn
 
        JR XI0
 
XI9     CALL LnUp
 
        LD HL,(TXT1)
 
        LD DE,Instr
 
        XOR A
 
        SBC HL,DE
 
        JR Z,XI0
 
        CALL _UP18
 
        CALL TEXT1
 
        JR XI1
 
 
 
XI8     CALL LnDwn
 
        CALL _DW18
 
        LD B,22-5
 
        LD HL,(TXT1)
 
XD2     LD A,(HL)
 
        INC HL
 
        CP 127
 
        JR Z,XI1
 
        CP 126
 
        JR NZ,XD2
 
        DJNZ XD2
 
        LD DE,(TXT1)
 
        PUSH DE
 
        LD (TXT1),HL
 
        CALL TEXTe
 
        POP HL
 
        LD (TXT1),HL
 
        JP XI1
 
 
 
LnUp    LD B,2
 
        JR _Up
 
PgUp    LD B,24-5
 
_Up     LD HL,(TXT1)
 
        LD DE,Instr
 
PU1     LD A,L
 
        CP E
 
        JR NZ,PU0
 
        LD A,H
 
        CP D
 
        JR NZ,PU0
 
        LD (TXT1),DE
 
        RET
 
PU0     DEC HL
 
        LD A,(HL)
 
        CP 126
 
        JR NZ,PU1
 
        DJNZ PU1
 
        INC HL
 
        LD (TXT1),HL
 
        RET
 
 
 
LnDwn   LD B,1
 
        JR _Dwn
 
PgDwn   LD B,23-5
 
_Dwn    LD HL,(TXT1)
 
PD1     LD A,(HL)
 
        INC HL
 
        CP 127
 
        RET Z
 
        CP 126
 
        JR NZ,PD1
 
        DJNZ PD1
 
        LD (TXT1),HL
 
        RET
 
 
 
WORDHL  LD      (TXT),HL
 
WORD    LD      HL,(TXT)
 
        LD      A,(HL)
 
        INC     HL
 
        LD      (TXT),HL
 
        CP      #80
 
        JR      NC,Compr
 
        CP      #7E
 
        RET     NC
 
        CALL    LETTER
 
        JR      WORD
 
Compr   AND     #7F
 
        LD HL,INCMPR
 
        CALL WT
 
        PUSH HL
 
        LD A,L
 
        CALL LETTER
 
        POP HL
 
        LD A,H
 
        CALL LETTER
 
        JR WORD
 
 
 
LETTER  OR A
 
        JR Z,W2
 
        LD      L,A
 
        LD      H,0
 
;       LD      A,(SY)
 
;       CP      24
 
;       JR      NC,W2
 
        ADD     HL,HL
 
        ADD     HL,HL
 
        ADD     HL,HL
 
        LD      BC,FONT42
 
        ADD     HL,BC
 
        PUSH    HL
 
        LD A,(SY)
 
        LD HL,YT
 
        CALL WT
 
        EX DE,HL
 
        LD A,(SX)
 
        LD C,A
 
        LD HL,XDT
 
        CALL BA
 
        LD L,A
 
        LD H,0
 
        ADD HL,DE
 
        POP     DE
 
        LD B,8
 
        LD A,C
 
        AND 3
 
        JP Z,L00
 
        CP 2
 
        JP Z,L04
 
        JP C,L06
 
        JP L02
 
W2      LD      A,(SX)
 
        INC     A
 
        CP      42
 
        JR      C,W3
 
        XOR     A
 
W3      LD      (SX),A
 
        RET
 
 
 
YT      DEFW #4000,#4020,#4040,#4060,#4080,#40A0,#40C0,#40E0
 
        DEFW #4800,#4820,#4840,#4860,#4880,#48A0,#48C0,#48E0
 
        DEFW #5000,#5020,#5040,#5060,#5080,#50A0,#50C0,#50E0
 
 
 
L00     LD A,(DE)
 
        LD (HL),A
 
        INC H
 
        INC DE
 
        DJNZ L00
 
        JP W2
 
 
 
L02     LD A,(DE)
 
        RRCA
 
        RRCA
 
        LD C,A
 
        AND %111111
 
        OR (HL)
 
        LD (HL),A
 
        INC L
 
        LD A,C
 
        AND %11000000
 
        OR (HL)
 
        LD (HL),A
 
        DEC L
 
        INC H
 
        INC DE
 
        DJNZ L02
 
        JP W2
 
 
 
L04     LD A,(DE)
 
        RRCA
 
        RRCA
 
        RRCA
 
        RRCA
 
        LD C,A
 
        AND %1111
 
        OR (HL)
 
        LD (HL),A
 
        INC L
 
        LD A,C
 
        AND %11110000
 
        OR (HL)
 
        LD (HL),A
 
        DEC L
 
        INC H
 
        INC DE
 
        DJNZ L04
 
        JP W2
 
 
 
L06     LD A,(DE)
 
        RLCA
 
        RLCA
 
        LD C,A
 
        AND %11
 
        OR (HL)
 
        LD (HL),A
 
        INC L
 
        LD A,C
 
        AND %11111100
 
        OR (HL)
 
        LD (HL),A
 
        DEC L
 
        INC H
 
        INC DE
 
        DJNZ L06
 
        JP W2
 
 
 
TEXT1   LD HL,#500
 
        LD A,6
 
        JR _TEXT
 
 
 
TEXTe   LD HL,#1600
 
        LD A,23
 
        JR _TEXT
 
 
 
TEXT    CALL _OFF18
 
        LD HL,#500
 
        LD A,23
 
_TEXT   LD (TXE+1),A
 
        LD      (SX),HL  ;выв.текста
 
        LD HL,(TXT1)
 
        LD (TXT),HL
 
TT      CALL    WORD
 
        RET NZ
 
        LD      HL,(SX)
 
        LD      L,0
 
        INC     H
 
        LD      (SX),HL
 
        LD A,H
 
TXE     CP 23
 
        JR C,TT
 
        RET
 
 
 
TXT1    DEFW Instr
 
SX      DEFB 2
 
SY      DEFB 1
 
TXT     DEFW 1
 
 
 
XDT     DEFB 0,0,1,2,3,3,4,5,6,6,7,8,9,9,10,11,12,12
 
        DEFB 13,14,15,15,16,17,18,18,19,20,21,21,22,23
 
        DEFB 24,24,25,26,27,27,28,29,30,30,30,30
 
INCMPR
 
        incbin "data/winstrcm.dat"
 
 
 
COPY    CALL MEM7
 
        LD HL,#4000
 
        LD DE,SCR
 
        LD BC,#1B00
 
        LDIR
 
        JP MEM0
 
 
 
COPY18  ;копир 18 строк
 
        CALL MEM7
 
        LD HL,#40A0
 
        LD DE,#C0A0
 
        LD B,3
 
        CALL cpy_18
 
        LD B,8
 
        LD HL,#4800
 
        LD DE,#C800
 
        CALL cpy_18
 
        LD B,7
 
        LD HL,#5000
 
        LD DE,#D000
 
        CALL cpy_18
 
        JP MEM0
 
 
 
cpy_18  PUSHs
 
        LD A,8
 
cpy1    PUSH HL
 
        PUSH DE
 
        LDI
 
        LDI
 
        LDI
 
        LDI;0
 
        LDI
 
        LDI
 
        LDI
 
        LDI;1
 
        LDI
 
        LDI
 
        LDI
 
        LDI;2
 
        LDI
 
        LDI
 
        LDI
 
        LDI;3
 
        LDI
 
        LDI
 
        LDI
 
        LDI;4
 
        LDI
 
        LDI
 
        LDI
 
        LDI;5
 
        LDI
 
        LDI
 
        LDI
 
        LDI;6
 
        LDI
 
        LDI
 
        LDI
 
        LDI;7
 
        POP DE
 
        POP HL
 
        INC H
 
        INC D
 
        DEC A
 
        JR NZ,cpy1
 
        POPs
 
        LD A,E
 
        ADD A,32
 
        LD E,A
 
        LD L,A
 
        DJNZ cpy_18
 
        RET
 
 
 
_OFF18  ;очист 18 строк
 
        LD E,0
 
        LD HL,#40A0
 
        LD C,3
 
        CALL off_18
 
        LD C,8
 
        LD HL,#4800
 
        CALL off_18
 
        LD C,7
 
        LD HL,#5000
 
        CALL off_18
 
        JP MEM0
 
 
 
off_18  PUSH HL
 
        LD B,8
 
off1    PUSH HL
 
        LD (HL),E ;
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E ;
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E ;
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E ;
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E ;
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E ;
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E ;
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E ;
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        INC L
 
        LD (HL),E
 
        POP HL
 
        INC H
 
        DEC A
 
        DJNZ off1
 
        POP HL
 
        LD A,L
 
        ADD A,32
 
        LD L,A
 
        DEC C
 
        JR NZ,off_18
 
        RET
 
 
 
_DW18   LD DE,#40A0
 
        LD HL,#40C0
 
        LD B,18
 
_U00    CALL MOVlin
 
        LD A,E
 
        ADD A,32
 
        LD E,A
 
        JR NC,_U01
 
        LD A,D
 
        ADD A,8
 
        LD D,A
 
_U01    LD A,L
 
        ADD A,32
 
        LD L,A
 
        JR NC,_U02
 
        LD A,H
 
        ADD A,8
 
        LD H,A
 
_U02    DJNZ _U00
 
        LD E,0
 
        LD C,1
 
        LD HL,#50C0
 
        JP off_18
 
 
 
_UP18   LD DE,#50C0
 
        LD HL,#50A0
 
        LD B,18
 
_D00    CALL MOVlin
 
        LD A,E
 
        SUB 32
 
        LD E,A
 
        JR NC,_D01
 
        LD A,D
 
        SUB 8
 
        LD D,A
 
_D01    LD A,L
 
        SUB 32
 
        LD L,A
 
        JR NC,_D02
 
        LD A,H
 
        SUB 8
 
        LD H,A
 
_D02    DJNZ _D00
 
        LD E,0
 
        LD C,1
 
        LD HL,#40A0
 
        JP off_18
 
 
 
 
 
MOVlin  PUSHs
 
        LD A,8
 
_MVLL   PUSH HL
 
        PUSH DE
 
        LDI
 
        LDI
 
        LDI
 
        LDI;0
 
        LDI
 
        LDI
 
        LDI
 
        LDI;1
 
        LDI
 
        LDI
 
        LDI
 
        LDI;2
 
        LDI
 
        LDI
 
        LDI
 
        LDI;3
 
        LDI
 
        LDI
 
        LDI
 
        LDI;4
 
        LDI
 
        LDI
 
        LDI
 
        LDI;5
 
        LDI
 
        LDI
 
        LDI
 
        LDI;6
 
        LDI
 
        LDI
 
        LDI
 
        LDI;7
 
        POP DE
 
        POP HL
 
        INC D
 
        INC H
 
        DEC A
 
        JR NZ,_MVLL
 
        POPs
 
        RET
 
 
 
 
 
PICbeg
 
        incbin "data/winstr0.lpz"
 
PIC1
 
        incbin "data/winstr1.lpz"
 
PIC2
 
        incbin "data/winstr2.lpz"
 
 
 
 
 
Instr
 
        incbin "data/winstr.dat" ;текст зашифрован, оригинала нет, есть конвертор из оригинала на C, но не наоборот