2D-Studio/INTERFACE/WINDOW-H.ASM
2025-07-11 00:23:19 +10:00

2035 lines
25 KiB
NASM

PAGE0: EQU #82
PAGE1: EQU #A2
PAGE2: EQU #C2
PAGE3: EQU #E2
Y_PORT: EQU #89
CAPSI: EQU 23658
LAST_K: EQU 23560
M_ITEM: EQU #01
M_GRAY: EQU #02
M_BAR: EQU #04
M_END: EQU #80
INIT: LD BC,#0880 ;OPEN 320x256 256COLOR
LD HL,#4000
LD E,1
CALL #3D13
LD HL,COLORS ;SET DESKTOP PALETTE
LD DE,#12EE ;& CURSOR COLORS
LD BC,#FFA4 ;#EE,#EF
XOR A
CALL #3D13
LD BC,256 ;CLEAR SCREEN
EXX
LD HL,0
LD D,H
LD E,L
LD BC,320
LD A,GREEN
CALL RECTAN
RET
BLACK: EQU #F0
RED: EQU #F1
GREEN: EQU #F2
YELLOW: EQU #F3
BLUE: EQU #F4
MAGENTA: EQU #F5
CYAN: EQU #F6
DGRAY: EQU #F7
GRAY: EQU #F8
BRED: EQU #F9
BGREEN: EQU #FA
BYELLOW: EQU #FB
BBLUE: EQU #FC
BMAGENT: EQU #FD
BCYAN: EQU #FE
WHITE: EQU #FF
COLORS: ; B G R
DEFB #00,#00,#00,#00 ;CURSOR
DEFB #FF,#FF,#FF,#00 ;CURSOR
DEFB #00,#00,#00,#00 ;BLACK
DEFB #00,#00,#80,#00 ;RED
DEFB #00,#80,#00,#00 ;GREEN
DEFB #00,#80,#80,#00 ;YELLOW
DEFB #80,#00,#00,#00 ;BLUE
DEFB #80,#00,#80,#00 ;MAGENTA
DEFB #80,#80,#00,#00 ;CYAN
DEFB #80,#80,#80,#00 ;BLACK/GRAY
DEFB #C0,#C0,#C0,#00 ;WHITE/GRAY
DEFB #00,#00,#FF,#00 ;RED
DEFB #00,#FF,#00,#00 ;GREEN
DEFB #00,#FF,#FF,#00 ;YELLOW
DEFB #FF,#00,#00,#00 ;BLUE
DEFB #FF,#00,#FF,#00 ;MAGENTA
DEFB #FF,#FF,#00,#00 ;CYAN
DEFB #FF,#FF,#FF,#00 ;WHITE
; HL/DE - X/Y
; A - COLOR
;POINT
POINT: PUSH HL
EX AF,AF'
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
OUT (Y_PORT),A
LD DE,#4040
ADD HL,DE
EX AF,AF'
LD (HL),A
POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
XORPIX: PUSH HL
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
OUT (Y_PORT),A
LD DE,#4040
ADD HL,DE
LD A,(HL)
CPL
LD (HL),A
POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
; HL/E - X/Y
; BC - SIZE
; A - COLOR
;HORIZONTAL LINE DRAWER
HZLINE: PUSH HL
EX AF,AF'
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
OUT (Y_PORT),A
LD DE,#4040
ADD HL,DE
EX AF,AF'
LD D,H
LD E,L
LD (HL),A
INC DE
DEC BC
LDIR
POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
; HL/E - X/Y
; BC - SIZE
; A - COLOR
;HORIZONTAL PUNKTIR LINE DRAWER
HRUBBER: PUSH HL
EX AF,AF'
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
OUT (Y_PORT),A
LD DE,#4040
ADD HL,DE
EX AF,AF'
LD D,A
RUBB1: LD (HL),D
INC HL
DEC BC
LD A,B
OR C
JR Z,RUBB2
INC HL
DEC BC
LD A,B
OR C
JR NZ,RUBB1
RUBB2: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
;VERTICAL PUNKTIR LINE DRAWER
; HL/E - X/Y
; BC - SIZE
; A - COLOR
VRUBBER: PUSH HL
EX AF,AF'
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
EX AF,AF'
LD DE,#4040
ADD HL,DE
LD D,A
EX AF,AF'
LD E,A
VRUB2: LD A,E
OUT (Y_PORT),A
LD (HL),D
DEC BC
LD A,B
OR C
JR Z,VRUB3
INC E
INC E
DEC BC
LD A,B
OR C
JP NZ,VRUB2
VRUB3: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
;HL/DE - X/Y
;BC - WIDTH
;BC'- HEIGHT
XFRAME: PUSH HL
EX AF,AF'
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
LD DE,#4040
ADD HL,DE
OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
XFRM0: LD A,(HL)
CPL
LD (HL),A
INC HL
INC HL
DEC BC
LD A,B
OR C
JR Z,XFRM1
DEC BC
LD A,B
OR C
JR Z,XFRM1
JP XFRM0
XFRM1: POP BC
POP HL
XFRM2: EXX
DEC BC
LD A,B
OR C
JR Z,XFRM3
DEC BC
LD A,B
OR C
JR Z,XFRM3
EXX
EX AF,AF'
INC A
JR Z,XFRM5
INC A
JR Z,XFRM5
OUT (Y_PORT),A
EX AF,AF'
LD D,H
LD E,L
LD A,(HL)
CPL
LD (HL),A
ADD HL,BC
LD A,(HL)
CPL
LD (HL),A
LD H,D
LD L,E
JP XFRM2
XFRM3: EXX
EX AF,AF'
INC A
JR Z,XFRM5
INC A
JR Z,XFRM5
OUT (Y_PORT),A
EX AF,AF'
INC HL
XFRM4: LD A,(HL)
CPL
LD (HL),A
INC HL
INC HL
DEC BC
LD A,B
OR C
JR Z,XFRM5
DEC BC
LD A,B
OR C
JR Z,XFRM5
JP XFRM4
XFRM5: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
;HL/DE - X/Y
; BC - SIZE
;HORIZONTAL LINE DRAWER (BAR)
HZ2LINE: PUSH HL
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
OUT (Y_PORT),A
EX AF,AF'
LD DE,#4040
ADD HL,DE
PUSH HL
PUSH BC
LD D,H
LD E,L
LD A,(SHADW_)
LD (HL),A
INC DE
DEC BC
LDIR
POP BC
POP HL
EX AF,AF'
INC A
HZ202: OUT (Y_PORT),A
LD D,H
LD E,L
LD A,(LSHADW_)
LD (HL),A
INC DE
DEC BC
LDIR
POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
;VERTICAL LINE DRAWER
; HL/E - X/Y
; BC - SIZE
; A - COLOR
VRLINE: PUSH HL
EX AF,AF'
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
EX AF,AF'
LD DE,#4040
ADD HL,DE
LD D,A
EX AF,AF'
LD E,A
VR002: LD A,E
OUT (Y_PORT),A
LD (HL),D
DEC BC
LD A,B
OR C
JR Z,VR003
INC E
JP NZ,VR002
VR003: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
;HL/DE - X/Y
;BC - WIDTH
;BC'- HEIGHT
DFRAME: PUSH HL
PUSH DE
PUSH BC
EXX
PUSH BC
EXX
INC HL
INC DE
LD A,(LSHADW_)
CALL FRAME
POP BC
EXX
POP BC
POP DE
POP HL
LD A,(SHADW_)
JP FRAME
;HL/DE - X/Y
;BC - WIDTH
;BC'- HEIGHT
; A - COLOR
FRAME: PUSH HL
EX AF,AF'
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
LD DE,#4040
ADD HL,DE
OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
LD (HL),A
LD D,H
LD E,L
INC DE
DEC BC
LDIR
POP BC
POP HL
EXX
LD E,A
DEC BC
LD A,B
OR C
JR Z,FRM05
DEC BC
LD A,B
OR C
LD A,E
EXX
JR Z,FRM03
EX AF,AF'
INC A
DEC BC
FRM02: OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
LD (HL),A
ADD HL,BC
LD (HL),A
POP BC
POP HL
EXX
LD E,A
DEC BC
LD A,B
OR C
LD A,E
EXX
JR Z,FRM03
EX AF,AF'
INC A
JP NZ,FRM02
FRM03: EX AF,AF'
INC A
FRM04: OUT (Y_PORT),A
EX AF,AF'
LD (HL),A
LD D,H
LD E,L
INC DE
LDIR
FRM05: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
;HL/DE - X/Y
;BC - WIDTH
;BC'- HEIGHT
; A - COLOR
RECTAN: PUSH HL
EX AF,AF'
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
EX AF,AF'
LD DE,#4040
ADD HL,DE
LD D,A
EX AF,AF'
REC02: OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
REC01: LD (HL),D
INC HL
DEC BC
LD A,B
OR C
JP NZ,REC01
POP BC
POP HL
EXX
DEC BC
LD A,B
OR C
EXX
JR Z,REC03
EX AF,AF'
INC A
JP NZ,REC02
REC03: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
;HL/DE - X/Y
;BC - HEIGHT/WIDTH
;IX - BITMAP
SPR_256: PUSH HL
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
PUSH IX
LD A,E
EX AF,AF'
LD DE,#4040
ADD HL,DE
POP DE
EX DE,HL
EX AF,AF'
SPR02H: OUT (Y_PORT),A
EX AF,AF'
PUSH DE
PUSH BC
LD B,0
LDIR
POP BC
POP DE
DEC B
JR Z,SPR03H
EX AF,AF'
INC A
JP NZ,SPR02H
SPR03H: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
;HL/DE - X/Y
;BC - WIDTH
;BC'- HEIGHT
BPUSH: PUSH HL
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
EX AF,AF'
LD DE,#4040
ADD HL,DE
EX AF,AF'
OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
LD A,(DSHADW_)
LD (HL),A
LD D,H
LD E,L
INC DE
DEC BC
DEC BC
LDIR
LD A,(LSHADW_)
LD (DE),A
POP BC
POP HL
EXX
DEC BC
LD A,B
OR C
JR Z,BPS05
DEC BC
LD A,B
OR C
EXX
JR Z,BPS03
EX AF,AF'
INC A
DEC BC
BPS02: OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
LD A,(DSHADW_)
LD (HL),A
ADD HL,BC
LD A,(LSHADW_)
LD (HL),A
POP BC
POP HL
EXX
DEC BC
LD A,B
OR C
EXX
JR Z,BPS03
EX AF,AF'
INC A
JP NZ,BPS02
BPS03: EX AF,AF'
INC A
BPS04: OUT (Y_PORT),A
EX AF,AF'
LD A,(LSHADW_)
LD (HL),A
LD D,H
LD E,L
INC DE
LDIR
BPS05: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
;HL/DE - X/Y
;BC - WIDTH
;BC'- HEIGHT
BPOP: PUSH HL
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
EX AF,AF'
LD DE,#4040
ADD HL,DE
EX AF,AF'
OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
LD A,(LSHADW_)
LD (HL),A
LD D,H
LD E,L
INC DE
DEC BC
DEC BC
LDIR
LD A,(DSHADW_)
LD (DE),A
POP BC
POP HL
EXX
DEC BC
LD A,B
OR C
JR Z,BPP05
DEC BC
LD A,B
OR C
EXX
JR Z,BPP03
EX AF,AF'
INC A
DEC BC
BPP02: OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
LD A,(LSHADW_)
LD (HL),A
ADD HL,BC
LD A,(DSHADW_)
LD (HL),A
POP BC
POP HL
EXX
DEC BC
LD A,B
OR C
EXX
JR Z,BPP03
EX AF,AF'
INC A
JP NZ,BPP02
BPP03: EX AF,AF'
INC A
BPP04: OUT (Y_PORT),A
EX AF,AF'
LD A,(DSHADW_)
LD (HL),A
LD D,H
LD E,L
INC DE
LDIR
BPP05: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
;HL/DE - X/Y
;BC - WIDTH
;BC'- HEIGHT
PLANE: PUSH HL
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
EX AF,AF'
LD DE,#4040
ADD HL,DE
EX AF,AF'
OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
LD A,(LSHADW_)
LD (HL),A
LD D,H
LD E,L
INC DE
DEC BC
DEC BC
LDIR
LD A,(DSHADW_)
LD (DE),A
POP BC
POP HL
EXX
DEC BC
LD A,B
OR C
JR Z,PLN05
DEC BC
LD A,B
OR C
EXX
JR Z,PLN03
EX AF,AF'
INC A
PLN02: OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
LD A,(LSHADW_)
LD (HL),A
INC HL
LD A,(BODY)
LD (HL),A
LD D,H
LD E,L
INC DE
DEC BC
DEC BC
DEC BC
LDIR
LD A,(DSHADW_)
LD (DE),A
POP BC
POP HL
EXX
DEC BC
LD A,B
OR C
EXX
JR Z,PLN03
EX AF,AF'
INC A
JP NZ,PLN02
PLN03: EX AF,AF'
INC A
PLN04: OUT (Y_PORT),A
EX AF,AF'
LD A,(DSHADW_)
LD (HL),A
LD D,H
LD E,L
INC DE
DEC BC
LDIR
PLN05: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
;HL/DE - X/Y
;BC - WIDTH
;BC'- HEIGHT
PLACE: PUSH HL
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
EX AF,AF'
LD DE,#4040
ADD HL,DE
EX AF,AF'
OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
LD A,(DSHADW_)
LD (HL),A
LD D,H
LD E,L
INC DE
DEC BC
DEC BC
LDIR
LD A,(LSHADW_)
LD (DE),A
POP BC
POP HL
EXX
DEC BC
LD A,B
OR C
JR Z,PLC05
DEC BC
LD A,B
OR C
EXX
JR Z,PLC03
EX AF,AF'
INC A
PLC02: OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
LD A,(DSHADW_)
LD (HL),A
INC HL
LD A,(BODY)
LD (HL),A
LD D,H
LD E,L
INC DE
DEC BC
DEC BC
DEC BC
LDIR
LD A,(LSHADW_)
LD (DE),A
POP BC
POP HL
EXX
DEC BC
LD A,B
OR C
EXX
JR Z,PLC03
EX AF,AF'
INC A
JP NZ,PLC02
PLC03: EX AF,AF'
INC A
PLC04: OUT (Y_PORT),A
EX AF,AF'
LD A,(LSHADW_)
LD (HL),A
LD D,H
LD E,L
INC DE
DEC BC
LDIR
PLC05: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
PCHARB: LD (TEMPX),HL
LD (TEMPY),DE
LD D,XH
LD E,XL
EX DE,HL
PRINTB: LD A,(HL)
PUSH BC
PUSH HL
CALL PRINT
POP HL
POP BC
INC HL
DJNZ PRINTB
RET
CHARS: LD (TEMPX),HL
LD (TEMPY),DE
PUSH IX
POP HL
PRINTZ: LD A,(HL)
INC HL
OR A
RET Z
PUSH HL
CALL PRINT
POP HL
JP PRINTZ
PCHARX: LD (TEMPX),HL
LD (TEMPY),DE
PUSH BC
POP HL
PCHARZ: LD A,(HL)
INC HL
OR A
RET Z
PUSH HL
CALL PRINT
POP HL
JP PCHARZ
BODY: DEFB #00
TEMPX: DEFW 0
TEMPY: DEFW 0
PRINT:
CHAR: LD C,A
LD B,FONTSIZ/256
PUSH HL
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,(BC)
INC B
PUSH BC
LD C,A
LD B,8
EXX
LD HL,(TEMPX)
LD C,A
LD B,0
ADD HL,BC
LD (TEMPX),HL
SBC HL,BC
LD DE,(TEMPY)
LD A,#50
OUT (PAGE1),A
LD A,E
EX AF,AF'
LD DE,#4040
ADD HL,DE
POP BC
LD A,(BODY)
LD D,A
EX AF,AF'
LD E,A
PINT000: LD A,E
OUT (Y_PORT),A
LD A,(BC)
PUSH BC
LD C,A
EXX
LD A,8
SUB C
JP Z,NONMV
LD HL,PINT001
LD DE,5
NXTMV: ADD HL,DE
DEC A
JP NZ,NXTMV
PUSH HL ;JP HL
EXX
LD A,C
RET
NONMV: EXX
LD A,C
PINT001: RLCA
JR NC,PINT002
LD (HL),D
PINT002: INC HL
RLCA
JR NC,PINT012
LD (HL),D
PINT012: INC HL
RLCA
JR NC,PINT022
LD (HL),D
PINT022: INC HL
RLCA
JR NC,PINT032
LD (HL),D
PINT032: INC HL
RLCA
JR NC,PINT042
LD (HL),D
PINT042: INC HL
RLCA
JR NC,PINT052
LD (HL),D
PINT052: INC HL
RLCA
JR NC,PINT062
LD (HL),D
PINT062: INC HL
RLCA
JR NC,PINT072
LD (HL),D
PINT072: INC HL
EXX
LD A,C
EXX
LD B,0
LD C,A
AND A
SBC HL,BC
POP BC
INC B
EXX
DEC B
EXX
JP Z,PINT005
INC E
JP NZ,PINT000
PINT005: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
LIGHT: PUSH HL
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
EX AF,AF'
LD DE,#4040
ADD HL,DE
LD A,(HLIGHP_)
LD D,A
LD A,(WINDOW_)
LD E,A
EX AF,AF'
LGH02: OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
LGH01: LD A,(HL)
CP E
JR Z,LGH04
LD A,(HLIGHI_)
LD (HL),A
JR LGH05
LGH04: LD (HL),D
LGH05: INC HL
DJNZ LGH01
POP BC
POP HL
DEC C
JR Z,LGH03
EX AF,AF'
INC A
JP NZ,LGH02
LGH03: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
DARK: PUSH HL
IN A,(PAGE1)
LD H,A
IN A,(Y_PORT)
LD L,A
EX (SP),HL
LD A,#50
OUT (PAGE1),A
LD A,E
EX AF,AF'
LD DE,#4040
ADD HL,DE
LD A,(WINDOW_)
LD D,A
LD A,(HLIGHP_)
LD E,A
EX AF,AF'
DRK02: OUT (Y_PORT),A
EX AF,AF'
PUSH HL
PUSH BC
DRK01: LD A,(HL)
CP E
JR Z,DRK04
LD A,(WTEXT_)
LD (HL),A
JR DRK05
DRK04: LD (HL),D
DRK05: INC HL
DJNZ DRK01
POP BC
POP HL
DEC C
JR Z,DRK03
EX AF,AF'
INC A
JP NZ,DRK02
DRK03: POP BC
LD A,B
OUT (PAGE1),A
LD A,C
OUT (Y_PORT),A
XOR A
RET
LBAR: LD L,A
LD H,0
ADD HL,HL
LD DE,XTABLE
ADD HL,DE
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LD DE,(MAIN_VY)
ADD HL,DE
EX DE,HL
LD HL,(MAIN_VX)
INC HL
LD BC,(MAIN_W)
DEC BC
DEC BC
LD B,C
LD C,10
JP LIGHT
DBAR: LD L,A
LD H,0
ADD HL,HL
LD DE,XTABLE
ADD HL,DE
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
LD DE,(MAIN_VY)
ADD HL,DE
EX DE,HL
LD HL,(MAIN_VX)
INC HL
LD BC,(MAIN_W)
DEC BC
DEC BC
LD B,C
LD C,10
JP DARK
VERT_A: LD DE,3
LD IX,XTABLE
XOR A
EX AF,AF'
VERT_A1: LD A,(HL)
INC HL
CP M_END
JP Z,VERT_A2
CP M_BAR
CALL Z,ADDBARL
CP M_GRAY
CALL Z,ADDITM
CP M_ITEM
CALL Z,ADDITM
JP VERT_A1
VERT_A2: INC DE
INC DE
EX AF,AF'
LD (MAX_V_P),A
RET
ADDITM: LD (IX+0),E
LD (IX+1),D
INC IX
INC IX
EX DE,HL
LD BC,10
ADD HL,BC
EX DE,HL
XOR A
LD BC,#1000
CPIR
EX AF,AF'
INC A
EX AF,AF'
INC HL
INC HL
RET
ADDBARL: EX DE,HL
LD BC,5
ADD HL,BC
EX DE,HL
RET
HBAR: LD (DESC_H),IX
LD (MAIN_HX),HL
LD (MAIN_HY),DE
CALL MAKE_HT
XOR A
LD (CUR_H_P),A
LD (OPENFLG+1),A
CALL LHBAR
KCH: CALL OPENFLG
; CALL KEY
KCHL: CP #09
JP Z,INCSELH
CP #08
JP Z,DECSELH
CP #0A
JP Z,OPNSELH
CP #0D
JP Z,OPNSELH
RET
OPNSELH: LD A,#01
LD (OPENFLG+1),A
JP KCH
OPENFLG: LD A,#00
OR A
JP Z,KEY
LD A,(CUR_H_P)
LD HL,(DESC_H)
INC A
LD B,A
CALL GET_XX1
DEC HL
LD D,(HL)
DEC HL
LD E,(HL)
LD XH,D
LD XL,E
CALL POPUP
CP #0D
RET NZ
POP BC
RET
GET_XX1: LD A,(HL)
INC HL
CP M_END
RET Z
CP M_BAR
JP Z,GET_XX1
CP M_ITEM
JP Z,GET_XX2
CP M_GRAY
JP NZ,GET_XX1
GET_XX2: LD E,B
LD BC,#1000
XOR A
CPIR
INC HL
INC HL
LD B,E
DJNZ GET_XX1
RET
INCSELH: LD A,(CUR_H_P)
PUSH AF
CALL DHBAR
POP AF
LD HL,MAX_H_P
INC A
CP (HL)
JR NZ,INCSH1
XOR A
INCSH1: LD (CUR_H_P),A
CALL LHBAR
JP KCH
DECSELH: LD A,(CUR_H_P)
PUSH AF
CALL DHBAR
POP AF
OR A
JR NZ,DECSH1
LD A,(MAX_H_P)
DECSH1: DEC A
LD (CUR_H_P),A
CALL LHBAR
JP KCH
LHBAR: LD E,A
LD L,A
LD H,0
LD D,H
ADD HL,HL
ADD HL,DE
LD DE,YTABLE
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD B,(HL)
LD C,10
LD HL,(MAIN_HY)
EX DE,HL
JP LIGHT
DHBAR: LD E,A
LD L,A
LD H,0
LD D,H
ADD HL,HL
ADD HL,DE
LD DE,YTABLE
ADD HL,DE
LD E,(HL)
INC HL
LD D,(HL)
INC HL
LD B,(HL)
LD C,10
LD HL,(MAIN_HY)
EX DE,HL
JP DARK
MAKE_HT: LD DE,(DESC_H)
LD IX,YTABLE
LD HL,(MAIN_HX)
XOR A
EX AF,AF'
MAKE_H1: LD A,(DE)
INC DE
CP M_ITEM
JP NZ,MAKE_H2
LD (IX+0),L
LD (IX+1),H
PUSH HL
CALL LENSTR
POP HL
LD (IX+2),C
ADD HL,BC
INC IX
INC IX
INC IX
EX AF,AF'
INC A
EX AF,AF'
INC DE
INC DE
JP MAKE_H1
MAKE_H2: EX AF,AF'
LD (MAX_H_P),A
RET
POPUP: LD (DESC_V),IX
LD L,(IX+0)
LD H,(IX+1)
LD E,(IX+2)
LD D,(IX+3)
LD C,(IX+4)
LD B,(IX+5)
LD (MAIN_VX),HL
LD (MAIN_VY),DE
LD (MAIN_W),BC
EXX
LD HL,(DESC_V)
LD DE,6
ADD HL,DE
CALL VERT_A
LD C,E
LD B,D
LD (MAIN_L),BC
EXX
CALL PUTW
XOR A
LD (CUR_V_P),A
CALL LBAR
KC: CALL KEY
CP #0A
JP Z,INCSEL
CP #0B
JP Z,DECSEL
CP #0D
JP Z,RUNSEL
SCF
RET
RUNSEL: LD A,(CUR_V_P)
LD HL,(DESC_V)
INC A
LD B,A
CALL GET_XX1
DEC HL
LD D,(HL)
DEC HL
LD E,(HL)
EX DE,HL
LD A,#0D
AND A
RET
INCSEL: LD A,(CUR_V_P)
PUSH AF
CALL DBAR
POP AF
LD HL,MAX_V_P
INC A
CP (HL)
JR NZ,INCSV1
XOR A
INCSV1: LD (CUR_V_P),A
CALL LBAR
JP KC
DECSEL: LD A,(CUR_V_P)
PUSH AF
CALL DBAR
POP AF
OR A
JR NZ,DECSV1
LD A,(MAX_V_P)
DECSV1: DEC A
LD (CUR_V_P),A
CALL LBAR
JP KC
PUTW: LD A,(WINDOW_)
LD (BODY),A
CALL PLANE
LD HL,(MAIN_VY)
LD DE,5
ADD HL,DE
LD (POSS_Y),HL
LD HL,(MAIN_VX)
LD BC,8
ADD HL,BC
LD (POSS_X),HL
LD HL,(DESC_V)
LD DE,6
ADD HL,DE
POPUP1: LD A,(HL)
INC HL
CP M_END
RET Z
CP M_BAR
JP Z,BARR01
CP M_ITEM
EX DE,HL
LD XH,D
LD XL,E
LD HL,(POSS_X)
LD DE,(POSS_Y)
;;;;;;;
LD A,(WTEXT_)
LD (BODY),A
CALL CHARS
EX DE,HL
LD HL,(POSS_Y)
LD BC,10
ADD HL,BC
LD (POSS_Y),HL
EX DE,HL
INC HL
INC HL
JP POPUP1
BARR01: PUSH HL
LD HL,(MAIN_VX)
INC HL
LD DE,(POSS_Y)
LD BC,(MAIN_W)
DEC BC
DEC BC
CALL HZ2LINE
LD HL,(POSS_Y)
LD BC,5
ADD HL,BC
LD (POSS_Y),HL
POP HL
JP POPUP1
CUR_V_P: DEFB 0
MAX_V_P: DEFB 0
CUR_H_P: DEFB 0
MAX_H_P: DEFB 0
MAIN_X: DEFW 0
MAIN_Y: DEFW 0
DESC_V: DEFW 0
DESC_H: DEFW 0
MAIN_HX: DEFW 0
MAIN_HY: DEFW 0
MAIN_VX: DEFW 0
MAIN_VY: DEFW 0
MAIN_W: DEFW 0
MAIN_L: DEFW 0
POSS_X: DEFW 0
POSS_Y: DEFW 0
XTABLE: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
YTABLE: DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DEFW 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
EDITBOX: PUSH IX
LD (EDITX),HL
LD (EDITY),DE
LD (EDITCX),BC
LD A,(IX+1)
LD (POSIT),A
XOR A
LD (SHIFT),A
POP HL
INC HL
INC HL
LD (ETXS),HL
EDIT1: CALL PRINBOX
CALL CURSORH
CALL KEY
CP 14
RET Z
CP 13
JP Z,PRINBOX
CP 11
RET Z
CP 10
RET Z
CP 4
RET Z
CP 5
RET Z
LD HL,EDIT1
PUSH HL
CP 6
JP Z,CAPS
CP 7
JP Z,RUSL
CP 8
JP Z,BACK
CP 9
JP Z,FORW
CP 12
JP Z,DELET
CP #20
RET C
EX AF,AF'
LD A,(IX+1)
CP (IX+0)
CCF
RET C
LD A,(IX+1)
LD E,A
LD D,0
LD HL,(ETXS)
ADD HL,DE
LD A,(POSIT)
LD E,A
LD A,(IX+1)
SUB E
JR Z,ADD_SM
LD B,D
LD C,A
LD D,H
LD E,L
DEC HL
LDDR
EX DE,HL
ADD_SM: EX AF,AF'
LD (HL),A
LD A,(POSIT)
INC A
LD (POSIT),A
INC (IX+1)
LD HL,(ETXE)
INC HL
LD (ETXE),HL
LD HL,SHIFT
SUB (HL)
RET Z
ADDL1: PUSH AF
LD HL,(SH+1)
LD DE,(ETXS)
ADD HL,DE
EX DE,HL
CALL REALXX
LD B,A
POP AF
SUB B
RET Z
LD HL,SHIFT
LD E,A
LD A,(HL)
ADD A,E
LD (HL),A
LD A,(POSIT)
SUB (HL)
JP NZ,ADDL1
RET
BACK: LD A,(POSIT)
OR A
RET Z ;JP Z,BCK
DEC A
LD (POSIT),A
INC A
LD HL,SHIFT
SUB (HL)
RET NZ
LD A,(STEP)
LD E,A
LD A,(HL)
SUB E
LD (HL),A
RET
CAPS: LD A,(CAPSI)
XOR 8
LD (CAPSI),A
RET
RUSL: LD A,(LANG+1)
XOR 1
LD (LANG+1),A
RET
FORW: LD A,(POSIT)
CP (IX+1)
RET Z ; JP Z,FRD
INC A
LD (POSIT),A
LD HL,SHIFT
SUB (HL)
RET Z
ADDL2: PUSH AF
LD HL,(SH+1)
LD DE,(ETXS)
ADD HL,DE
EX DE,HL
CALL REALXX
LD B,A
POP AF
SUB B
RET Z
LD HL,SHIFT
LD E,A
LD A,(HL)
ADD A,E
LD (HL),A
LD A,(POSIT)
SUB (HL)
JP NZ,ADDL2
RET
DELET: LD A,(POSIT)
OR A
RET Z ; JP Z,LINKSTR
LD HL,(ETXS)
LD E,A
LD D,0
ADD HL,DE
LD A,(IX+1)
SUB E
JR Z,SUB_SM
LD B,D
LD C,A
LD D,H
LD E,L
DEC DE
LDIR
SUB_SM: XOR A
DEC HL
LD (HL),A
LD A,(POSIT)
DEC A
LD (POSIT),A
DEC (IX+1)
LD HL,(ETXE)
DEC HL
LD (ETXE),HL
LD A,(SHIFT)
OR A
RET Z
DEC A
LD (SHIFT),A
RET
KEY: RES 5,(IY+1)
EI
KEY1: BIT 5,(IY+1)
JP Z,KEY1
LD A,(23560)
CP #20
RET C
CP 203
JR NZ,KE_1
LD A,125
KE_1: CP 204
JR NZ,KE_2
LD A,123
KE_2: CP 205
JR NZ,KE_3
LD A,92
KE_3: CP 195
JR NZ,KE_4
LD A,124
KE_4: CP 226
JR NZ,KE_6
LD A,126
KE_6: CP 197
JR NZ,KE_7
LD A,93
KE_7: CP 198
JR NZ,KE_8
LD A,91
KE_8:
LANG: LD B,0
INC B
DEC B
CALL NZ,RUSCOR
LD (LAST_K),A
RET
RUSCOR: CP 65
RET C
LD HL,FOR_RUS-65
ADD A,L
LD L,A
JR NC,$+3
INC H
LD B,(HL)
LD A,(23658)
XOR 8
LD A,B
RET Z
CP 154
JR NZ,RUS_1
LD A,234
RET
RUS_1: CP 158
JR NZ,RUS_2
LD A,238
RET
RUS_2: CP 152
JR NZ,RUS_3
LD A,232
RET
RUS_3: CP 157
JR NZ,RUS_4
LD A,237
RET
RUS_4: CP 153
JR NZ,RUS_5
LD A,233
RET
RUS_5: CP 151
RET NZ
LD A,231
RET
FOR_RUS: DEFB 128,129 ;START FROM 65
DEFB 150,132,133,148,131,149,136,137
DEFB 138,139,140,141,142,143,159,144
DEFB 145,146,147,134,130,156,155,135
DEFB 91
DEFB 154,93,94,95,158
DEFB 160,161
DEFB 230,164,165,228,163,229,168,169
DEFB 170,171,172,173,174,175,239,224
DEFB 225,226,227,166,162,236,235,167
DEFB 152,157,153,151
PRINBOX: PUSH IX
LD DE,(ETXS)
PUSH DE
LD HL,(EDITX)
LD DE,(EDITY)
LD BC,(EDITCX)
EXX
LD BC,12
EXX
LD A,(WRKSPC_)
LD (BODY),A
CALL PLACE
LD A,(WTEXT_)
LD (BODY),A
POP HL
SH: LD BC,#0000
ADD HL,BC
LD A,(IX+1)
SUB C
EX DE,HL
LD XH,D
LD XL,E
CALL REALXX
LD B,A
PUSH BC
LD HL,(EDITX)
LD DE,(EDITY)
INC HL
INC HL
INC HL
INC DE
INC DE
INC DE
PUSH IX
CALL PCHARB
POP DE
POP BC
NPRINT: POP IX
EI
RET
SHIFT: EQU SH+1
CURSORH: LD A,(SHIFT)
LD C,A
LD A,(POSIT)
SUB C
LD BC,0
JR Z,HOM1
CALL LENSYM
HOM1: LD HL,(EDITX)
LD DE,(EDITY)
INC HL
INC HL
INC DE
INC DE
ADD HL,BC
LD BC,8
LD A,(WTEXT_)
JP VRLINE
REALXX: PUSH AF
PUSH DE
CALL LENSYM
LD HL,(EDITCX)
DEC HL
DEC HL
DEC HL
AND A
SBC HL,BC
POP DE
JP NC,REALXX2
POP AF
DEC A
JP REALXX
REALXX2: POP AF
RET
STEP: DEFB 1
EDITX: DEFW 0
EDITY: DEFW 0
EDITCX: DEFW 0
POSIT: DEFB #00
ETXS: DEFW 0
ETXE: DEFW 0
; +0 - Size buffer
; +1 - Amount simbols
; -1 - Scroll Window
; DE - ASCIIZ
; BC - LENGHT ASCIIZ IN PIXELS
LENSTR: LD H,FONTSIZ/256
LD BC,0
LENSTR1: LD A,(DE)
INC DE
OR A
RET Z
LD L,A
LD A,(HL)
ADD A,C
JR NC,LENSTR2
INC B
LENSTR2: LD C,A
JP LENSTR1
; DE - ASCII STRING
; A - SIZE STRING IN SIMBOLS
; BC - LENGHT STRING IN PIXELS
LENSYM: LD H,FONTSIZ/256
LD BC,0
LENSYM1: EX AF,AF'
LD A,(DE)
INC DE
LD L,A
LD A,(HL)
ADD A,C
JR NC,LENSYM2
INC B
LENSYM2: LD C,A
EX AF,AF'
DEC A
JP NZ,LENSYM1
RET
SYSCOLR:
SBAR_: DEFB GRAY
BUTTON_: DEFB GRAY
DESKTP_: DEFB GREEN
ACAPT_: DEFB BBLUE
ICAPT_: DEFB GRAY
WINDOW_: DEFB GRAY
LSHADW_: DEFB WHITE
DSHADW_: DEFB BLACK
SHADW_: DEFB DGRAY
WTEXT_: DEFB BLACK
BTEXT_: DEFB BLACK
CTEXT_: DEFB WHITE
GTEXT_: DEFB WHITE
WRKSPC_: DEFB WHITE
HLIGHP_: DEFB BBLUE
HLIGHI_: DEFB WHITE