init
This commit is contained in:
293
Protect/PM_INT8.9/PM1.ASM
Executable file
293
Protect/PM_INT8.9/PM1.ASM
Executable 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
|
||||
Reference in New Issue
Block a user