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

📄 fdos.inc

📁 一个微型操作系统源码
💻 INC
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; Project 		:	FDOS 0.0.7
;; Author 		:	Ottonello, Santiago
;; Webpage 		:	http://www.visual-opal.de
;; Date 		:	8.8.2003
;; Caption	 	:	FDOS.INC
;; Function		:	Macros to "wrap" system calls
;; Filename		:	fdos.inc
;; Compile Syntax 	:	nasm yourpgm.asm -f bin -I FDOS.INC  -o yourpgm.bin
;; Notes 		:
;; Examples		: 	SERVDEMO.ASM
;;			 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;---------------
; BEGPGM        : Begins a Program - Assign Segment registers
; Uses          :                                            
; Input		: NONE
; Output	: NONE
; Notes		: NONE
;---------------                               
%MACRO		BEGPGM	0
						;Segment Assignments
		MOV	AX, CS			;Ac gets start of code seg. 
        	MOV	DS, AX			;Data Segment=Code Segment
        	MOV	ES, AX                  ;Especial Segment=Code Segment	
%ENDMACRO




;---------------
; ENDPGM        : Ends program and return control to OS
; Uses          : Int 21 Func 0
; Input		: NONE
; Output	: NONE
; Notes		: NONE
;---------------
%MACRO		ENDPGM		0
    		MOV		AH, 0		; Func 00=End Program          
		INT		21h		; Interrupt Call               
	%%Hang:	JMP		SHORT %%Hang	; Just in case it refuse to die
%ENDMACRO

;---------------
; PRTSTR        : Prints an ASCIIZ String 
; Uses          : Int 21 Func 1
; Input		: Address of Printable String
; Output	: NONE
; Notes		: NONE
;---------------
%MACRO 		PRTSTR	 1     
          	MOV		SI, %1		; SI = String to Print Addres
          	MOV		AH, 1           ; Func 01=Print ASCIIZ String          	
          	INT		21H             ; Interrupt Call                       	                    	
%ENDMACRO

; ---------------
; GETSTR	: Reads an ASCIIZ String
; Uses		: Int 21 Func 2
; Input		: Addres of String Buffer
; Output	: NONE
; Notes		: NONE
;---------------                        
%MACRO  	GETSTR	1
          	MOV		DI, %1		; DI = Addres to Store String
          	MOV		AH, 2           ; Func 02=Get ASCIIZ String          	
          	INT		21H 		; Interrupt Call                                                                                      
                                                                         
                                                                         
%ENDMACRO

;---------------
; OSINFO	: O.S. Information
; Uses		: Int 21 Func 3          
; Input		: NONE
; OutPut	: AL=Major Versi髇,  AH=Minor
;		  BL=Revision , BH=Language
;		  CL=Century, CH Year
;		  DL=Month, DH=Day
; Notes		: NONE
;---------------                       
%MACRO		OSINFO	0
		MOV	AH,3
		INT	21H
%ENDMACRO
                
;---------------
; CLRSCR	: Clear Screen a Set cursor at (0,0)
; Uses		: Int 21 Func 4
; Input		: NONE
; Output	: NONE
; Notes		: NONE
;---------------                
%MACRO		CLRSCR	0
		MOV	AH,4
		INT 	21H
%ENDMACRO                  

;---------------
; HLTSYS	: Halt System 
; Uses		: Int 21 Func 5 
; Input		: System Halt Mode
;		  0 - Neubooten 
;                 1 - Coldboot  
;                 2 - Warmboot  
;                 3 - Shutdown  
; Output	: NONE
; Notes		: NONE
;---------------                
%MACRO		HLTSYS	1
		MOV	AH,5
		MOV	AL, %1
		INT 	21H
%ENDMACRO       

;---------------
; GETCHR	: Wait for keypress and print Key
; Uses		: Int 21 Func 6
; Input		: NONE
; Output	: AL=ASCII Code
;		  CH=SCAN Code
; Notes		: NONE
;---------------                
%MACRO		GETCHR	0
		MOV	AH,6
		INT 	21H
%ENDMACRO       

;---------------
; CVTW2B	: Converts WORD To BYTE
; Uses		: Int 21 Func 7
; Input		: A Number less or equal 255
; Output	: BL=BYTE(BX)
; Notes		: NONE
;---------------                
%MACRO		CVTW2B	0   
		MOV	BX, %1
		MOV	AH,7
		INT 	21H
%ENDMACRO                         

;---------------
; CVTB2W	: Converts BYTE To WORD
; Uses		: Int 21 Func 8
; Input		: A Number 
; Output	: BX
; Notes		: NONE
;---------------                
%MACRO		CVTB2W	0   
		MOV	BL, %1
		MOV	AH,8
		INT 	21H
%ENDMACRO       

;---------------
; LODEXE	: Load and Execute Binary File
; Uses		: Int 21 Func 9
; Input		: BX=Segment
;		: DX=Pointer to string containing File Name
; Output	: NONE
; Notes		: NONE
;---------------                
%MACRO		LODEXE	2   
		MOV	BX, %1
		MOV	DX, %2
		MOV	AH,9
		INT 	21H
%ENDMACRO       
                                    
; Func 10 is identical to Func 6 so... ignore it and use Func 6


