
def_pal_mask		EQU #FF
PIC_SET_PAL_FF		EQU def_pal_mask*256+BIOS.PIC_SET_PAL
ScreenPOS.SUBNAME.POS	EQU 37

 IF NEW_FEATURE



 ENDIF

;;
ScreenPOS:
.SUBNAME:
        CALL    LP_GET_PLACE
	LD	E,.SUBNAME.POS		;!HARDCODE autodetected hdd/cdrom info
        JP      LP_SET_PLACE

.CRLF:	CALL	LP_GET_PLACE
	INC	D
	LD	E,#00
	JP	LP_SET_PLACE
;;

;!TODO переделать, а то криво как-то
DWPRINT:
	LD      A,(HL)
	CP      ' '
	JR      NZ,PRINTDW
	INC     HL
	LD      A,(HL)
	DEC     HL
	CP      ' '
	JR      NZ,PRINTDW
	INC     HL
	INC     HL
	DJNZ    DWPRINT
	RET 
;!TODO переделать, а то криво как-то
PRINTDW:
	PUSH	BC
	LD	E,(HL)
	INC	HL
	LD	A,(HL)
	INC	HL
	CALL	PRINT_CHAR
	LD	A,E
	CALL	PRINT_CHAR
	POP	BC
	DJNZ	PRINTDW
	RET 

PRINTA: LD	E,A
        JP	LP_PRINT_ATR

PRINT_CHAR:
	LD	B,1
	JP	LP_PRINT_SYM
;  

TPRINTZ: CALL	LP_SET_PLACE
PRINTZ:	LD	B,0
	LD	D,B
	JP	LP_PRINT_LINE6

HPRINTZ: LD	B,0
	LD	D,B
	LD	E,COLORS.CGA.INC.WHITE
        JP	LP_PRINT_LINE5

CPRINTZ: LD	B,0
	LD	D,B
	LD	E,A 
	JP	LP_PRINT_LINE5

;HL - NUMBER
IZPRINT: LD	D,1
	JR	IPRIN
IPRINT:
	LD	D,0
IPRIN:  LD	BC,10000
	CALL	PRINTDG
	LD	BC,1000
	CALL	PRINTDG
	LD	BC,100
	CALL	PRINTDG
	LD	BC,10
	CALL	PRINTDG
	LD	A,L
	ADD	A,#30
	JP	PRINT_CHAR

PRINTDG:
	LD	A,#2F
PDG1:   INC	A
	SBC	HL,BC
	JR	NC,PDG1
	ADD	HL,BC
	BIT	0,D
	JR	NZ,PDG2
	CP	#30
	RET	Z
	SET	0,D
PDG2:   PUSH	BC
	CALL	PRINT_CHAR
	POP	BC
	RET 

; D - Y
; E - X
; H - CY
TLINEV:
	;CALL	ScreenPOS.LOCAT
        CALL    LP_SET_PLACE
	LD	A,(ElementsBuffer.UpCenter)
	CALL	PRSYM
	DEC	H
	DEC	H

.loop:	INC	D
	;CALL	ScreenPOS.LOCAT
        CALL    LP_SET_PLACE
	LD	A,(ElementsBuffer.VerticalLine)
	CALL	PRSYM
	DEC	H
	JR	NZ,.loop

	INC	D
	;CALL	ScreenPOS.LOCAT
        CALL    LP_SET_PLACE
	LD	A,(ElementsBuffer.DownCenter)
	JP	PRSYM

; D - Y
; E - X
; L - CX
TLINEH:
	;CALL	ScreenPOS.LOCAT
        CALL    LP_SET_PLACE
	LD	A,(ElementsBuffer.LeftCenter)
	CALL	PRSYM
	DEC	L
	DEC	L
	LD	A,(ElementsBuffer.HorizontalLine)
	LD	B,L

        ;CALL	PRSYMB
        CALL    LP_PRINT_SYM


	LD	A,(ElementsBuffer.RightCenter)
	JP	PRSYM

