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

	IN A,(RGADR)
	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 (RGADR),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 (RGADR),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 (RGADR),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 (RGADR),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,40H+04000H
	JR Z,PIC_FN3_NO_2ND
	LD BC,40H+320+04000H
PIC_FN3_NO_2ND:
	ADD HL,BC

	LD A,E
	OUT (RGADR),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.RAMD_FAT
	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 (RGADR),A
	RET

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

	EX	AF,AF'
	 IN	A,(RGADR)
	 PUSH	AF		; сохранить положение RGADR
	 LD	A,E
	 OUT	(RGADR),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,(RGADR)
	INC	A
	OUT	(RGADR),A
	DJNZ	.loopPal	; выполнять, пока не 0

.exit:	OUT (C),E	; восстановить страницу 3
	POP AF
	OUT (RGADR),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,(RGADR)
	INC A
	OUT (RGADR),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_PAL_GRAF
	DEC B
	JP Z,SET_PAL_ZX
	DEC B
	JP Z,SET_PAL_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 (RGADR),A
;	EX AF,AF'
;	call PAL_LOOP_M
;
;	POP AF
;	OUT (SLOT1),A
;	XOR A
;	OUT (RGADR),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 (RGADR),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 (RGADR),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 (RGADR),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 (RGADR),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

;************************************
;
;       Экранные таблицы
;
;текстовое окно 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

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