;---------------
; PRTCHR	: Prints a character          
; Uses		: Int 21 Func 11
; Input		: AL=Char (ASCII Code)
; Output	: Screen
; Notes		: NONE
;---------------                
%MACRO		PRTCHR 	1  
		MOV	Al,%1
		MOV	AH,11
		INT 	21H  		
%ENDMACRO       

;---------------
; CVTW2S		: Converts Word to String
; Uses		: Int 21 Func 12
; Input		: BX=Number     
;		  DI=Adress of String Buffer
; Output		: DI
; Notes		: NONE
;---------------                
%MACRO		CVTW2S 	2  
		MOV	BX,%1	
		MOV	DI,%2
		MOV	AH,12
		INT 	21H  		
%ENDMACRO       
                             
;---------------
; CVTS2W		: Converts String to Word
; Uses		: Int 21 Func 13
; Input		: SI=Address of input String
; Output		: BX=Number     
; Notes		: NONE
;---------------                
%MACRO		CVTS2W 	1
		MOV	SI,%1
		MOV	AH,13
		INT 	21H  		
%ENDMACRO       

;---------------
; MEMSZE	: Retrieve Memory Size
; Uses		: Int 21 Func 14
; Input		: NONE
; Output	: AX=Conventional Memory
;		  BL=0 Real Mode 1 Protected Mode
;		  CX= Extended Memory
; Notes		: NONE
;---------------                
%MACRO		MEMSZE 	0
		MOV	AH,14
		INT 	21H  		
%ENDMACRO       

;---------------
; CPUINF	: Retrieve CPU Information
; Uses		: Int 21 Func 15
; Input		: NONE
; Output	: AL=CPU Type
;			1=Pentium
;			2=P Pro ; Pentium 2 ; Celeron
;			3=Pentium 3
;			4=Pentium 4
; Notes		: NONE
;---------------                
%MACRO		CPUINF 	0
		MOV	AH,15
		INT 	21H  		
%ENDMACRO       
                             
;---------------
; GETPRM        : Reads command line parameter
; Uses          : Int 21 Func 16 
; Input		: Address of Buffer to receive command line
; Output        : Command Line Copied to Buffer
; Notes		: NONE
;---------------                               
%MACRO		GETPRM	1
			MOV		DI, %1	; DI = Command Line Buffer
			MOV		AH, 16	; Func 16=Get Command Line
			INT		21h	; Interrupt 21h           
%ENDMACRO       

;---------------
; LODFAT	        : Loads FAT into Memory
; Uses          : Int 21 Func 17
; Input		: BX=Segment
; Output        : BX=Segment
; Notes		: NONE
;---------------                               
%MACRO		LODFAT	1
			MOV		BX, %1
			MOV		AH, 17
			INT		21h	
%ENDMACRO       

;---------------
; LODDIR        : Loads Directory into Memory
; Uses          : Int 21 Func 18
; Input	      : BX=Segment
; Output        : BX=Segment
; Notes		: NONE
;---------------                               
%MACRO		LODDIR	1
			MOV		BX, %1
			MOV		AH, 18
			INT		21h	
%ENDMACRO       

; Function 19 non (DOCUMENTED)existent
%MACRO	LODSEC	3
	mov	BX,	%1
	mov	DX,	%2
	mov	CX,	%3
	mov	ah,	19
	int	21h
%ENDMACRO


;---------------
; OPNFIL        : Open a File Without Executing
; Uses          : Int 21 Func 20
; Input		: BX=Segment
;		  DX=File Name
; Output        : BX=Segment
; Notes		: NONE
;---------------                               
%MACRO		OPNFIL	2
			MOV		BX, %1
			MOV		DX, %2
			MOV		AH, 20
			INT		21h	
%ENDMACRO       

;---------------
; PRTBUF        : Print screen of a given lenght
; Uses          : Int 21 Func 21
; Input		: SI=String
;		  CX=Lenght
; Output        : Screen
; Notes		: NONE
;---------------                               
%MACRO		PRTBUF	2
			MOV		SI, %1
			MOV		CX, %2
			MOV		AH, 21
			INT		21h	
%ENDMACRO       

;---------------
; DSKSPC        : Determines available Disk Space and Free Clusters
; Uses          : Int 21 Func 22
; Input		: NONE
; Output        : ECX=Amount of free Clusters
;		  BX=Free disk space in KB
; Notes		: NONE
;---------------                               
%MACRO		DSKSPC	2                     
			MOV		AH, 22
			INT		21h	
%ENDMACRO       
                
;---------------
; CVTD2S        : Converts Double Word To String
; Uses          : Int 21 Func 23
; Input		: EBX=32 Bits Number, DI=Output String
; Output        : DI
; Notes		: NONE
;---------------                               
%MACRO		CVTD2S	2                     
			MOV		EBX,%1
			MOV		DI,%2 
			MOV		AH, 23
			INT		21h	
%ENDMACRO       

;---------------
; ADDPRC        : Insert new Process
; Uses          : Int 21 Func 24
; Input		: BX=Process Type
;		  DX=Start Adress
;		  DI=Size in Bytes
; Output        : Process Table
; Notes		: Process Types:
;			1:FDOS System
;			2:FAT
;			3:DIR
;			4:DIR Name
;			5:KEYBOARD
;			6:KERNEL Variable
;			7:Reserved
;			8:Shell Variable
;			9:Reserved
;			10:Process Control

⌨️ 快捷键说明

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