; D - Y
; E - X
; B - CY
; C - CX
PBORDER:       	PUSH	BC
		LD	A,C
		DEC	A
		LD	(.BSHI),A
		DEC	A
		LD	(.BHOR),A
		LD	(.BHOR2),A
        	CALL    LP_SET_PLACE
		LD	A,(ElementsBuffer.UpLeft)
		LD	H,E
		CALL	PRSYM
		LD	A,(ElementsBuffer.HorizontalLine)
.BHOR+1:	LD	B,1
        	CALL    LP_PRINT_SYM

		LD	A,(ElementsBuffer.UpRight)
		CALL	PRSYM
		POP	BC
		DEC	B
		DEC	B
		INC	D
		LD	E,H

.loop:		PUSH	BC
        	CALL    LP_SET_PLACE
		LD	A,(ElementsBuffer.VerticalLine)
		CALL	PRSYM
		LD	A,H
.BSHI+1:	ADD	A,#00
		LD	E,A
        	CALL    LP_SET_PLACE
		LD	A,(ElementsBuffer.VerticalLine)
		CALL	PRSYM
		POP	BC
		LD	E,H
		INC	D
		DJNZ	.loop

        	CALL    LP_SET_PLACE
		LD	A,(ElementsBuffer.DownLeft)
		CALL	PRSYM
		LD	A,(ElementsBuffer.HorizontalLine)
.BHOR2+1:	LD	B,1
        	CALL    LP_PRINT_SYM
		LD	A,(ElementsBuffer.DownRight)
		CALL	PRSYM
		RET 

PRSYM:	LD      B,1
        JP      LP_PRINT_SYM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
////////////////////	LOGO	\\\\\\\\\\\\\\\\\\\\
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LOGOTYPE:	CALL	SHOW_LOGO
		LD	BC,CMOS_CELL.BootUpParams.Mask.StartDelay
		CALL	G_VALUE
		OR	A
		JR	Z,.EASYDLY	; Delay average
		DEC	A
		JR	Z,.SKIPDLY	; Delay disabled
	; Delay enabled
		LD	B,LOGO_DELAY_NORM
.loop		EI 
		push    bc
		HALT 
		CALL    go_setup
		pop     bc
		DJNZ	.loop
	; Delay average
.SKIPDLY:	LD	B,LOGO_DELAY_MAX
.MMA:   	PUSH	BC
		EI 
		HALT 
		DI 
		CALL	FADE
		POP	BC
		DJNZ	.MMA
	;	;
.ERASE_LOGO:	LD	IX,win_descriptor.tab80x32
		LD	HL,#0000
		LD	E,1
		;
		EI 
		HALT 
		DI 
        	CALL    WIN_OPEN
		;
		LD	DE,0
		LD	HL,#0920	;!HARDCODE LOGOTYPE SIZE
        	LD      B,7
        	JP      LP_CLS_WIN
	; Delay disabled
.EASYDLY:	LD	B,LOGO_DELAY_MIN
.loop2:		EI 
		HALT 
		DJNZ	.loop2
		DI 
		JR	.ERASE_LOGO
;	;	;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

SHOW_LOGO:	LD	IX,win_descriptor.tab320x256
		LD	HL,#0000
		LD	E,1
		CALL    WIN_OPEN

	SAFE_PORTY

		DI
		 LD	A,1
        	 OUT	(SYS_PORT.ON),A  
		 OUT	(ROM.SLOT0),A

		 LD	HL,MAIN_LOGO.Pallete
		 LD	DE,memBUFFER.Shared
		 LD	BC,MAIN_LOGO.Pallete.length
		 LDIR

		 XOR	A
		 OUT	(ROM.SLOT0),A	
        	 OUT	(SYS_PORT.ON),A  
		EI	

		LD	HL,memBUFFER.Shared
		; A = 0
        	LD	D,A			; SET DESKTOP PALETTE & CURSOR COLORS
        	LD	E,A
        	LD	B,def_pal_mask
        	CALL	PIC_SET_PAL

	SAFE_PORTY

		DI
		 LD     A,1
		 OUT    (SYS_PORT.ON),A  
		 ;LD     A,1
		 OUT    (ROM.SLOT0),A

		 LD     HL,MAIN_LOGO.Raster	; начало картинки в банке ПЗУ
		; CALL   DECODE
		 CALL   LOGO_TO_SCREEN
        	 ;										
        	 ;--------------[Пасхалка]--------------[]
        	 IF Pashalki
        	        _PASHALKI_CODE 
        	 ENDIF
        	 ;--------------------------------------[]
        	 ;
		 XOR    A
        	 OUT    (SYS_PORT.ON),A  
		 OUT    (ROM.SLOT0),A
		EI
		RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

