Sprinter-BIOS/bios/rom/SETUP/VIDEO_IO.asm
2026-05-19 18:51:51 +10:00

656 lines
11 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
;;
ScreenPOS:
.SUBNAME:
CALL LP_GET_PLACE
LD E,.SUBNAME.POS ;!HARDCODE autodetected hdd/cdrom info
JP LP_SET_PLACE
.SUBNAME.POS EQU 37
;
.CRLF: CALL LP_GET_PLACE
INC D
LD E,#00
JP LP_SET_PLACE
;;
IF BIG_ENDIAN_STR_PRINT = 2
PRINT_STR_BIG_ENDIAN:
LD A,(HL)
CP ' '
JR NZ,.PRINTDW
INC HL
LD A,(HL)
DEC HL
CP ' '
JR NZ,.PRINTDW
INC HL
INC HL
.no_space: 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
LD A,' '
CP E
JR Z,.no_space
DJNZ .PRINTDW
RET
ELSEIF BIG_ENDIAN_STR_PRINT = 0
PRINT_STR_BIG_ENDIAN:
PUSH HL
PUSH BC
LD D,H
LD E,L
INC HL
;
.loop_ch: LD A,(DE)
LDI
LD (DE),A
INC HL
INC DE
DJNZ .loop_ch
;
POP BC
POP HL
LD A,B
ADD A,B
LD B,A
;
.print_loop: CALL .no_space
RET Z
LD D,H
LD E,L
PUSH DE
PUSH BC
LD D,' '
CALL LP_PRINT_LINE6
POP BC
POP DE
PUSH HL
AND A
SBC HL,DE
LD A,B
SUB L
LD B,A
JR Z,.exit
LD A,' '
INC B
PUSH BC
CALL PRINT_CHAR
POP BC
POP HL
DJNZ .print_loop
RET
;
.no_space: LD A,(HL)
CP ' '
RET NZ
INC HL
DJNZ .no_space
RET
;
.exit: POP HL
RET
ELSEIF BIG_ENDIAN_STR_PRINT = 1
PRINT_STR_BIG_ENDIAN:
PUSH HL
PUSH BC
LD D,H
LD E,L
INC HL
;
.loop_ch: LD A,(DE)
LDI
LD (DE),A
INC HL
INC DE
DJNZ .loop_ch
;
POP BC
POP HL
LD A,B
ADD A,B
LD B,A
JP LP_PRINT_LINE2
ENDIF
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.INK.WHITE
; JP LP_PRINT_LINE5
CPRINTZ: LD B,0
LD D,B
LD E,A
JP LP_PRINT_LINE5
;
IPRINT: LD D,0
.I: 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
;HL - NUMBER
.Z: LD D,1
JR .I
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
;
IF STARTUP_SND
.playSnd+1: LD A,#80
RLA
JR NC,.noSound
;
LD BC,CMOS_CELL.BootUpParams.Mask.BootSound
CALL GET_CMOS_VALUE
OR A
JR Z,.noSound
LD A,#37 ; opcode SCF, play sound on
LD (INT_HANDLER.sndSwitch),A
.noSound: ;
ENDIF
;
LD BC,CMOS_CELL.BootUpParams.Mask.StartDelay
CALL GET_CMOS_VALUE
OR A
JR Z,.MinDelay
DEC A
JR Z,.AverageDelay
; Delay enabled
LD B,LOGO_DELAY_NORM
.loop EI
push bc
HALT
CALL go_setup
pop bc
DJNZ .loop
; Delay average
.AverageDelay: 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.SCR1
;
IF STARTUP_SND
LD A,#3F ; opcode CCF, play sound off
LD (INT_HANDLER.sndSwitch),A
CALL STARTUP_SOUND.mute
ENDIF
;
LD DE,0
LD HL,#0920 ;!HARDCODE LOGOTYPE SIZE
LD B,7
JP LP_CLS_WIN
; Delay disabled
.MinDelay: LD B,LOGO_DELAY_MIN
.loop2: EI
HALT
DJNZ .loop2
DI
JR .ERASE_LOGO
; ; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
SHOW_LOGO: LD IX,win_descriptor.tab320x256
CALL WIN_OPEN.SCR1
SAFE_PORTY
DI
LD A,SYS_PORT.PAGE0
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,SYS_PORT.PAGE0
OUT (SYS_PORT.ON),A
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
XOR A
OUT (SYS_PORT.ON),A
OUT (ROM.SLOT0),A
EI
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
win_descriptor:
.tab80x32 Window_UserVars{
40, ; <20><><EFBFBD><E0A8A7><EFBFBD><E2A0AB><EFBFBD><EFBFBD><><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
32, ; <20><><EFBFBD><EFBFBD><E2A8AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
0, ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><E0A8A7><EFBFBD> <20><> <20><><EFBFBD>
0, ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><E2A8AA><EFBFBD> <20><> <20><><EFBFBD>
%0001'1011, ; <><E0A5A6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
0, ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A5AB><EFBFBD><EFBFBD> <><E0A5A6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
0, ; <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>⠬)
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>⠬)
}
.tab320x256 Window_UserVars{
16, ; <20><><EFBFBD><E0A8A7><EFBFBD><E2A0AB><EFBFBD><EFBFBD><><E0A0A7><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
9, ; <20><><EFBFBD><EFBFBD><E2A8AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A0A7><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
0, ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><E0A8A7><EFBFBD> <20><> <20><><EFBFBD>
0, ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><E2A8AA><EFBFBD> <20><> <20><><EFBFBD>
%0010'0000, ; <><E0A5A6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
0, ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2A5AB><EFBFBD><EFBFBD> <><E0A5A6> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
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>⠬)
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
; 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
CALL WIN_OPEN.SCR1
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 <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
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:
; LD A,4
; LD B,3
; CALL SET_PAL_INIT
; LD A,5
; LD B,3
; CALL SET_PAL_INIT
; LD A,6
; LD B,3
; CALL SET_PAL_INIT
; LD A,7
; LD B,3
; CALL SET_PAL_INIT
; RET
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'
;