⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shell.inc

📁 一个从底层支持中文显示的操作系统的源代码,以及目标IMG文件,可在VMWare下运行.
💻 INC
字号:
;===========================================================
;
;	WarmOS
;	by HotHeart(xujiwei)
;	Email: vipxjw@163.com
;
;	Shell
;	user shell
;
;	History:
;	2005.08.29	finished base shell
;	2005.08.28	finished backspace
;	2005.08.28	file created
;
;===========================================================

;===========================================================
;	shell data
;===========================================================
align	4
CMDLINE	 times	128	db	0
CMDLINE_LEN			dw	0
CMDLINE_PARAM		dw	0

;===========================================================
;	shell
;===========================================================
align	4
szPrompt	db	'A:\>',0
Shell:
	.printf_cursor:
		mov		ax,1
		mov		bx,'_'
		int		0x40
		call	Backspace
	.getchar:
		mov		ax,5
		int		0x40
	.chk_key:
		cmp		al,13
		je		.is_13
		cmp		al,8
		je		.is_8
	.chk_pos:
		push	ax
		mov		ax,6
		int		0x40
		mov		bx,ax
		pop		ax
		cmp		bh,78
		jge		Shell
	.echo:
		mov		bx,ax
		mov		ax,1
		int		0x40
	.put2buf:
		mov		ax,bx
		mov		bx,[CMDLINE_LEN]
		add		bx,CMDLINE
		cmp		ah,0
		jne		.put_2b
		mov		[bx],al
		mov		[bx+1],byte 0
		inc		word[CMDLINE_LEN]
		jmp		Shell
	.put_2b:
		mov		[bx],ax
		mov		[bx+1],byte 0
		add		word[CMDLINE_LEN],2
		jmp		Shell
	.is_13:
		mov		ax,1
		mov		bx,0
		int		0x40
		mov		ax,1
		mov		bx,13
		int		0x40
		cmp		[CMDLINE],byte 0
		je		.is_13_done
	.exec:
		call	ExecuteCommand			; execute the command
	.exec_done:
		mov		ax,1
		mov		bx,13
		int		0x40
	.is_13_done:
		mov		ax,0
		mov		bx,szPrompt
		int		0x40
		mov		di,CMDLINE
		mov		cx,128/2
		xor		ax,ax
		cld
		rep		stosw
		mov		word[CMDLINE_LEN],0
		jmp		Shell
	.is_8:
		mov		ax,1
		mov		bx,' '
		int		0x40
		call	Backspace
		call	Backspace
		mov		ax,1
		mov		bx,' '
		int		0x40
		call	Backspace
		cmp		[CMDLINE_LEN],word 0
		je		.is_8_done
		dec		word[CMDLINE_LEN]
	.is_8_done:
		mov		bx,[CMDLINE_LEN]
		add		bx,CMDLINE
		mov		[bx],byte 0
		jmp		Shell
	.done:
		ret

;===========================================================
;	execute
;===========================================================
align	4
bufFileName			times	12 db	' '
szUnknownCommand	db	'未知命令,请输入help获取帮助。',13,10,0
align	4
ExecuteCommand:
		mov		si,CMDLINE
	.chk_20:
		cmp		[si],byte 0x20
		je		.get
		cmp		[si],byte 0
		je		.get
		inc		si
		jmp		.chk_20
	.get:
		mov		[si],byte 0
		inc		si
		mov		[CMDLINE_PARAM],si
		mov		si,CMDLINE
		call	UpCase

		mov		si,CMDLINE
		mov		bx,CommandTable
	.chk_cmd:
		mov		di,[bx]
		call	strcmp
		cmp		ax,0
		je		.exec
		add		bx,4
		cmp		bx,CommandTable_end
		jge		.chk_floppy
		jmp		.chk_cmd
	.exec:
		call	word[bx+2]
		ret
	.chk_floppy:
		mov		si,CMDLINE
		mov		di,bufFileName
		call	FD_Expand
		push	es
		mov		ax,0x1010
		mov		es,ax
		xor		bx,bx
		mov		si,bufFileName
		call	FD_LoadFile
		pop		es
		cmp		ax,0
		jne		.unknown_cmd
		jmp		CreateProcess
	.unknown_cmd:
		mov		ax,0
		mov		bx,szUnknownCommand
		int		0x40
		ret

;===========================================================
;	create process
;===========================================================
align	4
REGS_DS				dw	0
REGS_ES				dw	0
REGS_FS				dw	0
REGS_GS				dw	0
REGS_SS				dw	0
REGS_SP				dw	0
REGS_CS				dw	0
REGS_IP				dw	0
CreateProcess:
		mov		[REGS_DS],ds
		mov		[REGS_ES],es
		mov		[REGS_FS],fs
		mov		[REGS_GS],gs
		mov		[REGS_SS],ss
		mov		[REGS_SP],sp
		mov		[REGS_CS],cs
		mov		[REGS_IP],word Shell.exec_done
		mov		ax,0x1000
		mov		es,ax
		mov		si,[CMDLINE_PARAM]
		call	strlen
		mov		[es:0x80],al
		mov		di,0x81
		call	strcpy
		mov		ax,0x1000
		mov		ds,ax
		mov		es,ax
		mov		fs,ax
		mov		gs,ax
		mov		ss,ax
		mov		sp,0xFFFE
		jmp		0x1000:0x100

;===========================================================
;	back space
;===========================================================
align	4
Backspace:
		push	ds
		push	ax
		push	bx
		mov		ax,cs
		mov		ds,ax

		push	si
		mov		si,szPrompt
		call	strlen
		mov		bx,ax
		pop		si

		mov		ax,[printf_x]
	.chk_x:
		cmp		ax,bx
		jbe		.done
		dec		ax
	.done:
		mov		[printf_x],ax
		pop		bx
		pop		ax
		pop		ds
		ret

;===========================================================
;	commands execute
;===========================================================
%include	"commands.inc"

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -