; twind.as
; 29.12.90
;-----
WT
CALL EWT
XOR A
LD E,A
LD D,A
JR sR_BOX
;-----
EWT
LD E,(IX+3) ;wid
LD D,(IX+2) ;hgt
EXX
LD C,(IX) ;x
LD B,(IX+1) ;y
DEC B
WIND1
INC B
PUSH BC
CALL sADDR
LD B,E
WIND LD A,0
OR A
CALL Z,sSPACE
DJNZ WIND
DEC D
EXX
POP BC
JR NZ,WIND1
LD B,(IX+1)
CALL sWATRB
LD L,(IX+3)
LD H,(IX+2)
CALL sDRAW
CALL sAT_NEXT
DEC H
JR NZ,WIND3
LD A,(IX+5)
JR WIND4m1
WIND3
CALL sDRAW
LD A,(IX+5)
BIT 7,A
JR NZ,$+3
LD (DE),A
CALL sAT_NEXT
DEC H
JR NZ,WIND3
WIND4m1
INC E
WIND4
BIT 7,A
RET NZ
LD (DE),A
INC E
DEC L
JR NZ,WIND4
RET
;-----
sR_WT
;97(61):wt - Вывод окна. Подфункция в рег. A: A=0 окно с одинарной рамкой, А=1 без рамки, А=2 с двойной рамкой, A=3..127 без рамки, A=128..255 только подкраска. IX= вектор окна
LD HL,WIND+1
LD E,0
BIT 7,A
JR Z,WT00
RES 7,A
DEC E ;0xff
WT00
LD (HL),E
OR A
JR Z,WT ;A=0 окно с одинарной рамкой
DEC A
JR Z,EWT ;A=1 окно без рамки
DEC A
JR NZ,EWT
;A=2 окно с двойной рамкой
CALL WT
XOR A
LD DE,#202
sR_BOX
OR A
JR NZ,$+4
LD A,#F
LD (BXCSR),A
EX AF,AF'
LD A,E
AND 7
LD C,A
LD A,D
AND 7
LD B,A
EX AF,AF'
AND 128
JR Z,BOX
;BOX_
EXX
XOR A
LD BC,#A62F
; ORG $-2
; CPL
; AND (HL)
JR NASTR
BOX
EXX
LD A,-1
; LD BC,OR NOP
LD BC,#B6
; ORG $-2
; OR (HL)
; NOP
NASTR
LD (LEND),BC
LD (CCPL+1),A
LD HL,SRS+1
RES 6,(HL)
INC A
JR NZ,$+4
SET 6,(HL)
PUSH IX
LD B,(IX+1)
LD C,(IX)
CALL sADDR
EXX
PUSH DE
EXX
POP HL
LD E,(IX+3)
LD D,(IX+2)
LD IX,TCORR
LD A,C
AND 7
RLCA
LD (IX+DCORR),A
INC A
LD (IX+DCORR1),A
RLCA
RLCA
SRS XOR #FA
PUSH AF
BIT 0,(IX+RSCR)
JR NZ,$+4
AND #7F
LD (IX+DSTL),A
POP AF
XOR #38
BIT 1,(IX+RSCR)
JR NZ,$+4
AND #7F
LD (IX+DSTR),A
LD A,H
ADD A,B
LD H,A
PUSH HL
LD A,D
DEC E
RLCA
RLCA
SUB B
RLCA
LD B,A
JR WD1
;-----
BXCSR DEFB %1111 ;адресуется через (IX+RSCR) ;d0: чёрная линия слева (DSTL) ;d1: чёрная линия справа (DSTR) ;d2: чёрная линия вверху ;d3: чёрная линия внизу
RSCR EQU -1
TCORR ;маски для левого и правого края
DEFW -1
DEFW #FE7F
DEFW #FC3F
DEFW #F81F
DEFW #F00F
DEFW #E007
DEFW #C003
DEFW #8001
;-----
sDRAW1:
INC H
LD A,7
AND H
JR NZ,WD1 ;NO !!
LD A,#20
ADD A,L
LD L,A
JR C,WD1 ;NEXT BLOK
LD A,H
SUB 8
LD H,A
WD1: ;тут патчится отрисовщик чёрной линии слева
SET 0,(HL)
LD A,L
ADD A,E
LD L,A
SETR: ;тут патчится отрисовщик чёрной линии справа
SET 7,(HL)
SUB E
LD L,A
DJNZ sDRAW1
CORR: LD B,(IX+0) ;маска 0xff..0x01
CORR1: LD C,(IX+0) ;адрес +1 по сравнению с предыдущим ;маска 0xff..0x80
INC E
LD D,E
BIT 3,(IX+RSCR)
CALL NZ,LINE ;чёрная линия внизу
POP HL
LD E,D
BIT 2,(IX+RSCR)
CALL NZ,LINE ;чёрная линия вверху
POP IX
RET
;-----
LINE:
DEC E
LD A,B
JR NZ,WD2
AND C
LEND
CPL ;NOP
AND (HL)
LD (HL),A
RET
;-----
WD2:
CALL LEND
WD3:
INC L
DEC E
JR Z,WD4
CCPL LD (HL),0
JR WD3
;-----
WD4:
LD A,C
JR LEND
;----- адреса патчей
DSTL EQU WD1+1-TCORR
DSTR EQU SETR+1-TCORR
DCORR EQU CORR+2-TCORR
DCORR1 EQU CORR1+2-TCORR
;**;**