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

657 lines
12 KiB
NASM
Raw Permalink 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:
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
;;
;=======================================================================
; 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
;=======================================================================
; 0 - ¯¥ç âì á ¯®à祩 ¡ãä¥à  ¨ ¯à®¯ã᪮¬ ¤¢®©­ëå ¯à®¡¥«®¢ - ¢ 1,5 à §  èãáâ॥ á⮪  ­¥ § â¨à ¥â ¯à¥¤ë¤ãéãî áâபã
; 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
;=======================================================================
; 1 - ¯¥ç âì á ¯®à祩 ¡ãä¥à  ¡¥§ ¯à®¯ã᪠ ¤¢®©­ëå ¯à®¡¥«®¢ - ¢ 3 à §  èãáâ॥ á⮪ 
; 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
; ;PUSH HL
; ;CALL CONFIGURE_IDE_DRIVES.COPY_IDE_NAME_TO_SYS_PAGE
; ;POP HL
; JP LP_PRINT_LINE2
;=======================================================================
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>‡“
; 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, ; £®à¨§®­â «ì­ë© à §¬¥à ®ª­  ¢ §­ ª®¬¥áâ å
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
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 ª®®à¤¨­ â  ª à⨭ª¨ ¯® Y + ¢ëá®â  ª à⨭ª¨
.loop:
DEC A
OUT (PORT_Y),A
LD DE,#4040 ; !HARDCODE ª®®à¤¨­ â  ª à⨭ª¨ ¯® •
LD BC,128 ; !HARDCODE ¤«¨­  £®à¨§®­â «ì­®© «¨­¨¨ ª à⨭ª¨
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'
;