Sprinter-Core/src/bios/rom/SETUP/VIDEO_IO.asm

567 lines
9.9 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 ScreenPOS.LOCAT
CALL LP_SET_PLACE
LD A,(ElementsBuffer.UpLeft)
LD H,E
CALL PRSYM
LD A,(ElementsBuffer.HorizontalLine)
.BHOR+1:
LD B,1
;CALL PRSYMB
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 ScreenPOS.LOCAT
CALL LP_SET_PLACE
LD A,(ElementsBuffer.VerticalLine)
CALL PRSYM
LD A,H
.BSHI+1:
ADD A,#00
LD E,A
;CALL ScreenPOS.LOCAT
CALL LP_SET_PLACE
LD A,(ElementsBuffer.VerticalLine)
CALL PRSYM
POP BC
LD E,H
INC D
DJNZ .loop
;CALL ScreenPOS.LOCAT
CALL LP_SET_PLACE
LD A,(ElementsBuffer.DownLeft)
CALL PRSYM
LD A,(ElementsBuffer.HorizontalLine)
.BHOR2+1:
LD B,1
;CALL PRSYMB
CALL LP_PRINT_SYM
LD A,(ElementsBuffer.DownRight)
CALL PRSYM
RET
PRSYM: ;LD BC,1*256 + BIOS.LP_PRINT_SYM
;JP_to_BIOS
LD B,1
JP LP_PRINT_SYM
; PRSYMB: LD C,BIOS.LP_PRINT_SYM
; JP_to_BIOS
LOGOTYP:
CALL LOGOX
LD BC,#180E
CALL G_VALUE
OR A
JR Z,EASYDLY ;MIN (DISABLE)
DEC A
JR Z,SKIPDLY ;NORMAL
LD B,LOGO_DELAY_NORM
.loop EI
push bc
HALT
call go_setup
pop bc
DJNZ .loop
SKIPDLY:
LD B,LOGO_DELAY_MAX
.MMA: PUSH BC
EI
HALT
DI
CALL FADE
POP BC
DJNZ .MMA
NOWLOGO:
LD IX,win_descriptor.tab80x32
LD HL,#0000
LD E,1
EI
HALT
DI
CALL WIN_OPEN
LD DE,0
LD HL,#0920 ;LOGOTYPE SIZE
LD B,7
JP LP_CLS_WIN
EASYDLY:
LD B,LOGO_DELAY_MIN
.loop: EI
HALT
DJNZ .loop
DI
JR NOWLOGO
LOGOX: 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 ; ­ ç «® ª à⨭ª¨ ¢ ¡ ­ª¥ <20>‡“
; CALL DECODE
CALL LOGO_TO_SCREEN
;
;--------------[<5B> áå «ª ]--------------[]
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 CSETUP
.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'
;