MACRO PRINT_LINE_KERNEL_PANIC txtString, txtStringSize, txtColor, coordY LD HL,txtString LD DE,#A000 LD BC,txtStringSize LD A,C LDIR ; LD DE,coordY*256 + (80-txtStringSize)/2 ;X=0, Y=15 LD C,BIOS.LP_SET_PLACE RST ToBIOS ; LD HL,#A000 LD DE,0*256 + txtColor LD B,A LD C,BIOS.LP_PRINT_LINE3 RST ToBIOS ENDM ;-----------------------[] ; HL - сообщение ; E - координата X на текстовом экране ; BC - длина сообщения KERNEL_PANIC: DI ; PUSH DE PUSH HL PUSH BC ; LD E,1 LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default RST ToBIOS ; LD HL,#2050 LD DE,0 LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN RST ToBIOS ; LD A,1 OUT (SCREEN_SWITCH),A ; set scr-2 ; PRINT_LINE_KERNEL_PANIC .kernel_panic, .kernel_panic.size, +(COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.RED), 13 PRINT_LINE_KERNEL_PANIC .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE), 18 ; POP BC POP HL LD DE,#A000 LD A,C LDIR ; POP DE LD D,15 LD C,BIOS.LP_SET_PLACE RST ToBIOS ; LD HL,#A000 LD DE,0*256 + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE LD B,A LD C,BIOS.LP_PRINT_LINE3 RST ToBIOS ; .loop: DI HALT JR .loop .print_line: RET ; .kernel_panic: DZ "KERNEL PANIC!" .kernel_panic.size EQU $-.kernel_panic ; .press_CAD: DZ "Press Ctrl+Alt+Del or RESET." .press_CAD.size EQU $-.press_CAD ;-----------------------[]