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 ; начало картинки в банке ПЗУ ; 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' ;