?? sys32.inc
字號(hào):
mov eax,[0x3000]
mov [tasknum+ecx],eax
mov eax,[ebx]
mov [reg1+ecx],eax
mov eax,[ebx+4]
mov [reg2+ecx],eax
mov ecx,8
imul ecx,[esp]
mov eax,[tss0sys_l+ecx]
mov [ebx],eax
mov eax,[tss0sys_l+ecx+4]
mov [ebx+4],eax
call save_registers
mov esi,[0x3000]
imul esi,tss_step
add esi,tss_data
mov eax,[esi+l.eax-tss_sceleton]
mov ebx,[esi+l.ebx-tss_sceleton]
mov ecx,[esi+l.ecx-tss_sceleton]
pusha
mov edi,[esi+l.eax-tss_sceleton]
mov eax,[esi+l.ebx-tss_sceleton]
mov ebx,[esi+l.ecx-tss_sceleton]
mov ecx,[esi+l.edx-tss_sceleton]
mov edx,[esi+l.esi-tss_sceleton]
mov esi,[esi+l.edi-tss_sceleton]
sti
push eax
and edi,0xff
call dword [servetable+edi*4]
pop eax
cli
popa
mov esi,[0x3000]
imul esi,tss_step
add esi,tss_data
mov [esi+l.eax-tss_sceleton],eax
mov [esi+l.ebx-tss_sceleton],ebx
mov [esi+l.ecx-tss_sceleton],ecx
mov ebx,[0x3000]
shl ebx,3
add ebx,tss0_l
mov ecx,[0x3000]
shl ecx,2
mov eax,[reg1+ecx]
mov [ebx],eax
mov eax,[reg2+ecx]
mov [ebx+4],eax
mov edi,[0x3000] ; no syscall interrupt in use anymore
imul edi,256
mov [edi+0x80000+0xB0],eax
mov [tasknum+ecx],dword 0
mov edi,8
pop eax ; this handler
mov [usedi40+eax],byte 0
imul edi,eax
mov [edi+tss0sys_l +5], word 01010000b *256 +11101001b
mov ebx,[0x3000]
shl bx,3
add bx,tss0t
mov [tss_s3],bx
db 0xea
tss_t3 dd 0
tss_s3 dw tss0t
jmp i40
tasknum: times (max_processes+10) dd 0,0
reg1: times (max_processes+10) dd 0,0
reg2: times (max_processes+10) dd 0,0
usedi40: times (max_processes+10) db 0,0
schd dd 0x0
save_registers:
mov esi,[0x3000]
imul esi,tss_step
add esi,tss_data
mov eax,[esi+l.eax-tss_sceleton]
mov ebx,[esi+l.ebx-tss_sceleton]
mov ecx,[esi+l.ecx-tss_sceleton]
mov edx,[esi+l.edx-tss_sceleton]
mov edi,[esi+l.edi-tss_sceleton]
mov ebp,[esi+l.ebp-tss_sceleton]
mov esi,[esi+l.esi-tss_sceleton]
pusha
mov esi,[0x3010]
mov eax,[esi+0x4]
mov esi,esp
inc [save_syscall_count]
mov edi,[save_syscall_count]
and edi,15
shl edi,6
add edi,save_syscall_data+32
mov [edi-32],eax
mov ecx,32 / 4
cld
rep movsd
popa
ret
save_syscall_count dd 0x0
save_syscall_data: times 64*16 dd 0x0
align 4
servetable:
dd sys_drawwindow ; 0-DrawWindow
dd syscall_setpixel ; 1-SetPixel
dd sys_getkey ; 2-GetKey
dd sys_clock ; 3-GetTime
dd syscall_writetext ; 4-WriteText
dd delay_hs ; 5-DelayHs
dd syscall_openramdiskfile ; 6-OpenRamdiskFile
dd syscall_putimage ; 7-PutImage
dd sys_button ; 8-DefineButton
dd sys_cpuusage ; 9-GetProcessInfo
dd sys_waitforevent ; 10-WaitForEvent
dd sys_getevent ; 11-CheckForEvent
dd sys_redrawstat ; 12-BeginDraw and EndDraw
dd syscall_drawrect ; 13-DrawRect
dd syscall_getscreensize ; 14-GetScreenSize
dd sys_background ; 15-bgr
dd sys_cachetodiskette ; 16-FlushFloppyCache
dd sys_getbutton ; 17-GetButton
dd syscall_system ; 18-Shutdown,KillApp,WindowActivate
dd syscall_startapp ; 19-StartApp
dd sys_midi ; 20-ResetMidi and OutputMidi
dd sys_setup ; 21-SetMidiBase,SetKeymap,SetShiftKeymap,.
dd undefined_syscall ; 22-not used
dd sys_wait_event_timeout ; 23-TimeOutWaitForEvent
dd syscall_cdaudio ; 24-PlayCdTrack,StopCd and GetCdPlaylist
dd sys_sb16 ; 25-SetSb16
dd sys_getsetup ; 26-GetMidiBase,GetKeymap,GetShiftKeymap,.
dd sys_wss ; 27-SetWssMainVol and SetWssCdVol
dd sys_sb16II ; 28-SetSb16
dd sys_date ; 29-GetDate
dd syscall_readhd ; 30-ReadHd
dd syscall_starthdapp ; 31-StartHdApp
dd syscall_delramdiskfile ; 32-DelRamdiskFile
dd syscall_writeramdiskfile; 33-WriteRamdiskFile
dd read_floppy_file ; 34-ReadFloppyDrive
dd syscall_getpixel ; 35-GetPixel
dd syscall_readstring ; 36-ReadString (not yet ready)
dd readmousepos ; 37-GetMousePosition_ScreenRelative,.
dd syscall_drawline ; 38-DrawLine
dd sys_getbackground ; 39-GetBackgroundSize,ReadBgrData,.
dd set_app_param ; 40-WantEvents
dd syscall_getirqowner ; 41-GetIrqOwner
dd get_irq_data ; 42-ReadIrqData
dd sys_outport ; 43-SendDeviceData
dd sys_programirq ; 44-ProgramIrqs
dd reserve_free_irq ; 45-ReserveIrq and FreeIrq
dd syscall_reserveportarea ; 46-ReservePortArea and FreePortArea
dd display_number ; 47-WriteNum
dd display_settings ; 48-SetRedrawType and SetButtonType
dd syscall_appints ; 49-AppInts
dd random_shaped_window ; 50-Window shape & scale
dd syscall_threads ; 51-Threads
dd stack_driver_stat ; 52-Stack driver status
dd socket ; 53-Socket interface
dd user_events ; 54-User events
dd sound_interface ; 55-Sound interface
dd write_to_hd ; 56-Write a file to hd
dd delete_from_hd ; 57-Delete a file from hd
dd file_system ; 58-Common file system interface
dd sys_trace ; 59-System call trace
dd sys_ipc ; 60-Inter Process Communication
dd sys_gs ; 61-Direct graphics access
dd sys_pci ; 62-PCI functions
dd sys_msg_board ; 63-System message board
dd sys_resize_app_memory ; 64-Resize application memory usage
dd undefined_syscall ; 65-UTF
dd sys_process_def ; 66-Process definitions - keyboard
dd sys_window_move ; 67-Window move or resize
times (113-67-1) dd undefined_syscall
dd sys_scroll ; 113-Srolls
times 255 - ( ($-servetable) /4 ) dd undefined_syscall
dd sys_end ; -1-end application
tss_sceleton:
l.back dw 0,0
l.esp0 dd 0
l.ss0 dw 0,0
l.esp1 dd 0
l.ss1 dw 0,0
l.esp2 dd 0
l.ss2 dw 0,0
l.cr3 dd 0
l.eip dd 0
l.eflags dd 0
l.eax dd 0
l.ecx dd 0
l.edx dd 0
l.ebx dd 0
l.esp dd 0
l.ebp dd 0
l.esi dd 0
l.edi dd 0
l.es dw 0,0
l.cs dw 0,0
l.ss dw 0,0
l.ds dw 0,0
l.fs dw 0,0
l.gs dw 0,0
l.ldt dw 0,0
l.trap dw 0
l.io dw 0
s0:
cli
mov [error_interrupt],0x0
mov [error_interrupt_entry],dword s0
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
s1:
cli
mov [error_interrupt],0x1
mov [error_interrupt_entry],dword s1
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
s2:
cli
mov [error_interrupt],0x2
mov [error_interrupt_entry],dword s2
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
s3:
cli
mov [error_interrupt],0x3
mov [error_interrupt_entry],dword s3
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
s4:
cli
mov [error_interrupt],0x4
mov [error_interrupt_entry],dword s4
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
s5:
cli
mov [error_interrupt],0x5
mov [error_interrupt_entry],dword s5
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
s6:
cli
mov [error_interrupt],0x6
mov [error_interrupt_entry],dword s6
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
prev_user_of_fpu dd 0x1 ; set to OS
s7:
mov edi,7
imul edi,8
mov [edi+gdts+ tss0i +5], word 01010000b *256 +11101001b
mov edi,[0x3000]
imul edi,8
mov [edi+gdts+ tss0 +5], word 01010000b *256 +11101001b
mov esi,[0x3000]
imul esi,tss_step
add esi,tss_data
mov edi,fpu_tss
mov ecx,120
cld
rep movsb
mov esi,[0x3000]
imul esi,tss_step
add esi,tss_data
mov word [esi+l.cs-tss_sceleton],int_code
mov word [esi+l.ss-tss_sceleton],int_data
mov word [esi+l.ds-tss_sceleton],int_data
mov word [esi+l.es-tss_sceleton],int_data
mov word [esi+l.fs-tss_sceleton],int_data
mov word [esi+l.gs-tss_sceleton],int_data
mov dword [esi+l.esp-tss_sceleton],fpu_stack+4*8
mov dword [esi+l.eip-tss_sceleton],fpu_handler
mov dword [esi+l.eflags-tss_sceleton],0x11002
mov ebx,[0x3000]
shl bx,3
add bx,tss0t
mov [tss_s7],bx
db 0xea
dd 0
tss_s7 dw tss0t
jmp s7
fpu_tss: times 128 db 0
fpu_handler:
clts
mov eax,[prev_user_of_fpu]
shl eax,8
add eax,0x80000+0x10
fsave [eax]
mov eax,[0x3000]
mov [prev_user_of_fpu],eax
shl eax,8
add eax,0x80000
cmp [eax+0x7f],byte 0
je bs7_first_fpu
frstor [eax+0x10]
bs7_first_fpu:
mov [eax+0x7f],byte 1
movzx eax,word [fpu_tss+l.ss-tss_sceleton] ; push ss
push eax
mov eax,[fpu_tss+l.esp-tss_sceleton] ; push esp
push eax
mov eax,[fpu_tss+l.eflags-tss_sceleton] ; push eflags
push eax
movzx eax,word [fpu_tss+l.cs-tss_sceleton] ; push cs
push eax
mov eax,[fpu_tss+l.eip-tss_sceleton] ; push eip
push eax
push dword [fpu_tss+l.eax-tss_sceleton]
mov ax,[fpu_tss+l.es-tss_sceleton]
mov es,ax
mov ax,[fpu_tss+l.fs-tss_sceleton]
mov fs,ax
mov ax,[fpu_tss+l.gs-tss_sceleton]
mov gs,ax
mov ax,[fpu_tss+l.ds-tss_sceleton]
mov ds,ax
pop eax
iret
fpu_stack: times 10*4 db 0
s8:
cli
mov [error_interrupt],0x8
mov [error_interrupt_entry],dword s8
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
s9:
cli
mov [error_interrupt],0x9
mov [error_interrupt_entry],dword s9
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
sa:
cli
mov [error_interrupt],0xa
mov [error_interrupt_entry],dword sa
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
sb:
cli
mov [error_interrupt],0xb
mov [error_interrupt_entry],dword sb
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
sc:
cli
mov [error_interrupt],0xc
mov [error_interrupt_entry],dword sc
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
sd:
cli
mov [error_interrupt],0xd
mov [error_interrupt_entry],dword sd
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
se:
cli
mov [error_interrupt],0xe
mov [error_interrupt_entry],dword se
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
sf:
cli
mov [error_interrupt],0xf
mov [error_interrupt_entry],dword sf
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
s10:
cli
mov [error_interrupt],0x10
mov [error_interrupt_entry],dword s10
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
s11:
cli
mov [error_interrupt],0x11
mov [error_interrupt_entry],dword s11
call show_error_parameters
mov edx,[0x3010]
mov [edx+0xa],byte 4
jmp change_task
writehex:
pusha
mov ecx,eax
mov ax,word [printerrorat]
shl eax,16
mov ax,[esp+32+4]
sub ax,60
mov edx,1
mov esi,8
mov ebx,0xffffff
whl1:
push ecx
and ecx,0xf
add ecx,hexletters
mov edi,1
mov cl,[ecx]
mov edi,[write_error_to]
mov [edi],cl
dec [write_error_to]
pop ecx
shr ecx,4
sub eax,6*65536
dec esi
jnz whl1
popa
ret
hexletters db '0123456789ABCDEF'
error_interrupt dd -1
error_interrupt_entry dd -1
printerrorat dd 300
process_error db 'Kernel : Process - Forced terminate INT: 00000000',13,10,0
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -