250 lines
No EOL
4.6 KiB
NASM
250 lines
No EOL
4.6 KiB
NASM
;NXOS kernel
|
||
;-----------
|
||
;Written by: Alberto Venturini (Alb‚) - 2000/2001
|
||
;Email address: -albe-@libero.it
|
||
;------------------------------------------------
|
||
;
|
||
;
|
||
;Sorry, but comments are in italian... :(
|
||
|
||
org 0h
|
||
|
||
InitSystem:
|
||
|
||
;Inizializzo i segmenti
|
||
mov ax,1000h
|
||
mov ss,ax
|
||
mov sp,0fffeh
|
||
mov ds,ax
|
||
|
||
mov ax,0003h
|
||
int 10h
|
||
mov si,offset InitSystemMsg
|
||
call WriteSimple
|
||
|
||
;Inizializzo gli "exception handlers"
|
||
call InstallExceptionHandlers
|
||
|
||
;Inizializzo gli interrupt per le chiamate di sistema
|
||
call InstallInterrupt
|
||
|
||
;Inizializzo la Fat
|
||
mov si,offset InitFat
|
||
call WriteSimple
|
||
call Fat12_FatInit
|
||
|
||
;Inizializzo la gestione della memoria
|
||
mov si,offset InitMem
|
||
call WriteSimple
|
||
call MemInit
|
||
|
||
;Inizializzo la gestione dei processi multitasking
|
||
mov si,offset InitMt
|
||
call WriteSimple
|
||
call StartMultiTasking
|
||
|
||
mov al,13
|
||
mov ah,0eh
|
||
int 10h
|
||
mov al,10
|
||
int 10h
|
||
|
||
;Installo il driver video
|
||
mov si,offset InitVideoDrv
|
||
call WriteSimple
|
||
|
||
mov si,offset VideoDrv
|
||
call LoadProgram
|
||
jc KeyboardInstall
|
||
mov bl,1
|
||
call RunProcess
|
||
|
||
KeyboardInstall:
|
||
;Installo il driver della tastiera
|
||
mov si,offset InitKeyboardDrv
|
||
call WriteSimple
|
||
|
||
mov si,offset KeyboardDrv
|
||
call LoadProgram
|
||
jc BigMemInstall
|
||
mov bl,1
|
||
call RunProcess
|
||
|
||
BigMemInstall:
|
||
;Installo il driver per la Real mode 32-bit
|
||
mov si,offset InitBigMemDrv
|
||
call WriteSimple
|
||
|
||
mov si,offset BigMemDrv
|
||
call LoadProgram
|
||
jc ShellInstall
|
||
mov bl,1
|
||
call RunProcess
|
||
|
||
ShellInstall:
|
||
mov si,offset ContinueMsg
|
||
call WriteSimple
|
||
|
||
mov ah,00h
|
||
int 25h
|
||
|
||
; [..]
|
||
|
||
mov si,offset InitShell
|
||
call WriteSimple
|
||
|
||
; mov ah,00h
|
||
; int 25h
|
||
|
||
mov si,offset Shell
|
||
call LoadProgram
|
||
jc ErrorNoShell
|
||
call RunProcess
|
||
|
||
mov si,1
|
||
mov ah,02h
|
||
int 24h
|
||
|
||
InitSystem_End:
|
||
mov ah,02h
|
||
mov bl,1
|
||
int 20h
|
||
|
||
ErrorNoShell:
|
||
mov si,offset ErrorShell
|
||
call WriteSimple
|
||
|
||
mov ah,00h
|
||
int 25h
|
||
|
||
jmp EndSystem
|
||
|
||
;------------------------------------------------------------------------------
|
||
|
||
EndSystem:
|
||
call EndMultiTasking
|
||
|
||
mov ah,01h ;Termina la Real Mode a 32 bit.
|
||
int 2fh
|
||
|
||
mov ah,04h
|
||
int 25h ;Termina il driver della tastiera
|
||
|
||
mov si,offset ShutDown
|
||
|
||
EndSystem_WriteMsg:
|
||
call WriteSimple
|
||
mov ah,00h
|
||
int 16h
|
||
|
||
cmp al,'R'
|
||
je EndSystem_Reboot
|
||
cmp al,'r'
|
||
je EndSystem_Reboot
|
||
cmp al,'S'
|
||
je EndSystem_ShutDown
|
||
cmp al,'s'
|
||
je EndSystem_ShutDown
|
||
|
||
jmp EndSystem_WriteMsg
|
||
|
||
EndSystem_Reboot:
|
||
int 19h
|
||
|
||
EndSystem_ShutDown:
|
||
mov ax,5300h
|
||
xor bx, bx
|
||
int 15h
|
||
mov ax,5304h
|
||
xor bx, bx
|
||
int 15h
|
||
mov ax,5301h
|
||
xor bx, bx
|
||
int 15h
|
||
mov ax,5307h
|
||
mov bx,1
|
||
mov cx,3
|
||
int 15h
|
||
|
||
;------------------------------------------------------------------------------
|
||
|
||
SetError:
|
||
;input AL=codice dell'errore
|
||
mov cs:[SystemError],al
|
||
ret
|
||
|
||
;------------------------------------------------------------------------------
|
||
|
||
GetError:
|
||
;output AL=codice dell'errore
|
||
mov al,cs:[SystemError]
|
||
ret
|
||
|
||
;------------------------------------------------------------------------------
|
||
|
||
WriteSimple:
|
||
;input CS:SI --> indirizzo della stringa
|
||
push ax
|
||
push bx
|
||
push si
|
||
|
||
mov ah,0eh
|
||
mov bx,7
|
||
WriteSimple_1:
|
||
mov al,byte ptr cs:[si]
|
||
test al,al
|
||
jz WriteSimple_End
|
||
int 10h
|
||
inc si
|
||
jmp WriteSimple_1
|
||
|
||
WriteSimple_End:
|
||
pop si
|
||
pop bx
|
||
pop ax
|
||
|
||
ret
|
||
|
||
;------------------------------------------------------------------------------
|
||
|
||
include Fat12d.asm
|
||
include MemManag.asm
|
||
include Processi.asm
|
||
include Interrpt.asm
|
||
include Except.asm
|
||
include LoadExeC.asm
|
||
|
||
;------------------------------------------------------------------------------
|
||
;Kernel Data
|
||
|
||
;Messaggi
|
||
InitSystemMsg db 'NXOS version 0.3.3',13,10,0
|
||
InitFat db 'Initializing filesystem: 12-bit Fat...',13,10,0
|
||
InitMem db 'Initializing 16-bit memory management...',13,10,0
|
||
InitMt db 'Initializing process manager (multitasker)...',13,10,0
|
||
InitVideoDrv db 'Loading video driver (video.drv)...',13,10,0
|
||
InitKeyboardDrv db 'Loading keyboard driver (keyboard.drv)...',13,10,0
|
||
InitBigMemDrv db 'Loading 32-bit real mode driver (bigmem.drv)...',13,10,0
|
||
InitShell db 'Loading shell (shell.bin)...',13,10,0
|
||
ErrorShell db 'Error - file shell.bin not found.',13,10,0
|
||
|
||
ContinueMsg db 'Press any key to continue...',13,10,0
|
||
|
||
ShutDown db 'Do you want to (R)eboot or (S)hutdown?',0
|
||
|
||
;Shell db 'SHELL BIN'
|
||
|
||
;VideoDrv db 'VIDEO DRV'
|
||
;KeyboardDrv db 'KEYBOARDDRV'
|
||
|
||
;BigMemDrv db 'BIGMEM DRV'
|
||
|
||
Shell db 'SHELL.BIN'
|
||
VideoDrv db 'VIDEO.DRV'
|
||
KeyboardDrv db 'KEYBOARD.DRV'
|
||
|
||
BigMemDrv db 'BIGMEM.DRV'
|
||
|
||
;------------------------------------------------------------------------------
|
||
|
||
include Sysmem.asm |