; MACRO PRINT_LINE_KERNEL_PANIC coordY, txtString, txtStringSize, txtColor LD HL,txtString LD BC,txtColor*256 + txtStringSize LD DE,coordY * 256 + (80 - txtStringSize)/2 CALL .PRINT_LINE ENDM ; 12 bytes ; ;-----------------------[] ; 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 13, .kernel_panic, .kernel_panic.size, +(COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.RED) PRINT_LINE_KERNEL_PANIC 18, .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE) ; 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: PUSH BC PUSH DE LD DE,#A000 LD B,E LD A,C LDIR ; POP DE LD C,BIOS.LP_SET_PLACE RST ToBIOS ; POP DE LD E,D LD HL,#A000 LD D,L LD B,A LD C,BIOS.LP_PRINT_LINE3 JP ToBIOS ; .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 ;-----------------------[]