init
This commit is contained in:
446
Protect/PM_INT8.9/PM.ASM
Executable file
446
Protect/PM_INT8.9/PM.ASM
Executable file
@ -0,0 +1,446 @@
|
||||
; <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
|
||||
|
||||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>প<EFBFBD>. <20><> <20>室<EFBFBD> - <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20><>६<EFBFBD><E0A5AC><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>প<EFBFBD> (<28> <20><><EFBFBD>).
|
||||
delay macro time
|
||||
local ext,iter
|
||||
push ecx
|
||||
mov ecx,time
|
||||
ext: push ecx
|
||||
mov cx,5000 ;<3B><><EFBFBD> <20><><EFBFBD>祭<EFBFBD><E7A5AD> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><>室<EFBFBD> <20><> <20>ந<EFBFBD><E0AEA8><EFBFBD><EFBFBD><EFBFBD>⥫쭮<E2A5AB><ECADAE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
|
||||
iter: loop iter
|
||||
pop ecx
|
||||
loop ext
|
||||
pop ecx
|
||||
endm
|
||||
|
||||
.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
|
||||
dw so timer_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
|
||||
db 0,'Q','W','E','R','T','Y','U','I','O','P','[',']',0
|
||||
DB 0,'A','S','D','F','G','H','J','K','L',';',27h,'`',0 ; LShift
|
||||
db '\','Z','X','C','V','B','N','M',',','.','/',0 ; RShift
|
||||
db '0','0',' ' ; SP
|
||||
screen_addr dd 0 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>࠭<EFBFBD>
|
||||
N dd 64 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD>ᨢ<EFBFBD> MUS
|
||||
NM dd 1 ; <20><><EFBFBD><EFBFBD>稪 <20><><EFBFBD>⥫쭮<E2A5AB><ECADAE><EFBFBD>
|
||||
; <20><><EFBFBD>ᨢ <20><><EFBFBD> <20><><EFBFBD>砭<EFBFBD><E7A0AD>: 1-<2D> <20><> - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, 2-<2D> - <20><><EFBFBD>⥫쭮<E2A5AB><ECADAE><EFBFBD>
|
||||
MUS dw 1218,10, 767,10, 813,10, 912,10, 966,10, 912,30
|
||||
dw 1218,10, 609,10, 678,10, 767,10, 813,10, 767,30
|
||||
dw 912,10, 574,15, 609,5, 678,15, 767,5, 813,5
|
||||
dw 767,5, 678,20, 574,10, 609,10, 678,10, 767,10
|
||||
dw 678,10, 813,30, 1218,10, 767,10, 813,10, 912,10
|
||||
dw 966,10, 912,30, 1218,10, 609,10, 678,10, 767,10
|
||||
dw 813,10, 767,30, 912,10, 574,15, 609,5, 678,15
|
||||
dw 767,5, 813,5, 767,5, 678,20, 574,10, 609,10
|
||||
dw 678,10, 767,10, 678,10, 813,30, 0,2, 609,10
|
||||
dw 609,10, 912,10, 724,10, 609,10, 609,5, 678,5
|
||||
dw 724,5, 678,5, 574,15, 678,5, 678,10, 1024,10
|
||||
dw 813,10, 678,10, 678,5, 767,5, 813,5, 724,5
|
||||
dw 609,20, 678,5, 609,5, 574,5, 456,5, 342,5
|
||||
dw 384,5, 406,5, 456,5, 456,20, 483,20, 678,5
|
||||
dw 609,5, 574,5, 456,5, 342,5, 384,5, 406,5
|
||||
dw 456,5, 456,10, 483,10, 456,20, 0,2, 456,5
|
||||
dw 456,10, 483,10, 456,20, 0,30
|
||||
;MC = ($-MUS)/4; Music Count - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><><EFBFBD>
|
||||
MC = 100
|
||||
|
||||
; <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><EBA2A0><EFBFBD> <20><> ⠩<><E2A0A9><EFBFBD><EFBFBD> (int8) !
|
||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
timer_handler:
|
||||
; <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>
|
||||
push eax
|
||||
push ebx
|
||||
push es
|
||||
push ds
|
||||
|
||||
mov bx, SEL_32bitDS ; <20><><EFBFBD><EFBFBD>㧨<EFBFBD><E3A7A8> ᥣ<><E1A5A3><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov ds, bx
|
||||
|
||||
dec NM ; <20><><EFBFBD><EFBFBD>饥 <20>६<EFBFBD> <20><><EFBFBD>砭<EFBFBD><E7A0AD>
|
||||
mov eax, NM ; <20> <20><> <20><>⥪<EFBFBD><E2A5AA>,
|
||||
cmp eax, 0
|
||||
jnz contin_mus ; <20><> <20><>祣<EFBFBD> <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
; <20>몫<EFBFBD><EBAAAB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
in al, 61h
|
||||
and al, 0FCh
|
||||
out 61h, al
|
||||
delay 1 ; <20><>㧠
|
||||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <><E1ABA5><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
inc N ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20><>.
|
||||
mov eax, N ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov ebx, 4 ; ! <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mul ebx ; <20><><EFBFBD>饭<EFBFBD><E9A5AD> <20><><EFBFBD><EFBFBD>, <20>⭮<EFBFBD><E2ADAE>⥫쭮 <20><>砫<EFBFBD> <20><><EFBFBD>ᨢ<EFBFBD>
|
||||
add eax, offset MUS ; <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
push eax ; <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD>
|
||||
; xor eax, eax
|
||||
mov ax, [eax] ; <20> AX - <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>砭<EFBFBD><E7A0AD>
|
||||
mov ebx, eax ; <20><><EFBFBD><EFBFBD><EFBFBD>⮢<EFBFBD><E2AEA2>
|
||||
shr ebx, 8 ; <20><>ࠬ<EFBFBD><E0A0AC> <20><><EFBFBD>
|
||||
and ax, 00FFh ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
push eax
|
||||
mov ax, 0B6h ; \
|
||||
out 43h, ax ; _\outportb(0x43, 0xB6)
|
||||
pop eax ; EAX = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> & 0x00FF
|
||||
out 42h, ax
|
||||
xchg ax, bx ; ax = <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >> 8
|
||||
out 42h, ax
|
||||
in al, 61h
|
||||
or al, 03h
|
||||
out 61h, al
|
||||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>⥫쭮<E2A5AB><ECADAE><EFBFBD>
|
||||
pop ebx ; EBX = <20><><EFBFBD><EFBFBD><EFBFBD> ⥪<>饩 <20><><EFBFBD><EFBFBD>
|
||||
xor eax, eax
|
||||
mov ax, word ptr [ebx+2] ; EAX = <20><><EFBFBD>⥫쭮<E2A5AB><ECADAE><EFBFBD>
|
||||
mov NM, eax
|
||||
|
||||
cmp N, MC ; <20> <20><> <20> <20><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
|
||||
jb contin_mus ; <20><> <20><>祣<EFBFBD>,
|
||||
mov N, 0 ; <20><><EFBFBD><EFBFBD><EFBFBD> - <20> <20><>砫<EFBFBD> <20><><EFBFBD>ᨢ<EFBFBD>
|
||||
|
||||
contin_mus:
|
||||
; mov NM, eax ; <20><><EFBFBD>࠭<EFBFBD><E0A0AD><EFBFBD> ⥪<>饥 <20>६<EFBFBD> <20><><EFBFBD>砭<EFBFBD><E7A0AD>
|
||||
; <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD>
|
||||
mov al, 20h
|
||||
out 20h, al
|
||||
; <20><><EFBFBD><EFBFBD>⠭<EFBFBD><E2A0AD><EFBFBD><EFBFBD><EFBFBD> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
pop ds
|
||||
pop es
|
||||
pop ebx
|
||||
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 edx
|
||||
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>
|
||||
cmp al, 39h ; <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>稪
|
||||
cmp al, 0 ;
|
||||
je skip_translate ;
|
||||
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
|
||||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov ebx, screen_addr
|
||||
shr ebx, 1
|
||||
;! mov eax, ebx
|
||||
;! mov ebx, 2
|
||||
;!!! div ebx
|
||||
; mov ebx, eax
|
||||
; mov ebx, screen_addr
|
||||
; inc ebx
|
||||
xor edx, edx
|
||||
xor eax, eax
|
||||
mov dx, 03D4h ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> CRT
|
||||
mov al, 0Fh ; <20><><EFBFBD><EFBFBD>饭<EFBFBD><E9A5AD> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>襣<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov ah, bl
|
||||
out dx, ax
|
||||
mov al, 0Eh ; <20> ॣ. <20><><EFBFBD><EFBFBD>襣<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov ah, bh
|
||||
out dx, ax
|
||||
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> ⥪<>騩
|
||||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
shr ebx, 1
|
||||
;! mov eax, ebx
|
||||
;! mov ebx, 2
|
||||
;!!! div ebx
|
||||
; mov ebx, eax
|
||||
; mov ebx, screen_addr
|
||||
; inc ebx
|
||||
xor edx, edx
|
||||
xor eax, eax
|
||||
mov dx, 03D4h ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><E0AEAB><EFBFBD><EFBFBD> CRT
|
||||
mov al, 0Fh ; <20><><EFBFBD><EFBFBD>饭<EFBFBD><E9A5AD> <20> ॣ<><E0A5A3><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>襣<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov ah, bl
|
||||
out dx, ax
|
||||
mov al, 0Eh ; <20> ॣ. <20><><EFBFBD><EFBFBD>襣<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||||
mov ah, bh
|
||||
out dx, ax
|
||||
|
||||
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 edx
|
||||
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
|
||||
cli
|
||||
; <20>⪫<EFBFBD><E2AAAB><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||||
in al, 61h
|
||||
and al, 0FCh
|
||||
out 61h, al
|
||||
pop ds
|
||||
pop es
|
||||
pop edx
|
||||
pop ebx
|
||||
pop eax
|
||||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> ॠ<><E0A5A0><EFBFBD><EFBFBD><EFBFBD> ०<><E0A5A6>
|
||||
|
||||
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