This commit is contained in:
Mark Zheleznyakov
2024-09-07 08:49:36 +03:00
commit be2b9502d1
54 changed files with 3980 additions and 0 deletions

293
Protect/PM_INT8.9/PM1.ASM Executable file
View File

@ -0,0 +1,293 @@
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E3A4A5><EFBFBD> <20><><EFBFBD> 2084/3
; <20><><EFBFBD><EFBFBD><EFBFBD><E0A5AD> <20><><EFBFBD>
; <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
; <20>ணࠬ<E0AEA3><E0A0AC>, <20><EFBFBD><E0AEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20> Protrcted Mode,
; <20><>९ணࠬ<E0AEA3><E0A0AC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD> <20> <20><EFBFBD><E0AEA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ᬥ饭<E1ACA5><E9A5AD> <20><> 32-<2D> <20><><EFBFBD><E2ADAE><><E1A5A3><EFBFBD><EFBFBD><EFBFBD> <20> 16-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD>
so equ small offset
.386p
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Real Mode, 16 <20><><EFBFBD>
RM_seg segment para public "CODE" use16
assume cs: RM_seg, ds: PM_seg, ss: Stack_seg
start:
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>
mov ax, 3
int 10h
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2AEA2><EFBFBD><><E1A5A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
push PM_seg
pop ds
; <20><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <><E0A5A6> (PM <20><><EFBFBD> <20><><EFBFBD>)
mov eax, cr0
test al, 1
jz no_V86
; <20>᫨ 㦥 <20> PM - ᮮ<><E1AEAE><EFBFBD><EFBFBD><EFBFBD> <20><> <20><EFBFBD><E8A8A1> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
mov dx, so v86_msg
err_exit:
mov ah, 9
int 21h
mov ah, 4Ch
int 21h
; <20><EFBFBD><E0AEA2><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> Windows
no_V86:
mov ax, 1600h
int 2Fh
test al, al
jz no_Windows
; <20><20><><EFBFBD> Wondows - ᮮ<><E1AEAE><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
mov dx, so win_msg
jmp short err_exit
; *****************************************
; <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD><EBAFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC>
no_Windows:
; <20><><EFBFBD><EFBFBD><EFBFBD><E1ABA8> <20><><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD> <20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><E3A5AC> <20><><EFBFBD><EFBFBD><EFBFBD><E0A8AF>஢ ᥣ<><E1A5A3><EFBFBD>
xor eax, eax
mov ax, RM_seg ; <20><><EFBFBD><EFBFBD><EFBFBD> 16bitCS <20><EFBFBD> RM_seg
shl eax, 4
mov word ptr GDT_16bitCS+2, ax ; <20><><EFBFBD><EFBFBD> 15-0
shr eax, 16
mov byte ptr GDT_16bitCS+4, al ; <20><><EFBFBD><EFBFBD> 23-16
mov ax, PM_seg
shl eax, 4
mov word ptr GDT_32bitCS+2, ax ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> 32bit* <20><EFBFBD>
mov word ptr GDT_32bitSS+2, ax ; PM_seg
mov word ptr GDT_32bitDS+2, ax
shr eax, 16
mov byte ptr GDT_32bitCS+4, al
mov byte ptr GDT_32bitSS+4, al
mov byte ptr GDT_32bitDS+4, al
; <20><><EFBFBD><EFBFBD><EFBFBD><E1ABA8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> GDT
xor eax, eax
mov ax, PM_seg
shl eax, 4
push eax
add eax, offset GDT
mov dword ptr gdtr+2, eax
; <20><><EFBFBD><EFBFBD><EFBFBD><E3A7A8> GDT
lgdt fword ptr gdtr
; <20><><EFBFBD><EFBFBD><EFBFBD><E1ABA8> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> IDT
pop eax
add eax, offset IDT
mov dword ptr idtr+2, eax
; <20><><EFBFBD><EFBFBD><EFBFBD><E3A7A8> IDT
lidt fword ptr idtr
; <20>.<2E>. ᮡ<><EFBFBD><E0A0A5><EFBFBD><><E0A0A1><EFBFBD><EFBFBD><EFBFBD> <20> 32-<2D> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> A20
in al, 70h
or al, 2
out 92h, al
; <20><EFBFBD><E2AAAB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD>
cli
; <20><EFBFBD><E2AAAB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3A5AC> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD> (NMI)
in al, 70h
or al, 80h
out 70h, al
; <20><><EFBFBD><E0A5A9> <20> <20><><EFBFBD><EFBFBD><EFBFBD><E9A5AD><EFBFBD> <><E0A5A6>
mov eax, cr0
or al, 1
mov cr0, eax
; <20><><EFBFBD><EFBFBD><EFBFBD><E3A7A8> SEL_32bitCS <20> CS
db 66h ; <20><><EFBFBD><EFBFBD> <20><EFBFBD><EFBFBD><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><EFBFBD><EFA4AD><EFBFBD><EFBFBD>
db 0EAh ; <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
dd offset PM_entry
dw Sel_32bitCS
RM_return:
; <20><><EFBFBD><E0A5A9> <20> Real Mode
mov eax, cr0
and al, 0FEh
mov cr0, eax
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><E3A7A8> CS ॠ<><E0A5A0><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>
db 0EAh
dw $+4
dw RM_seg
; <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><><E0A0A1><EFBFBD> <20><><EFBFBD> <><E0A5A6><EFBFBD>
mov ax, PM_seg
mov ds, ax
mov es, ax
mov ax, Stack_seg
mov bx, stack_l
mov ss, ax
mov sp, bx
; <20><><EFBFBD><EFBFBD><EFBFBD><E3A7A8> IDTR <20><><EFBFBD> RM
mov ax, PM_seg
mov ds, ax
lidt fword ptr idtr_real
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> NMI
in al, 70h
and al, 07Fh
out 70h, al
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD>
sti
; <20> <20><><EFBFBD><EFBFBD><EFBFBD>
mov ah, 4Ch
int 21h
RM_seg ends
; 32-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1A5A3><EFBFBD><EFBFBD>
PM_seg segment para "CODE" use32
assume cs: PM_seg
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> GDT <20> IDT <20>.<2E>. <20><><EFBFBD><E0AEA2><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><><E0A0A7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><><E1A5A3><EFBFBD><EFBFBD><EFBFBD>
GDT label byte
db 8 dup(0)
; 32-x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4-<2D> <20><><><E1A5A3><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> =0
GTD_flatDS db 0FFh,0FFh,0,0,0,10010010b,11001111b,0
; 16-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 64-<2D> <20><><><E1A5A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> RM_seg
GDT_16bitCS db 0FFh,0FFh,0,0,0,10011010b,0,0
; 32-x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4-<2D> <20><><><E1A5A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> PM_seg
GDT_32bitCS db 0FFh,0FFh,0,0,0,10011010b,11001111b,0
; 32-x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4-<2D> <20><><><E1A5A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> PM_seg
GDT_32bitDS db 0FFh,0FFh,0,0,0,10010010b,11001111b,0
; 32-x <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 4-<2D> <20><><><E1A5A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD> Stack_seg
GDT_32bitSS db 0FFh,0FFh,0,0,0,10010010b,11001111b,0
gdt_size = $-GDT
gdtr dw gdt_size-1 ; <20><EFBFBD><E0A5A4> GDT
dd ? ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> GDT
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E1A5AB><EFBFBD><EFBFBD>
SEL_flatDS equ 001000b
SEL_16bitCS equ 010000b
SEL_32bitCS equ 011000b
SEL_32bitDS equ 100000b
SEL_32bitSS equ 101000b
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0A8AF><20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD> IDT
IDT label byte
; <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0A8AF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> 0Eh - 32-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD>
; INT 00-07
dw 8 dup(so int_handler, SEL_32bitCS, 8E00h,0)
; INT 08(irq0)
dw so irq0_7_handler,SEL_32bitCS,8E00h,0
; INT 09(irq1)
dw so irq1_handler,SEL_32bitCS,8E00h,0
; INT 0Ah-0Fh (IRQ2-IRQ8)
dw 6 dup(so irq0_7_handler,SEL_32bitCS,8E00h,0)
; INT 10h-6Fh
dw 97 dup(so int_handler,SEL_32bitCS,8E00h,0)
; INT 70h-78h (IRQ8-IRQ15)
dw 8 dup(so irq8_15_handler,SEL_32bitCS,8E00h,0)
; INT 79h-FFh
dw 135 dup(so int_handler,SEL_32bitCS,8E00h,0)
idt_size = $-IDT
idtr dw idt_size-1 ; <20><EFBFBD><E0A5A4> IDT
dd ? ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> IDT
; <20><><EFBFBD><EFBFBD><EFBFBD><E0A6A8><EFBFBD><><E0A5A3><EFBFBD><EFBFBD><EFBFBD> IDTR <20><><EFBFBD> <><E0A5A6><EFBFBD>
idtr_real dw 3FFh,0,0
; <20><><EFBFBD><EFBFBD><EFBFBD><E9A5AD> <20><> <20><EFBFBD><E8A8A1><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
v86_msg db "<22><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <><E0A5A6><EFBFBD> v86 - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A5AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> PM$"
win_msg db "<22>ணࠬ<E0AEA3><E0A0AC> <20><> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD> Windows$"
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><E0A5A2><EFBFBD> OE ᪠<>-<2D><><EFBFBD><EFBFBD><EFBFBD> <20> ASCII
scan2ascii db 0,1Bh,'1','2','3','4','5','6','7','8','9','0','-','=',8
screen_addr dd 0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>
; <20><><20><EFBFBD> <20> 32-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E9A5AD><EFBFBD> <><E0A5A6>
PM_entry:
; <20><><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD> 32-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><20> <20><><EFBFBD><><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
mov ax, SEL_flatDS
mov ds, ax
mov es, ax
mov ax, SEL_32bitSS
mov ebx, stack_l
mov ss, ax
mov esp, ebx
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD>
sti
; <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>
jmp short $
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
;! <20><><EFBFBD><E0A0A1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD> !
;! <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><E0A5AA><EFBFBD> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E1AAA0> <20><EFBFBD><E8A8A1> !
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
; <20><><EFBFBD><E0A0A1><20><><EFBFBD><EFBFBD><E7ADAE> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD>
int_handler:
iretd
; <20><><EFBFBD><E0A0A1><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2ADAE> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD> IRQ0-IRQ7
irq0_7_handler:
push eax
mov al, 20h
out 20h, al
pop eax
iretd
; <20><><EFBFBD><E0A0A1><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2ADAE> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD> IRQ8-IRQ15
irq8_15_handler:
push eax
mov al, 20h
out 0A1h, al
pop eax
iretd
; <20><><EFBFBD><E0A0A1>稪 IRQ1 - <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
irq1_handler:
push eax ; <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD> -
push ebx ; <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD><><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
push es
push ds
in al, 60h ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
cmp al, 0Eh ; <20><20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 祬 <20><><EFBFBD><EFBFBD><EFBFBD><E3A6A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ja skip_translate ; <20><><EFBFBD><EFBFBD>, - <20><> <20><><EFBFBD><E0A0A1><EFBFBD><EBA2A0>
cmp al, 1 ; <20><20><><EFBFBD> ESC,
je esc_pressed ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><E0A5A0><EFBFBD><EFBFBD><EFBFBD> <><E0A5A6>
mov bx, SEL_32bitDS ; <20><><EFBFBD><EFBFBD><EFBFBD>:
mov ds, bx ; DS:EBX - ⠡<><E2A0A1><EFBFBD><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><E0A5A2><EFBFBD>
mov ebx, offset scan2ascii ; ᪠<>-<2D><><EFBFBD><EFBFBD> <20> ASCII
xlatb ; <20><EFBFBD><EFBFBD><E0A0A7><EFBFBD><EFBFBD><EFBFBD>
mov bx, SEL_flatDS
mov es, bx ; ES:EBX - <20><><EFBFBD><EFBFBD><EFBFBD><>
mov ebx, screen_addr ; <20><><EFBFBD><EFBFBD><20><> <20><><EFBFBD>
cmp al, 8 ; <20><20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> BkSpace
je bs_pressed ; <20><> ᮮ⢥<E1AEAE><E2A2A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><E0A0A1>
mov es:[ebx+0B8000h], al ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E1ABA0><><E1A8AC><EFBFBD> <20><> <20><>
add dword ptr screen_addr, 2; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><20><> 2
jmp short skip_translate
bs_pressed: ; <20><><EFBFBD><EFBFBD><EFBFBD> BkSpace:
mov al,' ' ; <20><EFBFBD><EBA2A5><EFBFBD> <20><EFBFBD><E0AEA1>
sub ebx, 2 ; <20> <20><><EFBFBD><EFBFBD><20><EFBFBD><E0A5A4><EFBFBD><EFBFBD><><E1A8AC><EFBFBD><EFBFBD>
mov es:[ebx+0B8000h], al
mov screen_addr, ebx ; <20> <20><><EFBFBD><EFBFBD><E0A0AD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><E0A5A4><><E1A8AC><EFBFBD><EFBFBD>,
; <20><><EFBFBD><>
skip_translate:
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A0A1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
in al, 61h
or al, 80h
out 61h, al
; <20><><EFBFBD><E1ABA0> EOI <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EBA2A0><EFBFBD>
mov al, 20h
out 20h, al
; <20><><EFBFBD><EFBFBD><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
pop ds
pop es
pop ebx
pop eax
iretd
; *******************
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ESC
esc_pressed:
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><E0A0A1><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><E1ABA0> EOI <20> <20><><EFBFBD><EFBFBD><EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD><><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
in al, 61h
or al, 80h
out 61h, al
mov al, 20h
out 20h, al
pop ds
pop es
pop ebx
pop eax
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><E0A5A0><EFBFBD><EFBFBD><EFBFBD> <><E0A5A6>
cli
db 0EAh
dd offset RM_return
dw SEL_16bitCS
PM_seg ends
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD>, <20><EFBFBD><E1AFAE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD> 16-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> 16-<2D><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD> <20>ணࠬ<E0AEA3><E0A0AC> <20> <20><><EFBFBD>
; 32-<2D> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> (<28><>१ ᥫ<><E1A5AB><EFBFBD><EFBFBD><EFBFBD> SEL_32bitSS) <20> 32-<2D> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
Stack_seg segment para stack "STACK"
stack_start db 100h dup(?)
stack_l = $-stack_start ; <20><><EFBFBD><EFBFBD><EFBFBD> <20><EFBFBD> <20><><EFBFBD> <20><><EFBFBD><EFBFBD><E6A8A0><EFBFBD><EFBFBD>樨 ESP
Stack_seg ends
end start