nxos/SHELL.ASM
2014-01-27 10:02:18 +01:00

330 lines
No EOL
4.9 KiB
NASM
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

;NXOS shell
;----------
;Written by: Alberto Venturini (Alb) - 2001
;Email address: -albe-@libero.it
org 0h
cld
Main1:
; mov si,offset Prompt ;shows the prompt
; mov ah,01h
; mov bl,07h
; int 24h
call ShowPrompt
mov di,offset Command
xor cx,cx
GetCommand: ;Get a string from the keyboard
mov si,offset Command
mov ah,07h
int 25h
dec si
ToUpCase: ;Turns everything upcase
inc si
mov al,ds:[si]
cmp al,13
je EndCommand
cmp al,90
jbe ToUpCase
sub al,32
mov ds:[si],al
jmp ToUpCase
EndCommand:
test cx,cx ;If only CR was pressed, just re-write the prompt
jz Main1
push cx
mov di,offset Command
Test4Extension: ;tests if file extension is available
mov al,es:[di]
cmp al,'.'
je ExtensionOk2
inc di
dec cx
jnz Test4Extension
NoExtension: ;there's no extension...assume it's an internal
;shell command
pop cx
mov di,offset Command
mov cx,3
mov si,offset ClsCmd
push di
rep cmpsb
pop di
je ShellCommand_Cls
mov cx,4
mov si,offset HelpCmd
push di
rep cmpsb
pop di
je ShellCommand_Help
mov cx,8
mov si,offset ShutdownCmd
push di
rep cmpsb
pop di
je ShellCommand_Shutdown
mov cx,2
mov si,offset CdCmd
push di
rep cmpsb
pop di
je ShellCommand_Cd
mov ah,01h
mov si,offset Error3
mov bl,7
int 24h
jmp ClearCommandBuffer
ExtensionOk2:
jmp ExtensionOk
ShellCommand_Cls: ;executes the "CLS" command
mov ah,04h
int 24h
jmp ClearCommandBuffer
ShellCommand_Cd:
mov si,offset CiaoDir
mov ah,02h
int 22h
jmp ClearCommandBuffer
CiaoDir db 'CIAO ',0
ShellCommand_Help:
mov si,offset HelpTxt
mov ah,01h
mov bl,7
int 24h
jmp ClearCommandBuffer
ShellCommand_ShutDown:
mov al,13
mov ah,00h
int 24h
mov al,10
int 24h
xor ax,ax
int 21h
ExtensionOk: ;there's the extension
pop cx
StoreExtension: ;store the extension in a buffer ("Extension")
push di
inc di
mov si,di
mov di,offset Extension
movsb
movsb
movsb
mov di,offset Parameters ;store the parameters in a buffer
mov cx,90
inc si
rep movsb
pop di
jmp ExecuteProgram
push di
sub di,offset Command
cmp di,8
jb StoreExtension2
pop di ;file name must be <= 8
mov di,offset Command
add di,8
jmp StoreExtension3
StoreExtension2:
mov cx,8
sub cx,di
mov al,' '
pop di
rep stosb
StoreExtension3:
mov si,offset Extension
movsb
movsb
movsb
ExecuteProgram:
mov di,offset Extension
mov si,offset BinExtension
mov cx,3
push di
rep cmpsb ;tests if the extension is "BIN"
pop di
je ExecuteBinProgram
mov si,offset ComExtension
mov cx,3
push di
rep cmpsb
pop di
je ExecuteComProgram
mov si,offset ExeExtension
mov cx,3
push di
rep cmpsb
pop di
je ExecuteExeProgram
mov ah,01h
mov si,offset Error2
mov bl,7
int 24h
jmp Main1
ExecuteBinProgram:
push es
mov si,offset Command
mov ah,00h
int 20h
test dx,dx
jz FileNotFound
mov bl,0
mov ah,01h
int 20h
pop es
jmp ClearCommandBuffer
ExecuteComProgram:
push es
mov si,offset Command
mov bx,offset Parameters
mov ah,07h
int 20h
test dx,dx
jz FileNotFound
mov bl,0
mov ah,01h
int 20h
pop es
jmp ClearCommandBuffer
ExecuteExeProgram:
mov si,offset Command
mov ah,08h
int 20h
jmp ClearCommandBuffer
FileNotFound:
pop es
mov si,offset Error1
mov ah,01h
mov bl,7
int 24h
ClearCommandBuffer:
mov di,offset Command
mov al,' '
mov cx,95
ClearCommandBuffer2:
mov byte ptr cs:[di],al
inc di
loop ClearCommandBuffer2
jmp Main1
;------------------------------------------------------------------------------
ShowPrompt:
mov si,offset Prompt
mov ah,01h
mov bl,7
int 24h
mov al,'\'
mov ah,00h
int 24h
; push ds
; push es
; push di
; mov ah,05h ;get current dir name in ES:[DI]
; int 22h
;
; push es
; pop ds
; mov si,di
; mov ah,01h
; int 24h
;
; pop di
; pop es
; pop ds
ret
;------------------------------------------------------------------------------
Command db 100 dup (32)
Prompt db 13,10,'Ready:',0
Error1 db 13,10,'File not found',13,10,0
Error2 db 13,10,'Invalid file name',13,10,0
Error3 db 13,10,'Invalid command',13,10,0
NextLine db 13,10,0
Extension db 3 dup (?)
BinExtension db 'BIN',0
ComExtension db 'COM',0
ExeExtension db 'EXE',0
ClsCmd db 'CLS'
CdCmd db 'CD'
HelpCmd db 'HELP'
ShutdownCmd db 'SHUTDOWN'
;Help text
HelpTxt db 13,10,'NXOS shell',13,10
db '-------------',13,10
db 13,10
db 'How to use this shell:',13,10
db 'if you want to execute an external program, just type the',13,10
db 'file name, with his extension.',13,10
db 13,10
db 'Available shell commands:',13,10
db ' CLS: clears the screen',13,10
db ' HELP: shows this screen',13,10
db ' SHUTDOWN: reboots or shutdowns the system',13,10,0
Parameters: ;where to store the parameters