Sprinter-Core/src/bios/rom/SETUP/VIDEO_IO.asm
Anatoliy Belyanskiy dc8f5f37ac some tests with 5x
2023-06-25 04:55:29 +10:00

693 lines
13 KiB
NASM
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. 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
IF NEW_FEATURE
ENDIF
;;
ScreenPOS:
;.GET_CUR:
; LD C,BIOS.LP_GET_PLACE
; JP_to_BIOS
.SUBNAME:
;CALL ScreenPOS.GET_CUR
CALL LP_GET_PLACE
LD E,#24
;.LOCAT:
; LD C,BIOS.LP_SET_PLACE
; JP_to_BIOS
JP LP_SET_PLACE
.CRLF: ;CALL ScreenPOS.GET_CUR
CALL LP_GET_PLACE
INC D
LD E,#00
;JP ScreenPOS.LOCAT
JP LP_SET_PLACE
;;
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
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
; LD C,BIOS.LP_PRINT_ATR
; JP_to_BIOS
JP LP_PRINT_ATR
PRINT_CHAR:
; LD BC,1*256 + BIOS.LP_PRINT_SYM
; JP_to_BIOS
LD B,1
JP LP_PRINT_SYM
;
TPRINTZ:
;CALL ScreenPOS.LOCAT
CALL LP_SET_PLACE
; LD BC,0*256 + BIOS.LP_PRINT_LINE6
PRINTZ:
LD B,0
LD D,B
; JP_to_BIOS
JP LP_PRINT_LINE6
; PRINTZ:
; ; LD BC,0*256 + BIOS.LP_PRINT_LINE6
; LD B,0
; LD D,B
; ; JP_to_BIOS
; JP LP_PRINT_LINE6
HPRINTZ:
;LD BC,0*256 + BIOS.LP_PRINT_LINE5
LD B,0
LD D,B
LD E,#0F
;JP_to_BIOS
JP LP_PRINT_LINE5
CPRINTZ:
;LD BC,0*256 + BIOS.LP_PRINT_LINE5
LD B,0
LD D,B
LD E,A
;JP_to_BIOS
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><><EFBFBD> <20><><EFBFBD><EFBFBD><E2A8AD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
; CALL DECODE
CALL LOGO_TO_SCREEN
;
;--------------[<5B><><EFBFBD><EFBFBD><E5A0AB>]--------------[]
IF Pashalki
_PASHALKI_CODE
ENDIF
;--------------------------------------[]
;
XOR A
OUT (SYS_PORT.ON),A
OUT (ROM.SLOT0),A
EI
RET
win_descriptor:
.tab80x32:
DB 40
DB 32
DB 0
DB 0
DB %0001'1011
DB 0
DB 0
DB 0
.tab320x256:
DB 16 ; <20><><EFBFBD><E0A8A7><EFBFBD><E2A0AB><EFBFBD><EFBFBD><><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DB 9 ; <20><><EFBFBD><EFBFBD><E2A8AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DB 0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><E0A8A7><EFBFBD> <20><> <20><><EFBFBD>
DB 0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><E2A8AA><EFBFBD> <20><> <20><><EFBFBD>
DB %0010'0000 ; <><E0A5A6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DB 0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A5AB><EFBFBD><EFBFBD> <><E0A5A6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
DB 8 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> X <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠬)
DB 0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> Y <20> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> (<28><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⠬)
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
; !HARDCODE & CURSOR COLORS. LD DE,#0000
LD D,A
LD E,A
;
LD B,def_pal_mask
CALL PIC_SET_PAL
SAFE_PORTY
go_setup: ; !FIXIT <20><><EFBFBD><E0A5A4><EFBFBD><EFBFBD><EFBFBD> <20><> 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 <20><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2A8AD> <20><> Y + <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2A8AD>
.loop:
DEC A
OUT (PORT_Y),A
LD DE,#4040 ; !HARDCODE <20><><EFBFBD><EFBFBD><E0A4A8><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2A8AD> <20><> <20>
LD BC,128 ; !HARDCODE <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A8A7>⠫쭮<E2A0AB> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><E2A8AD>
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,#10
DCR1:
PUSH BC
PUSH HL
LDI
LDI
LDI
LDI
POP HL
POP BC
DJNZ DCR1
INC HL
INC HL
INC HL
INC HL
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
MODULE COLORS
CGA:
; B G R _
.PALETTE: DB #00,#00,#00,#00 ; 0 BLACK
DB #A8,#00,#00,#00 ; 1 BLUE
DB #00,#A8,#00,#00 ; 2 GREEN
DB #A8,#A8,#00,#00 ; 3 CYAN
DB #00,#00,#A8,#00 ; 4 RED
DB #A8,#00,#A8,#00 ; 5 MAGENTA
DB #00,#54,#A8,#00 ; 6 BROWN
DB #A8,#A8,#A8,#00 ; 7 WHITE
DB #54,#54,#54,#00 ; 8 GRAY
DB #FC,#54,#54,#00 ; 9 BRIGHT BLUE
DB #54,#FC,#54,#00 ; 10 BRIGHT GREEN
DB #FC,#FC,#54,#00 ; 11 BRIGHT CYAN
DB #54,#54,#FC,#00 ; 12 BRIGHT RED
DB #FC,#54,#FC,#00 ; 13 BRIGHT MAGENTA
DB #54,#FC,#FC,#00 ; 14 YELLOW
DB #FC,#FC,#FC,#00 ; 15 WHITE
;
;
INC:
.BLACK EQU #00
.BLUE EQU #01
.GREEN EQU #02
.CYAN EQU #03
.RED EQU #04
.MAGENTA EQU #05
.BROWN EQU #06
.LGRAY EQU #07
.DGRAY EQU #08
.LBLUE EQU #09
.LGREEN EQU #0A
.LCYAN EQU #0B
.LRED EQU #0C
.LMAGENT EQU #0D
.YELLOW EQU #0E
.WHITE EQU #0F
PAPER:
.BLACK EQU 16*INC.BLACK
.BLUE EQU 16*INC.BLUE
.GREEN EQU 16*INC.GREEN
.CYAN EQU 16*INC.CYAN
.RED EQU 16*INC.RED
.MAGENTA EQU 16*INC.MAGENTA
.BROWN EQU 16*INC.BROWN
.LGRAY EQU 16*INC.LGRAY
.DGRAY EQU 16*INC.DGRAY
.LBLUE EQU 16*INC.LBLUE
.LGREEN EQU 16*INC.LGREEN
.LCYAN EQU 16*INC.LCYAN
.LRED EQU 16*INC.LRED
.LMAGENT EQU 16*INC.LMAGENT
.YELLOW EQU 16*INC.YELLOW
.WHITE EQU 16*INC.WHITE
FLASH EQU #80
/*
INC_COLOR:
.BLACK EQU #00
.BLUE EQU #01
.GREEN EQU #02
.CYAN EQU #03
.RED EQU #04
.MAGENTA EQU #05
.BROWN EQU #06
.LGRAY EQU #07
.DGRAY EQU #08
.LBLUE EQU #09
.LGREEN EQU #0A
.LCYAN EQU #0B
.LRED EQU #0C
.LMAGENT EQU #0D
.YELLOW EQU #0E
.WHITE EQU #0F
.FLASH EQU #80
PAPER_COLOR:
.BLACK EQU 16*COLORS.INC.BLACK
.BLUE EQU 16*COLORS.INC.BLUE
.GREEN EQU 16*COLORS.INC.GREEN
.CYAN EQU 16*COLORS.INC.CYAN
.RED EQU 16*COLORS.INC.RED
.MAGENTA EQU 16*COLORS.INC.MAGENTA
.BROWN EQU 16*COLORS.INC.BROWN
.LGRAY EQU 16*COLORS.INC.LGRAY
.DGRAY EQU 16*COLORS.INC.DGRAY
.LBLUE EQU 16*COLORS.INC.LBLUE
.LGREEN EQU 16*COLORS.INC.LGREEN
.LCYAN EQU 16*COLORS.INC.LCYAN
.LRED EQU 16*COLORS.INC.LRED
.LMAGENT EQU 16*COLORS.INC.LMAGENT
.YELLOW EQU 16*COLORS.INC.YELLOW
.WHITE EQU 16*COLORS.INC.WHITE
.FLASH EQU #80
*/
ENDMODULE
;