win_descriptor:
.tab80x32	Window_UserVars{
				 40,		; горизонтальный размер окна в знакоместах
				 32,		; вертикальный размер в знакоместах
				 0,		; положение окна по горизонтали на экране
				 0,		; положение окна по вертикали на экране
				 %0001'1011,	; режим знакоместа
				 0,		; дополнительный режим знакоместа
				 0,		; положение по X в поле графики (по знакоместам)
				 0		; положение по Y в поле графики (по знакоместам)
				}
.tab320x256	Window_UserVars{
				 16,		; горизонтальный размер окна в знакоместах
				 9,		; вертикальный размер в знакоместах
				 0,		; положение окна по горизонтали на экране
				 0,		; положение окна по вертикали на экране
				 %0010'0000,	; режим знакоместа
				 0,		; дополнительный режим знакоместа
				 8,		; положение по X в поле графики (по знакоместам)
				 0		; положение по Y в поле графики (по знакоместам)
				}
;

 MACRO  _mFADE
		LD	HL,memBUFFER.Shared
		; A = 0
		LD	B,A
.loop:		DUP 3
 		 CP	(HL)
		 JR	Z,1F
		 DEC	(HL)
1:		 INC	HL
		EDUP
		INC	HL
		DJNZ	.loop 
 ENDM


FADE:   XOR     A
        _mFADE
        _mFADE
        ;  A = 0
	LD	HL,memBUFFER.Shared
        ; LD DE,#0000 
         LD	D,A
         LD	E,A
        ;
        LD      B,def_pal_mask
        CALL    PIC_SET_PAL

	SAFE_PORTY
	
go_setup:		; !FIXIT переделать на TSETUP
	CALL	SCANKEY
	RET     Z

	CP      #1B
	JP	Z,.to_EXIT_SETUP

	LD	HL,#4F00
	AND	A
	SBC	HL,DE
	jr      nz,go_setup

	LD	IX,win_descriptor.tab80x32
	LD	HL,#0000
	LD	E,1
        CALL    WIN_OPEN
	JP      ENTER_SETUP

.to_EXIT_SETUP:
	LD      HL,(RET_TO_EXP_ADDR)
	PUSH    HL
	JP	EXIT_SETUP

;DECODE:
LOGO_TO_SCREEN:
	PUSH	HL
	IN	A,(SLOT1)
	LD	H,A
	IN	A,(PORT_Y)
	LD	L,A
	EX	(SP),HL
	
	LD	A,#50
	OUT	(SLOT1),A
	LD	A,72							; !HARDCODE координата картинки по Y + высота картинки
.loop:
	DEC	A
	OUT	(PORT_Y),A
	LD	DE,#4040						; !HARDCODE  координата картинки по Х
	LD	BC,128							; !HARDCODE  длина горизонтальной линии картинки
	LDIR 
	OR	A							; !!!!! or a 
	JP	NZ,.loop

	POP	BC
	LD	A,B
	OUT	(SLOT1),A
	LD	A,C
	OUT	(PORT_Y),A
	XOR	A
	RET 

 ; 	IF !ROM_LOGO_TEST
 ; LOGPAL:									; palitre for logotype
 ; 		IF TEST_Build
 ; 			INCBIN './test/test2_pal.bin'
 ; 		ELSE
 ; 			INCBIN './original/logo_pal.bin'
 ; 		ENDIF
 ; 
 ; 		IF ($-LOGPAL) < 1024
 ; 			BLOCK +(1024-($-LOGPAL)),0
 ; 		ENDIF
 ; 	ENDIF

