
;******************************************************************
; вход:	DE - вертикаль, HL - горизонталь,
;	B - цвет точки, A - экран
PIC_FN1:
	AND A
	SCF
	RET NZ

	IN A,(PORT_Y)
	PUSH AF

	IN A,(SLOT3)
	EX AF,AF'
	LD A,SYS_PAGE
	OUT (SLOT3),A

	LD A,(WIN_ID_0.GRAF_Y)
	ADD A,E
	OUT (PORT_Y),A
	LD A,B
	LD BC,(WIN_ID_0.GRAF_X)
	ADD HL,BC
	LD B,A
	LD A,#50
	OUT (SLOT3),A
	LD (HL),A
	EX AF,AF'
	OUT (SLOT3),A

	POP AF
	OUT (PORT_Y),A
	RET

; вход:	DE - вертикаль, HL - горизонталь.
;	IX - длина линии в точках не 0 !!!
; FILL - by A
; ?????
PIC_FN2:
	LD D,A
	IN A,(SLOT1)
	EX AF,AF'

	LD A,B
	ADD A,#50
	OUT (SLOT1),A

	BIT 0,B
	LD BC,#40+#4000
	JR Z,PIC_FN2_NO_2ND
	LD BC,#40+320+#4000
PIC_FN2_NO_2ND:
	ADD HL,BC

	LD A,E
	OUT (PORT_Y),A

	LD A,XH
	AND A
	JR Z,PIC_FN2_NO256
PIC_FN2_256L:
	LD B,64
PIC_FN2_256:
	LD (HL),D
	INC HL
	LD (HL),D
	INC HL
	LD (HL),D
	INC HL
	LD (HL),D
	INC HL
	DJNZ PIC_FN2_256
	DEC A
	JR NZ,PIC_FN2_256L

PIC_FN2_NO256:
	LD B,XL
	AND A
	RR B
	JR NC,PIC_FN2_NO1
	LD (HL),D
	INC HL
	AND A
PIC_FN2_NO1:
	RR B
	JR NC,PIC_FN2_NO2
	LD (HL),D
	INC HL
	LD (HL),D
	INC HL
	AND A
PIC_FN2_NO2:
	XOR A
	CP B
	JR Z,PIC_FN2_NO4
PIC_FN2_4:
	LD (HL),D
	INC HL
	LD (HL),D
	INC HL
	LD (HL),D
	INC HL
	LD (HL),D
	INC HL
	DJNZ PIC_FN2_4
PIC_FN2_NO4:

	EX AF,AF'
	OUT (SLOT1),A
	XOR A
	OUT (PORT_Y),A
	RET

;************************************************************************
; вход:	dE - вертикаль, HL - горизонталь.
;	A',HL' - адрес данных во второй странице !
;	BC' - длина данных
; ВЫВОД ЛИНИИ ТОЧЕК
PIC_FN3:
	IN A,(SLOT3)
	LD C,A
	LD A,SYS_PAGE
	OUT (SLOT3),A
	LD A,C
	LD (SYS_PAGE.COPY_SLOT3),A
	IN A,(SLOT2)
	LD (SYS_PAGE.COPY_SLOT2),A
	IN A,(SLOT1)
	LD (SYS_PAGE.COPY_SLOT1),A

	LD A,B
	ADD A,#50
	OUT (SLOT1),A

	BIT 0,B
	LD BC,#40 + #4000
	JR Z,PIC_FN3_NO_2ND
	LD BC,#40 + 320 + #4000
PIC_FN3_NO_2ND:
	ADD HL,BC

	LD A,E
	OUT (PORT_Y),A

	LD A,H
	EXX
	LD D,A
	EXX
	LD A,L
	EXX
	LD E,A
	EXX

	EX AF,AF'
	OUT (SLOT2),A
	EX AF,AF'
	LD HL,SYS_PAGE.RAM_TABLE
	LD L,A
	LD A,SYS_PAGE
	OUT (SLOT3),A
	LD A,(HL)
	OUT (SLOT3),A
	EXX
	LDIR
	BIT 6,H
	JR Z,PIC_FN3_NO
	RES 6,H
	EX AF,AF'
PIC_FN3_NO:
	EXX

	LD A,SYS_PAGE
	OUT (SLOT3),A
	LD A,(SYS_PAGE.COPY_SLOT1)
	OUT (SLOT1),A
	LD A,(SYS_PAGE.COPY_SLOT2)
	OUT (SLOT2),A
	LD A,(SYS_PAGE.COPY_SLOT3)
	OUT (SLOT3),A

	XOR A
	OUT (PORT_Y),A
	RET

