📄 fdos.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 + -