; Original hardcoded pallete for Peters logotype
	;	 B   G	 R
	; DB	#FF,#FF,#FF,#00
	; DB	#8C,#A5,#A5,#00
	; DB	#42,#EF,#EF,#00
	; DB	#DE,#CE,#C6,#00
	; DB	#84,#39,#39,#00
	; DB	#CE,#8C,#84,#00
	; DB	#A5,#39,#31,#00
	; DB	#84,#7B,#7B,#00
	; DB	#63,#5A,#5A,#00
	; DB	#BD,#39,#39,#00
	; DB	#84,#08,#08,#00
	; DB	#AD,#08,#08,#00
	; DB	#18,#00,#00,#00
	; DB	#63,#08,#10,#00
	; DB	#94,#08,#18,#00
	; DB	#00,#00,#00,#00

 ; PALCOL:
 ; 	;	 B   G	 R
 ; 	DB	#FF,#FF,#FF,#00
 ; 	DB	#8C,#BD,#BD,#80
 ; 	DB	#BD,#CE,#BD,#00
 ; 	DB	#EF,#CE,#BD,#00
 ; 	DB	#BC,#73,#73,#00
 ; 	DB	#9C,#63,#63,#00
 ; 	DB	#DE,#8C,#8C,#00
 ; 	DB	#8C,#52,#52,#00
 ; 	DB	#BD,#63,#63,#00
 ; 	DB	#52,#10,#10,#00
 ; 	DB	#21,#00,#00,#00
 ; 	DB	#8C,#00,#00,#00
 ; 	DB	#AD,#00,#00,#00
 ; 	DB	#AD,#10,#21,#00
 ; 	DB	#8C,#00,#10,#00
 ; 	DB	#00,#00,#00,#00



SET_CGA:
	CALL	SETPAL4
	 LD	A,4                                                     ; page_pal
	 LD	HL,memBUFFER.Shared
	 LD	DE,#0000                                                ; D - ELEMENTS,E - COLOR
         LD     B,def_pal_mask
         CALL   PIC_SET_PAL

	 LD	A,6                                                     ; page_pal
	 LD	HL,memBUFFER.Shared
	 LD	DE,#0000						;D - ELEMENTS,E	- COLOR
         LD     B,def_pal_mask
         CALL   PIC_SET_PAL

	 LD	A,7                                                     ; page_pal
	 LD	HL,#80*4+memBUFFER.Shared
	 LD	DE,#8080						;D - ELEMENTS,E	- COLOR
         LD     B,def_pal_mask
         CALL   PIC_SET_PAL
        ;

	CALL	SETPAL5
	 LD	A,5                                                     ; page_pal
	 LD	HL,memBUFFER.Shared
	 LD	DE,#0000						;D - ELEMENTS,E	- COLOR
         LD     B,def_pal_mask
         CALL   PIC_SET_PAL

	 LD	A,7                                                     ; page_pal
	 LD	HL,memBUFFER.Shared
	 LD	DE,#8000						;D - ELEMENTS,E	- COLOR
         LD     B,def_pal_mask
         CALL   PIC_SET_PAL
        ;

SETPAL4:
	LD	HL,COLORS.CGA.PALETTE
	LD	DE,memBUFFER.Shared
	LD	C,#08

DCR0:	LD	B,COLORS.CGA.PALETTE.ColNum
	PUSH	HL
	;
DCR1:	POP	HL
	PUSH	HL
	PUSH	BC
	LDI 
	LDI 
	LDI 
	LDI 
	POP	BC
	DJNZ	DCR1
	;
	INC	SP
	INC	SP
	DEC	C
	JR	NZ,DCR0
	
	LD	HL,memBUFFER.Shared
	LD	BC,512
	LDIR 
	RET 

SETPAL5:
	LD	HL,COLORS.CGA.PALETTE
	LD	DE,memBUFFER.Shared
	LD	B,#08
DCR01:
	PUSH	BC
	PUSH	HL
	LD	BC,16*4
	LDIR 
	POP	HL
	POP	BC
	DJNZ	DCR01
	LD	HL,memBUFFER.Shared
	LD	BC,512
	LDIR 
	RET 

        include         'shared_includes/constants/standart_colors.inc'
;