;**************************************************************************
;PIC_FN4:
; вход:	HL - данные палитры RGB, E - начальный цвет
;	D - число цветов, B - PAL-mask, A - page PAL
PIC_SET_PAL:
	PUSH	IX

	EX	AF,AF'
	 IN	A,(PORT_Y)
	 PUSH	AF		; сохранить положение PORT_Y
	 LD	A,E
	 OUT	(PORT_Y),A	; начальный цвет в порт
	 LD	A,D		; сохранить число цветов
	EX	AF,AF'		; вернуть страницу PAL

	BIT	7,H		; проверить адрес данных
	LD	C,SLOT3		; если ниже 8000h
	LD	D,#C3		; то граф.экран на странице 3
	JR	Z,.NO_PAGE1
	LD	D,#43		; иначе
	LD	C,SLOT1		; на странице 1
.NO_PAGE1:
	ADD	A,A
	PUSH	AF

	ADD	A,A
	AND	#1C
	XOR	#E0		; младший байт адреса PAL
	LD	E,A		; DE - адрес в видео-ОЗУ
	PUSH	DE
	POP	IX		; адрес палитры

	LD	D,B		; маска PAL
	EX	AF,AF'		; вернуть число цветов
	LD	B,A		; число цветов

	IN	E,(C)		; сохранить страницу 3
	LD	A,#50		; страница графического RAM
	OUT	(C),A

	POP	AF
	JR	C,PIC_GET_PAL
	; цикл установки цветов палитры
.loopPal:
	LD	A,(HL)	; B
	AND	D
	LD	(IX+2),A
	INC	HL

	LD	A,(HL)	; G
	AND	D
	LD	(IX+1),A
	INC	HL

	LD	A,(HL)	; R
	AND	D
	LD	(IX+0),A
	INC	HL

	LD	A,(HL)	; Y
	AND	D
	LD	(IX+3),A
	INC	HL

	IN	A,(PORT_Y)
	INC	A
	OUT	(PORT_Y),A
	DJNZ	.loopPal	; выполнять, пока не 0

.exit:	OUT (C),E	; восстановить страницу 3
	POP AF
	OUT (PORT_Y),A	; восстановить Y_PORT
	POP IX
	AND A
	RET

PIC_GET_PAL:
	; цикл чтения цветов палитры
.loopPal:
	LD A,(IX+2)
	LD (HL),A	; B
	INC HL

	LD A,(IX+1)
	LD (HL),A	; G
	INC HL

	LD A,(IX+0)
	LD (HL),A	; R
	INC HL

	LD A,(IX+3)
	LD (HL),A	; Y
	INC HL

	IN A,(PORT_Y)
	INC A
	OUT (PORT_Y),A
	DJNZ .loopPal	; выполнять, пока не 0

	JR	PIC_SET_PAL.exit

;********************************************************************
PIC_FN5:	; УСТАНОВКА СТРАНИЦЫ MODE
	LD A,E
	AND 1
	OUT (RGMOD),A
	RET
;*******************************************************************
; Установка внутренней палитры
; A - page_pal, E - номер палитры, B - тип палитры
SET_PAL_INIT:
	LD D,A
	DEC B
	JP Z,SET_GRAPH_PALETTE
	DEC B
	JP Z,SET_TXT_PALETTE.ZX
	DEC B
	JP Z,SET_TXT_PALETTE.IBM

;	LD IX,PAL_DAT1
;	JR Z,PIC_FN6_L1
;	DEC B
;	LD IX,PAL_DAT
;	JR Z,PIC_FN6_L1

	SCF
	RET

;PIC_FN6_L1:
;	AND 3
;	ADD A,A
;	ADD A,A
;	ADD A,#E0
;	LD L,A
;	LD H,#43
;	IN A,(SLOT1)
;	PUSH AF
;
;	LD A,#50
;	OUT (SLOT1),A
;	XOR A
;	OUT (PORT_Y),A
;	EX AF,AF'
;	call PAL_LOOP_M
;
;	POP AF
;	OUT (SLOT1),A
;	XOR A
;	OUT (PORT_Y),A
;
;	RET

