Tvůrce webu je i pro tebe! Postav třeba web. Bez grafika. Bez kodéra. Hned.
wz

Obsah / Ovladače / SYS

Zdrojový kód: INCLUDE\DRIVERS\SYSTEM\SYS.INC, DRIVERS\SYSTEM\SYS.ASM


SYS - Jádro systému

Jádro systému je pouze pomocné virtuální zařízení a slouží k evidenci zdrojů popužívaných jádrem systému.


; ------------- SYS device descriptor

struc		DEVSYS

		resb	DEV_size	; general device
endstruc

%define DEV_SYS_ID "SYS1"		; SYS interface identifier

; ------------- Initialized SYS device descriptor
; %1 = flags, %2 = major version, %3 = minor version,
; %4 = build version, %5 = name prefix ###

%macro		DEVICESYS 5

		DEVICE	DEVCLASS_SYS,DEV_SYS_SYS,0,%1,%2,%3,%4,%5

%endmacro

Struktura DEVSYS je popisovač ovladače jádra systému. Struktura je odvozena od všeobecného zařízení DEV a neobsahuje žádné doplňující položky.

Makro DEVICESYS je inicializovaný popisovač ovladače jádra systému. Makro má 5 parametrů:

%1 - příznaky

%2 - hlavní číslo verze ovladače

%3 - vedlejší číslo verze ovladače

%4 - číslo překladu ovladače

%5 - prefix jména ### (v současnosti nepoužito)


%define		SYSDevVendor  DefaultVendor

SYSDev:		DEVICESYS DEV_STATIC,1,0,0,SYSDev

SYSDevRes1:	DEVRESOURCE SYSDevRes2,SYSDevRes0,0,0fffh, \
		DEVRES_MEM,DEVRES_STATIC,SYSDevRes1Name

SYSDevRes2:	DEVRESOURCE SYSDevRes3,SYSDevRes1,Code16Start-SYSTEM_ADDR,\
		Code16End-1-SYSTEM_ADDR,DEVRES_MEM,DEVRES_STATIC,SYSDevRes2Name

SYSDevRes3:	DEVRESOURCE SYSDevRes4,SYSDevRes2,Data16Start-SYSTEM_ADDR,\
		Data16End-1-SYSTEM_ADDR,DEVRES_MEM,DEVRES_STATIC,SYSDevRes3Name

SYSDevRes4:	DEVRESOURCE SYSDevRes5,SYSDevRes3,CodeStart-SYSTEM_ADDR,\
		CodeEnd-1-SYSTEM_ADDR,DEVRES_MEM,DEVRES_STATIC,SYSDevRes4Name

SYSDevRes5:	DEVRESOURCE SYSDevRes6,SYSDevRes4,DataStart-SYSTEM_ADDR,\
		DataEnd-1-SYSTEM_ADDR,DEVRES_MEM,DEVRES_STATIC,SYSDevRes5Name

SYSDevRes6:	DEVRESOURCE SYSDevRes7,SYSDevRes5,ConstStart-SYSTEM_ADDR,\
		ConstEnd-1-SYSTEM_ADDR,DEVRES_MEM,DEVRES_STATIC,SYSDevRes6Name

SYSDevRes7:	DEVRESOURCE SYSDevRes8,SYSDevRes6,FixStart-SYSTEM_ADDR,\
		FixEnd-1-SYSTEM_ADDR,DEVRES_MEM,DEVRES_STATIC,SYSDevRes7Name

SYSDevRes8:	DEVRESOURCE SYSDevRes9,SYSDevRes7,ExcStart-SYSTEM_ADDR,\
		ExcEnd-1-SYSTEM_ADDR,DEVRES_MEM,DEVRES_STATIC,SYSDevRes8Name

SYSDevRes9:	DEVRESOURCE SYSDevRes10,SYSDevRes8,Exc2Start-SYSTEM_ADDR,\
		Exc2End-1-SYSTEM_ADDR,DEVRES_MEM,DEVRES_STATIC,SYSDevRes9Name

SYSDevRes10:	DEVRESOURCE SYSDevResN,SYSDevRes9,BSS16Start-SYSTEM_ADDR,\
		BSS16End-1-SYSTEM_ADDR,DEVRES_MEM,DEVRES_STATIC,SYSDevRes10Name

SYSDevResN:	DEVRESOURCE SYSDevRes0,SYSDevRes10,BSSStart-SYSTEM_ADDR,\
		BSSEnd-1-SYSTEM_ADDR,DEVRES_MEM,DEVRES_STATIC,SYSDevRes11Name

SYSDevice:	dd	SYSDev			; current system device descr.

SYSDevName:	CTEXTDATA 'kernel'
SYSDevShort:	CTEXTDATA 'System kernel'

SYSDevFull:	LANGTEXTSTR SYSDevFullEN,LANG_ENGLISH,SUBLANG_DEFAULT,2
 		LANGTEXTSTR SYSDevFullCZ,LANG_CZECH,  SUBLANG_DEFAULT,0