;******************************************************************
; Рисование линии.
;	dЕ - вертикаль, HL - горизонталь
;	H' - высота, C'/DE',B' - add_parameters
;	A - color
PIC_FN7:
	LD D,A
	IN A,(SLOT1)
	PUSH AF

	LD A,B
	ADD A,#50
	OUT (SLOT1),A

	BIT 0,B
	LD BC,#40+#4000
	JR Z,.no_2nd
	LD BC,#40+320+#4000
.no_2nd:
	ADD HL,BC
	LD A,E

.loop:	OUT (PORT_Y),A	; страница видео-ОЗУ
	LD (HL),D

	EXX
	 EX AF,AF'

	 DEC H
	 JR Z,.exit

	 LD A,C		; NEXT HORIZONTAL
	 ADD A,B
	 LD C,A
	 LD A,E
	EXX

	ADC A,L
	LD L,A

	EXX
	 LD A,D
	EXX

	ADC A,H
	LD H,A
	INC E		; NEXT VERTICAL
	EX AF,AF'
	INC A
	JR .loop

.exit:	EXX
	POP AF
	OUT (SLOT1),A
	XOR A
	OUT (PORT_Y),A
	RET

;******************************************************************
; Рисование линии.
;       dЕ - вертикаль, HL - горизонталь
;	H' - высота, C'/DE',B' - add_parameters
;	(IX) - colors
PIC_FN8:
	IN A,(SLOT1)
	PUSH AF

	LD A,B
	ADD A,#50
	OUT (SLOT1),A

	BIT 0,B
	LD BC,#40+#4000
	JR Z,.no_2nd
	LD BC,#40+320+#4000
.no_2nd:
	ADD HL,BC
	LD A,E

.loop:	OUT (PORT_Y),A	; страница видео-ОЗУ
	LD D,(IX)
	INC IX
	LD (HL),D

	EXX
	 EX AF,AF'

	 DEC H
	 JR Z,.exit

	 LD A,C		; NEXT HORIZONTAL
	 ADD A,B
	 LD C,A
	 LD A,E
	EXX

	ADC A,L
	LD L,A

	EXX
	 LD A,D
	EXX
        
	ADC A,H
	LD H,A

	INC E		; NEXT VERTICAL

	EX AF,AF'
	INC A
	JR .loop

.exit:	EXX
	POP AF
	OUT (SLOT1),A
	XOR A
	OUT (PORT_Y),A
	RET

;**************************************************
;		Вывод спрайта на экран
; HL - горизоталь, dE - вертикаль
; A',HL' - адрес данных
PIC_FN9:
	
;*********************************
; HL,E - координаты D - color
; B - Magnify
PIC_FN10:
PIC_FN11:
PIC_FN12:
PIC_FN13:
PIC_FN14:
PIC_FN15:
	SCF
	RET
;************************************


;************************************
; SYCLES  EQU 0
; ;START   EQU 1
; ST1     EQU 2
; DPAL1   EQU 3
; ST2     EQU 4
; DPAL2   EQU 5

; 	MACRO NEXT_LIN_H
; 		EX AF,AF'
; 		INC A
; 		OUT (PORT_Y),A
; 		EX AF,AF'
; 	ENDM

; 	MACRO NEXT_LIN_HP
; 		EX AF,AF'
; 		INC A
; 		OUT (PORT_Y),A
; 		JR NZ,.MD_NO_INC_H
; 		INC L
; .MD_NO_INC_H:
; 		EX AF,AF'
; 	ENDM

;****************************************
;       Загрузка режима экрана.
;****************************************

;	CALL SINC_DEF
;	CALL SET_TXT_PALETTE.ZX
;	RET

;****************************************

;!TODO тут функция 
CL0     EQU 200
CL1     EQU 240


SET_TXT_PALETTE:
.IBM:	LD DE,#8000
	JR .TXT
	;
.ZX:	LD DE,0
.TXT:	PUSH IX
	IN A,(PORT_Y)
	PUSH AF
	IN A,(SLOT3)
	EX AF,AF'
	LD A,#50
	OUT (SLOT3),A
	;
	LD IX,#C3F0                                                     ; !HARDCODE адрес палитры?
.generate_loop:
	CALL GENERATE_PAL1
	LD A,E
	OUT (PORT_Y),A
	LD (IX),L	; R
	LD (IX+1),B	; G
	LD (IX+2),C	; B
	LD (IX+3),H	; i ?
	INC E
	JR NZ,.generate_loop
	;
	LD BC,4
	ADD IX,BC
	INC D
	LD A,D
	AND 3
	JR NZ,.generate_loop
	;
	EX AF,AF'
	OUT (SLOT3),A
	POP AF
	OUT (PORT_Y),A
	POP IX
	RET

;	генерация спектрумовской палитры.
; Вход:	 E - атрибут, D - номер палитры
; ВЫХОД: L - red, B - green, C - blue, H - intensity
GENERATE_PAL1:	XOR	A
		LD	C,A
		LD	B,A
		LD	L,A
		BIT	7,D
		JR	NZ,GENERATE_IBM
		BIT	1,D
		JR	NZ,.FLH
.NOF:		BIT	0,D
		JR	Z,.PAPER
.INK:		LD	A,CL0
		BIT	6,E
		JR	Z,.NOI1
		LD	A,CL1
.NOI1:		BIT	0,E		; BLUE
		JR	Z,.NO1
		LD	C,A
.NO1:		BIT	1,E		; RED
		JR	Z,.PP_NO2
		LD	L,A
.PP_NO2:	BIT	2,E		; GREEN
		JR	Z,.PP_NO3
		LD	B,A
.PP_NO3:	JR	.PP_NO6
;
.FLH:		BIT	7,E
		JR	Z,.NOF
		BIT	0,D
		JR	Z,.INK
.PAPER:		LD	A,CL0
		BIT	6,E
		JR	Z,.NOI2
		LD	A,CL1
.NOI2:		BIT	3,E		; BLUE
		JR	Z,.PP_NO4
		LD	C,A
.PP_NO4:	BIT	4,E		; RED
		JR	Z,.PP_NO5
		LD	L,A
.PP_NO5:	BIT	5,E		; GREEN
		JR	Z,.PP_NO6
		LD	B,A
.PP_NO6:	LD	A,C
		AND	A
		RRA
		ADD	A,L
		RRA
		ADD	A,B
		RRA
		LD	H,A		; B/W mode
		RET
;****************************************

GENERATE_IBM:
	BIT 7,E
	JR Z,.NO_FLH
	BIT 1,D
	JR Z,.PAPER
.NO_FLH:
	BIT 0,D
	JR Z,.PAPER
.INK:
.NO_INTENS:
	LD A,#A8
.INTENS:
	BIT 0,E		; BLUE
	JR Z,.PPI_NO4
	LD C,A
.PPI_NO4:
	BIT 2,E		; RED
	JR Z,.PPI_NO5
	LD L,A
.PPI_NO5:
	BIT 1,E		; GREEN
	JR Z,.PPI_NO6
	LD B,A
.PPI_NO6:
	LD A,E
	AND #0F
	CP 6
	JR NZ,.no_correct
	LD B,#54
.no_correct:
	BIT 3,E
	JR Z,GENERATE_PAL1.PP_NO6

	LD A,#54
	ADD A,C
	LD C,A
	LD A,#54
	ADD A,B
	LD B,A
	LD A,#54
	ADD A,L
	LD L,A
	JR GENERATE_PAL1.PP_NO6
.PAPER:
	LD A,#A8
	BIT 4,E		; BLUE
	JR Z,.PPI_NO4X
	LD C,A
.PPI_NO4X:
	BIT 6,E		; RED
	JR Z,.PPI_NO5X
	LD L,A
.PPI_NO5X:
	BIT 5,E		; GREEN
	JR Z,.PPI_NO6X
	LD B,A
.PPI_NO6X:
	LD A,E
	AND #70
	CP #60
	JR NZ,GENERATE_PAL1.PP_NO6
	LD B,#54
	JR GENERATE_PAL1.PP_NO6
;****************************************

;****************************************
;****************************************

; D - номер графической палитры
SET_GRAPH_PALETTE:
	PUSH IX
	IN A,(PORT_Y)
	PUSH AF

	IN A,(SLOT3)
	EX AF,AF'
	LD A,#50
	OUT (SLOT3),A


	LD IX,#C3E0
	LD A,D
	AND 3
	ADD A,A
	ADD A,A
	LD E,A
	LD D,0
	ADD IX,DE

	LD E,0

	XOR A
	LD B,A
	LD C,A
	LD L,A
	LD H,A

SET_PAL_GR1:
	LD A,E
	OUT (PORT_Y),A

	LD (IX),L
	LD (IX+1),B
	LD (IX+2),C
	LD (IX+3),H

	CALL GENERATE_PAL3

	INC E
	LD A,E
	CP 40
	JR NZ,SET_PAL_GR1

	XOR A
	LD B,A
	LD C,A
	LD L,A
	LD H,A

SET_PAL_GR2:
	LD A,E
	OUT (PORT_Y),A

	LD (IX),L
	LD (IX+1),B
	LD (IX+2),C
	LD (IX+3),H

	CALL GENERATE_PAL2

	INC E
	JR NZ,SET_PAL_GR2

	EX AF,AF'
	OUT (SLOT3),A
	POP AF
	OUT (PORT_Y),A
	POP IX
	RET
;
;;*********************************
;

GENERATE_PAL3:		; gray-scale
	LD A,B
	ADD A,6
	LD B,A
	LD C,A
	LD L,A

	LD A,C
	AND A
	RRA
	ADD A,L
	RRA
	ADD A,B
	RRA
	LD H,A

	RET

GENERATE_PAL2:		; C - BLUE; L - RED; B - GREEN; H - INTENSITY
	LD A,C
	ADD A,50
	LD C,A
	JR NC,GEN_PAL2_L1
	LD C,0
	LD A,L
	ADD A,50
	LD L,A
	JR NC,GEN_PAL2_L1
	LD L,0
	LD A,B
	ADD A,50
	LD B,A
	JR NC,GEN_PAL2_L1
	LD B,0

GEN_PAL2_L1:
	LD A,C
	AND A
	RR A
	ADD A,L
	RR A
	ADD A,B
	RR A
	LD H,A

	RET
;
;************************************

FN_SYNC:	BIT	7,A
		JR	Z,.old_mode
		;
		LD	H,A
		AND	#60						; check reserved bits
		JR	NZ,.error
		;
		BIT	2,H						; Set V-Sinc?
		JR	NZ,.set_v_sinc
		;
		BIT	4,H						; Set Waits?
		JR	Z,.error					; Error - no parameters
		;
.set_waits:	LD	A,H
		AND	8						; check waits. Z - no waits, NZ - waits
		LD	H,Port_All_Mode.DEFAULT
		JR	Z,.no_change
		LD	H,Port_All_Mode.DEFAULT-Port_All_Mode.MEM_WAITS_OFF
.no_change:	LD	BC,(Port_All_Mode)
		IN	A,(C)
		AND	H
		OUT	(C),A
		RET
		;
.set_v_sinc:	LD	A,H
		AND	3
		JR	Z,.SetDefLines
		DEC	A
		JR	Z,.SetCmosLines
		DEC	A
		JR	Z,.Set320Lines
		;JR	.Set312Lines
.set312lines:	LD	A,Port_VSYNC.SET_312L
		OUT	(Port_VSYNC),A
		;
		LD	C,SLOT3
		IN	B,(C)
		LD	A,SYS_PAGE
		OUT	(C),A
		LD	A,(SYS_PAGE.VSyncAndWaits)
		AND	2
		LD	(SYS_PAGE.VSyncAndWaits),A
		OUT	(C),B
		;
.end_set_v_sinc:
		BIT	4,H
		RET	Z
		JR	.set_waits
		;
.Set320Lines:	LD	A,Port_VSYNC.SET_320L
		OUT	(Port_VSYNC),A
		;
		LD	C,SLOT3
		IN	B,(C)
		LD	A,SYS_PAGE
		OUT	(C),A
		LD	A,(SYS_PAGE.VSyncAndWaits)
		OR	1
		LD	(SYS_PAGE.VSyncAndWaits),A
		OUT	(C),B
		JR	.end_set_v_sinc
		;
.SetCmosLines:	LD	D,CMOS_CELL.ScreenSET
		CALL	CMOS_RD
		;
		AND	high CMOS_CELL.ScreenSET.Mask.Sinc		; в регистре A значение ScreenSET
		JR	Z,.SetDefLines
		;
		BIT	6,A
		JR	Z,.set312lines
		JR	.Set320Lines
		;
.old_mode:	AND	A
		JR	Z,.INT_DEF
		DEC	A
		JR	Z,.INT_SCORP
		DEC	A
		JR	Z,.INT_PENT
		DEC	A
		JR	Z,.INT_ORIG
		DEC	A
		JR	Z,.INT_CMOS_SINC
		; [x] кастомный экран по таблице пользователя
		DEC	A
		JR	Z,.PROG_SCR
		;
.error:		SCF
		RET
		;
.SetDefLines:	LD	C,SLOT3
		IN	B,(C)
		LD	A,SYS_PAGE
		OUT	(C),A
		LD	A,(SYS_PAGE.VSyncAndWaits)
		OUT	(C),B
		AND	1
		JR	Z,.set312lines
		JR	.Set320Lines
		;
.INT_DEF:	LD	C,SLOT3
		IN	B,(C)
		LD	A,SYS_PAGE
		OUT	(C),A
		LD	DE,(SYS_PAGE.SCREEN_TABLE)
		OUT	(C),B
		;
		CALL	Test_SCREEN_TABLE
		JR	NZ,.INT_CMOS_SINC
		JP	(IX)
		;
.INT_CMOS_SINC:	LD	C,SLOT3
		IN	B,(C)
		LD	A,SYS_PAGE
		OUT	(C),A
		LD	DE,(SYS_PAGE.SCREEN_TABLE)
		OUT	(C),B
		;
		LD	D,CMOS_CELL.ScreenSET
		CALL	CMOS_RD
		;
		AND	high CMOS_CELL.ScreenSET.Mask.Int		; в регистре A значение ScreenSET
		JR	NZ,.skiptest
		;
		CALL	Test_SCREEN_TABLE
		JP	(IX)						; default int (non CMOS) 
		;
.skiptest:	CP	#10
		JR	Z,.INT_SCORP					; scorpion int	
		;
		CP	#20
		JR	Z,.INT_PENT					; pentagon int		
		;
		;JR	.INT_ORIG					; original int
.INT_ORIG:	LD	IX,SCREEN_TABLES.ORIGINAL
		JR	.PROG_SCR
		;
.INT_SCORP:	LD	IX,SCREEN_TABLES.SCORPION
		JR	.PROG_SCR
		;
.INT_PENT:	LD	IX,SCREEN_TABLES.PENTAGON
		;JR	.PROG_SCR
.PROG_SCR:	IN	A,(SLOT3)
		EX	AF,AF'
		LD	A,SYS_PAGE
		OUT	(SLOT3),A
		EX	AF,AF'
		LD	(SYS_PAGE.COPY_SLOT3),A
		IN	A,(PORT_Y)
		LD	(SYS_PAGE.COPY_RGADR),A
		;
		LD	(SYS_PAGE.SCREEN_TABLE),IX
		XOR	A
;----[START]-----------------------[? 1]
.loop_1:	OUT	(PORT_Y),A
		EX	AF,AF'
		LD	A,#50
		OUT	(SLOT3),A
		LD	HL,#C300
;----[START]------------------[v 2]-----
.loop_2:	LD	C,(IX)
;----[START]-------------[v 3]----------
.loop_3:	; взять адрес данных для записи в служебную область экрана
		LD	E,(IX+1)					; take adress of line X
		LD	D,(IX+2)
;----[START]--------[v 4]---------------
.loop_4:	LD	A,(DE)						; take counter in table 1, line X, column Y
		INC	DE
		AND	A
		JR	Z,.loop_4_exit					; exit if zero-counter
		LD	B,A
		LD	A,(DE)
		INC	DE
;----[START]---[v 5]--------------------
.loop_5:	LD	(HL),A
		INC	L
		LD	(HL),0
		INC	L
		LD	(HL),0
		;
		EX	AF,AF'
		INC	A
		OUT	(PORT_Y),A
		EX	AF,AF'
		;
		LD	(HL),0
		DEC	L
		LD	(HL),0
		DEC	L
		LD	(HL),A
		;
		EX	AF,AF'
		INC	A
		OUT	(PORT_Y),A
		EX	AF,AF'
		;
		DJNZ	.loop_5
;--------------[^ 5]--------------------
		JR	.loop_4
;-------------------[^ 4]---------------
.loop_4_exit:	INC	HL						; next line
		INC	HL
		INC	HL
		INC	HL
		IN	A,(PORT_Y)
		AND	#80
		OUT	(PORT_Y),A
		DEC	C
		JR	NZ,.loop_3
;------------------------[^ 3]----------
		INC	IX						; next counter
		INC	IX
		INC	IX
		LD	A,(IX)
		AND	A
		JR	NZ,.loop_2
;-----------------------------[^ 2]-----
		LD	A,SYS_PAGE
		OUT	(SLOT3),A
		LD	IX,(SYS_PAGE.SCREEN_TABLE)
		;
		EX	AF,AF'
		ADD	A,#80
		JR	NC,.loop_1