SYSDevFullEN:	CTEXTDATA 'System kernel'
SYSDevFullCZ:	CTEXTDATA 'J',0c3h,0a1h,'dro syst',0c3h,0a9h,'mu'

SYSDevInt:	dd	DEV_GEN_ID
		dd	DEV_SYS_ID
		dd	DEV_NUL_ID

SYSDevRes1Name:	CTEXTDATA 'null page'
SYSDevRes2Name:	CTEXTDATA 'code16'
SYSDevRes3Name:	CTEXTDATA 'data16'
SYSDevRes4Name:	CTEXTDATA 'code32'
SYSDevRes5Name:	CTEXTDATA 'data32'
SYSDevRes6Name:	CTEXTDATA 'const'
SYSDevRes7Name:	CTEXTDATA 'fixup'
SYSDevRes8Name:	CTEXTDATA 'except'
SYSDevRes9Name:	CTEXTDATA 'except2'
SYSDevRes10Name:CTEXTDATA 'bss16'
SYSDevRes11Name:CTEXTDATA 'bss32'

SYSDev je struktura popisovače jádra systému. V proměnné SYSDevice je uložen ukazatel na aktuální ovladač jádra systému - při instalaci nového ovladače je tento ukazatel přepsán novým ukazatelem. Popisovač eviduje zdroje:

- "nul page" je rezervovaná stránka paměti v rozsahu 0 až 0xFFF (tj. první 4 KB paměti), slouží k zachytávání výjimek paměti

- "code16" je 16-bitový kód jádra, používá se během inicializace jádra systému v reálném módu

- "data16" je 16-bitová oblast dat, je používaná kódem v reálném módu během zavádění jádra systému

- "code32" je hlavní výkonný 32-bitový kód jádra

- "data32" je 32-bitová oblast dat používaná 32-bitovým kódem jádra

- "const" je datová oblast s konstantními (neměnnými) daty a tabulkami, je používaná 32-bitovým kódem jádra

- "fixup" je systémový kód obsluh zachytávání výjimek

- "except" jsou tabulky adres výjimek v kódu jádra

- "except2" jsou tabulky adres obsluh zachytávání výjimek

- "bss16" je 16-bitová oblast neinicializovaných dat

- "bss32" je 32-bitová oblast neinicializovaných dat (ležící nad 1 MB základní paměti)


; -----------------------------------------------------------------------------
;                           Install SYS device
; -----------------------------------------------------------------------------
; OUTPUT:	CY = error
; -----------------------------------------------------------------------------

; ------------- Push registers

SYSInstall:	push	ebx		; push EBX
		push	ecx		; push ECX

; ------------- Register IRQ device

		mov	ebx,SYSDev	; EBX <- device descriptor
		xor	ecx,ecx		; ECX <- 0, no parent device
		call	DevRegister	; register device

; ------------- Pop registers

		pop	ecx		; pop ECX
		pop	ebx		; pop EBX
		ret

Funkce SYSInstall nainstaluje standardní ovladač jádra systému - zaregistruje ovladač do systému. V případě chyby je navrácen příznak chyby CY.


; -----------------------------------------------------------------------------
;                           Uninstall SYS device
; -----------------------------------------------------------------------------
; OUTPUT:	CY = error
; -----------------------------------------------------------------------------

; ------------- Push registers

SYSUninstall:	push	ebx		; push EBX

; ------------- Unregister SYS device

		mov	ebx,SYSDev	; EBX <- device descriptor
		call	DevUnregister	; unregister device

; ------------- Pop registers

		pop	ebx		; pop EBX
		ret

Funkce SYSUninstall odinstaluje standardní ovladač jádra systému - odregistruje ovladač ze systému. V případě chyby je navrácen příznak chyby CY. Funkce nezajistí instalaci náhradního ovladače jádra systému.


; -----------------------------------------------------------------------------
;                   Driver function: Initialize SYS device
; -----------------------------------------------------------------------------
; INPUT:	EBX = device descriptor DEVSYS
; OUTPUT:	CY = error
; -----------------------------------------------------------------------------

SYSDevInit:	clc			; clear error flag
		ret

; -----------------------------------------------------------------------------
;                   Driver function: Deinitialize SYS device
; -----------------------------------------------------------------------------
; INPUT:	EBX = device descriptor DEVSYS
; OUTPUT:	CY = error
; -----------------------------------------------------------------------------

SYSDevDeinit:	clc			; clear error flag
		ret

Funkce SYSDevInit inicializuje ovladač jádra sytému, jehož popisovač je funkci předán v registru EBX. V případě chyby navrátí funkce příznak chyby CY (v současnosti vrací vždy NC).

Funkce SYSDevDeinit deinicializuje ovladač jádra systému, jehož popisovač je funkci předán v registru EBX. V případě chyby navrátí funkce příznak chyby CY (v současnosti vrací vždy NC).


Obsah / Ovladače / SYS