;----------------------------------[^ 1]
		; Exit
		LD	A,(SYS_PAGE.COPY_RGADR)
		OUT	(PORT_Y),A
		LD	A,(SYS_PAGE.COPY_SLOT3)
		OUT	(SLOT3),A
.exit:		OR	A
		RET
		;
	;DE - содержимое SYS_PAGE.SCREEN_TABLE
Test_SCREEN_TABLE:
		LD	HL,SCREEN_TABLES.SCORPION
		AND	A
		SBC	HL,DE
		LD	IX,FN_SYNC.INT_SCORP
		RET	Z
		;
		LD	HL,SCREEN_TABLES.ORIGINAL
		AND	A
		SBC	HL,DE
		LD	IX,FN_SYNC.INT_ORIG
		RET	Z
		;
		LD	HL,SCREEN_TABLES.PENTAGON
		AND	A
		SBC	HL,DE
		LD	IX,FN_SYNC.INT_PENT
		RET	Z
		AND	A
		RET
;--- Screen data table 1: counter1, data1 .. counterX, dataX
SCREEN_TABLES:
;        | число  | значения |
;        | строк  |    в     |
;        |   /2   |  строках |
.SCR:   DB   41   ,   #F8
        DB   3    ,   #FC
        DB   4    ,   #FC
        DB   7    ,   #FC
        DB   9    ,   #F8
        DB   0

;.SCR:   DB	41,#F8,  3,#FC,  4,#FC,  7,#FC,  9,#F8,  0   
.INT:	 DB	40,#FC,	 2,#FD,	 6,#FC,	 7,#FC,	 9,#FC,	 0
.INT_SC: DB	41,#F8,	 1,#FD,	 6,#FC,	 7,#FC,	 9,#F8,	 0
.BLN:	 DB	41,#FC,	 3,#FC,	 4,#FC,	 7,#FC,	 9,#FC,	 0
.SNC:	 DB	41,#FC,	 3,#FC,	 4,#FC,	 7,#FC,	 9,#FC,	 0
.RES:	 DB	41,#F8,	 3,#FE,	 4,#FE,	 7,#FE,	 9,#F8,	 0
;---------------------------------------

;--- Screen data tables 2: counter1, data address1 .. counterX, data addressX
;
;                | кол-во | значения |
;                | строк  |     в    |
;                |        |  строке  |
.PENTAGON:      DB   33   :  DW .SCR
                DB   1    :  DW .INT      ;	DW .BLN
                DB   3    :  DW .SNC
                DB   1    :  DW .BLN
                DB   1    :  DW .SCR
                DB   1    :  DW .RES
                DB   0    ; end
.SCORPION:      DB   31   :  DW .SCR
                DB   1    :  DW .INT_SC
                DB   1    :  DW .SCR
                DB   1    :  DW .SNC
                DB   3    :  DW .SNC
                DB   1    :  DW .BLN
                DB   2    :  DW .RES
                DB   0    ; end
.ORIGINAL:      DB   33   :  DW .SCR
                DB   1    :  DW .SNC
                DB   1    :  DW .INT
                DB   2    :  DW .SNC
                DB   1    :  DW .BLN
                DB   1    :  DW .SCR
                DB   1    :  DW .RES
                DB   0    ; end
;---------------------------------------

;************************************
;
;       Экранные таблицы
;
;текстовое окно 80x32
LP_SCR_80:
	DB 40,32,0,0,27,0,0,0
	DB  0, 0,0,0, 0,0,0,0

;текстовое окно 40x32
LP_SCR_40:
	DB 40,32,0,0,123,0,0,0
	DB  0, 0,0,0,  0,0,0,0

;спектрумовское окно 32x24
LP_SCR_32:
	DB 32,24,4,4,48,1,0,0
	DB  0, 0,0,0, 0,0,0,0

;текстовое окно 64x24
LP_SCR_64:
	DB 32,24,4,4,155,0,0,0
	DB  0, 0,0,0,  0,0,0,0

;графическое окно 0
PIC_320X256_1:
	DB 40,32,0,0,32,0,8,0
	DB  0, 0,0,0, 0,0,0,0

;графическое окно 1
PIC_320X256_2:
	DB 40,32,0,0,96,0,48,0
	DB  0, 0,0,0, 0,0, 0,0

;************************************
;


