FileSystem
Finished functions :[ FUNCTIONS ]
Download version 2.6
Download latest version 3.0-beta






Note about latest version (3.0-beta) Update,fixes :
- started refactoring code


Notes about version (2.6) : Update,fixes :
- cache finally finnished ! and ready to use ! yey !

Notes for FS (FileSystem tester), version 2.5
Updates,fixes,new :
- dos version can now access USB DVD/CD using DOSUSB.COM driver (see www.georgpotthast.de/)
- fixes for win32/linux (can now access more easly any drive using OS's funcs
- added more help/faq; more is to come !

Notes for FS (FileSystem tester), version 2.42
Fixes,updates,new:
- fixes for partition editor
- it can now dump any drive (linux/win32 or int13_drv/vfile in dos) to local hard disk
(using OS's read/write to file)
- it can now open CD/DVD drives in win nt too ! (fixed bug)
- win32 fixes

Notes for version 2.41
Fixes, updates, new:
- usbebe has new features; bug fixes
- FS_DOS.EXE can now use INT13_DRV in case you don't have a compatible PATA board
- net.bas fixes ! includes encript.bas



Note about version (2.4) : t contains updated USBeBe driver : built-in usb support: for now just as a USB debugger
for more info about how to use it please read [readme.txt] inside fs.zip archive
Note about versions (2.3-2.4) : Standard Big Cache is ready to use. You can use this cache for drives as big as 2TB (with sector length = 512bytes) or 8TB (with sector length = 2048bytes). Because cache was only tested localy user has to choose between "To cache or not to cache !"

FileSystem contains Hallerith's RadixSort (kind o'fast countin' sort) :) (the final release :)) ) (used to sort file names)
FileSystem is a utility program that can:
Handle IDE/ATA HardDisks and ATAPI CD/DVD drives without any other drivers
Handle MasterBootRecord, Partitions for hard disks
Handle different file systems for any kind of media. For example : it can open a CD/DVD as FAT12/16/32 (LFN) - if it was written like that !
Handle local hard-disk/cd/dvd images using standard I/O provided by DOS/WIN/LINUX OS.
Handle Floppy Disk using BIOS
Handle USB Flash Drives and compatibles through DOSUSB.COM driver
Provide very useful tools for recovering files lost because of an application/OS mallfunction or because of a VIRUS
FAT using functions are cached to imporove speed (drastical improvement !)
be included into your FB source to create installers (that are booted from CD/DVD or FLASHES...).

Ready to implement in your DOS32 Project (DJGPP/FB/FP/others)
FAT12/16/32/LFN Structures, Records
ISO9660 Structures, Records
EXT2/3 Structures, Records
IDE ATA Ports for {Primary/Secundary , Master/Slave} Serial IDE devices - How to read/write one LBA/CHS sector
IDE ATA Ports for {Primary/Secundary , Master/Slave} ATAPI Packet For CD/DVD devices - reading/writeing sector
USB simplified , reading/writing sector to bulk only flashes/mass storages. (CBW:SCSI:DATA:CSW) - using DOSUSB.COM

HOW TO ... ?
How do I explore a FAT32 partition on a IDE HARDDISK ?
How do I copy files from my multi-session CD/DVD to a FAT32 partition ?M
How do I chruck a FAT32 parition ? (known as move tail - move all data to begining)
How do I explore a ISO9660/HardDiskRaw image ?
Why doesn't FS for Win32/Linux write anything to harddisk ?
By mistake a deleted a file (in dos lets say) . How do I recover the file using FS ?
I need to modify cluster chain of a file/directory. How can I go to the cluster number 311 (lets say) inside the file's linked list and modify it ?
How do I find out to whom belongs a cluster ?
How do I use/goto HD tools ?
+++ How do I setup a USB disk in DOS ? What's DOSUSB.COM and where can I find it ? +++
I have a SATA FLOPPY/HD/CD/DVD/BD. Why wouldn't FS recognize my drive ?! What can I do ?
I have a different kind of hardware (some other type of disk drives). How do I implement a driver for them ?
I'm developing some tool and I need a file system handler. Your library seems interesting, but how do I use it ?
I want to build a new OS. How can I use your FS as library and load it ?

How do I open a file (text/binary) an read/write data to it (FAT/ISO/EXT) ?
How do I find a file/dir in a directory (FAT/ISO/EXT)?
How do I get the long file name of an entry (file/dir) ? What about LFN PATH ?
How do I read/write a cluster from a FAT partition
How do I read/modify a FAT entry ?
How do I allocate space for a file using FAT entries ?
How do I open that dialog(explorer) for files ? How can I open that dialog for my EXT2 / ISO9660 partition ?
How do I interpret DIR_ENTRY ?
How do I interpret FAT1/2 entries ? What is the method used to allocate FAT1/2 entreis
How do I open a BAD SECTOR ?
How do I read/write EXT2 block (on a LINUX EXT2 partition) ?
How do I read/write EXT2 inode ?
How can I read(write) any sector on the harddisk/cd/dvd/disk image/usb flash ?
I have a USB drive. I've loaded DOSUSB.COM. But FS woudn't open my USB drive ! Why ? Can I solve ?(maybe yes)
Reading from USB drives is awful. It's working only with 36KBperSec ! Why ? What can I do ?
I have observed that FS has caching system for small USB drives . But it uses so much memory (4*number_of_sectors) ! What can I do ?
FS wouldn't copy also the long file names (from CD/FAT) ! How can I fix this !?
Copying small files with FS from a drive to another is so slow ! How can I speed it up ?
What is the meaning of cache size when copying files ?
I have a CD/DVD/FAT with BAD/DUMMY sectors ! FS is not retring nor asking to retry ? What can I do ?
FS is to big to fit on my 3.5"-floppy of size 720KB ! What can I do ? I also have a 5.5"-floppy of size 360kb ? How can I use FS on this kind of drives :) ? Is it possible ? (yes !)
FS is using a lot of memory and likes to be compiled with -ARCH 686. But what about my 286 with 4MB of RAM ?
I am using FS under LINUX ! I need some advices ! How to ...?
I am using FS under WINDOWS NT/9x ! I need some advices ! How to ...?
I am using FS under MSDOS/FREEDOS/DOSBOX ! I need some advices ! How to ...?
I used your program and it failed ! I lost many files !!! You dummy idiot , what's this bulshit of program ?!?! (that's because you didn't take my WELCOME advice... I can help you recovering some files with FS running the right way!)
I want to know something , but I couldn't find here ... I don't have time to wait for your answer nor I'm interested in talking with you ... So how can I solve my mistery ? (maybe this can help you)
Can I write e-mail with bugs/sugestions/others ? YES, please ! You are welcome ! Unfurtunatly you will need to wait some time 'till you get my answer, BUT be sure you will get it !
Does your program support FIRMWARE UPDATE for S1MP3/4S ? Will it ever ? (YES !)


You can:
explore files & directories like in norton (but single window)
look at clusters map
modify any cluster's setting in fat1/2
dump a cluster to file
edit / view fat file/dir entries
edit / view fat file on diks
edit / view any sector of a drive
you can dump the cluster of a directory and after that consider the file's cluster as a dirtory (good for backuping)
view LFN path and filename
modify directory entry
create new entry file or dir
copy files from one device to other (CD/DVD to HD, USB Flash to HD, CD/DVD to USB Flash, HD to HD, ... etc ...)
delete file entries ( also recursive subdirectories delete)
defragment a single file (makeing it continuous !)
sort filenames (using a derivate of COUNTINGSORT - fast) or view all items in directory (+ deleted entries + lfn entries + null entries)
view clusters' linked list of an entry (file/dir)
view full information about an entry
search for first free cluster /next free cluster
search for first occupied / next occupied cluster
view statistics about FAT/BOOTSECTOR/MBR/PARTITIONTABLE / others
search for the root parent of a cluster
search for the file containing a cluster you entered (using FS filesystemchecker)
copy from a multi-session DVD to your HD (while no cd/dvd driver for DOS can this, neither WIN9x - only LINUX and WIN2k can do this)
explore your USB stick from DOS (by help of DOSUSB.COM - a USB stack which is used by FS to send requests to USB devieces (CBW,.SCSIpacket,data,CSW :) ) etc
explore CD/DVD ISO9660 images & HardDisk RAW images.
modify partitions as you wish (but in expert mode)
format a FAT16/32 partition
many other. ....

Supported hardware interfaces:
IDE/ATA primary/secondary , master/slave; modes: PIO and DMA(DMA under developement)
ATAPI PACKET interface for CD/DCD ROM/RAM/RW through IDE/ATA
under development UDMA interface
standard floppy interface
Supported file systems & others:
FAT 12 / 16 / 32 / LONGFILENAME with variable location on disk(*)
ISO 9660 (ECMA -19), simple and MULTI-SESSION with variable location on disk(*)
EXT2/3, but partially working - under development
MASTERBOOTRECORD, primary and secundary partitions with variable location on disk(*)
(*) "Variable loaction on disk" means that the program can search a filesystem on any NON-STANDARD physical location on disk.
For example: your hardisk might have a normal PARTITION , but somewhere on the disk you can have a hidden (non-standard location on disk) partition.
Program can handle this kind on "non-standard" staff ! Even it can look for a FAT32LFN on some location of a DUAL-LAYER DVD which is not marked in the TOC, nor anywhere !

The program support advanced debug session for ATAPI Drives ... You can send any kind of atapi packet command and watch the results. You can interpret results in standard way or how ever you want :)) !
Program can print advanced information from MasterBootRecord and extended partion information.
Program has a capability to search for "lost" files ("wiped" from DIRECTORY record, "wiped" form FAT entries, BUT still on disk. This happens especially when OS crashes accidentally because of a malware application.

In the future version I plan to introduce:
If I find a legal way : NTFS file system
Built-in USB stack for USB Mass Storage Devices
(USBebe -> init UHCI/OHCI controller -> init Root HUB -> init usb device ->
CBW-> SCSI packet (like atapi packet) -> data in or out -> CSW
functions for Writing CD/DVD/DVD-RAM(s)
Partition manager so that you can create/delete/add/resize/move/change type of partitions ...



FS - welcome message

FS - main menu

FS - some hardware tests

FS - debuged CD/DVD atapi packet sender

FS - Exploring HardDisk

FS - On disk editor/viewer for FAT filesystems.

FS - Fat Tools : in image you can clusters and their type (free / used).

FS - FAT Filesystem Checker ...

FS - bye bye message (+reenableing LBACACHE/SMARTDRV)

FS - in FbEdit edtior ... but most of the time I use for FS DOS SetEditor. FbEdit can run in dos unfurtunatly, but SetEditor is good and cool !

Snapshot of FS's hardware tests (IDE ports not included) ...
--- Cpu flags ---

CPU Name:GenuineIntel
CPU ID Flags(EAX,EDX):
[10011100110000000000000000000000]
[11111111001111111100001110000000]
CPU Stepping ID :3
CPU Model :7
CPU Family :6
CPU Type :0
CPU ExtendedModeID :0
CPU ExtendedFamilyID :0
CPU Brand :0
CPU CFLUSH Size :6 = 48 bytes
CPU NumMAXLOGICCPU :0
CPU Initial APIC ID :0
press enter to view flags:
CPU unit FPU :1
CPU VME V8086ModeEnh :1
CPU Debugging extents:1
CPU PSE (PageSizeExt):1
CPU TimeStampCounter :1
CPU MSR :1
CPU PAE(PhyicAddrExt):1
CPU Machine check ext:1
CPU opcode CMPXCHG8B :1
CPU APIC :0
CPU SYSENTER/SYSEXIT :1
CPU MemTypeRangeReg :1
CPU Global Pages :1
CPU MachineCheckArhit:1
CPU opcode CMOV__ :1
CPU PAT PageAttrTable:1
CPU PSE36 PgSzExt36b :1
CPU Serial Number :1
CPU CLFLUSH/CLFSH :0
CPU DS Debug Store :0
CPU ACPI Therm&ClkMon:0
CPU unit MMX :1
press enter to view more flags:
CPU FXSAVE/FXRESTORE :1
CPU unit SSE :1
CPU unit SSE2 :0
CPU SS SelfSnoop :0
CPU MultiThreading :0
CPU ThernalMon :0
CPU PBE PendBrkEN :0
press enter to view more flags:
CPU unit SSE3 :0
CPU MONITOR :0
CPU DS-CPL :0
CPU VMX Technology :0
CPU EST(EnhSpeedStep):0
CPU Thermal monitor :0
CPU unit SSSE3 :0
CPU L1 CNTX-ID :0
CPU CMPXCHG16B :0
CPU TPR update ctrl :0
CPU PDCM (PerfDebug) :0
press enter to view cache info:

Cache INFO :
43->Unified cache: 512K Bytes, 4-way set associative, 32 byte line size
8->Instruction cache: 16K Bytes, 4-way set associative, 32 byte line size
4->Data TLB: 4M-Byte Pages, 4-way set associative, 8 entries
C->Data cache: 16K Bytes, 2-way set associative, 32 byte line size
1->Instruction TLB: 4K-Byte Pages, 4-way set associative, 32 entries
1->Instruction TLB: 4K-Byte Pages, 4-way set associative, 32 entries
2->Instruction TLB: 4M-Byte Pages, 4-way set associative, 4 entries
3->Data TLB: 4K-Byte Pages, 4-way set associative, 64 entries
press enter
CPU Serial number :CB 3AAE8E00
[this is valid only for Pentium3]

press enter

-- CMOS RTC ---
Base port=[0x70] ; Data Port=[0x71]

Date [6;7;8;9]:Tu 20/ 7/ 2010
Time [4;2;0] : 17: 0: 7
Alarm [5;3;1] : 165: 165: 165
Status A:100110 B:10 C:1110000 D:10000000
Diagnostic :0
ShutdownStatus :0
Floppy Drive(s) :1000000
640k/P/NumLock :1101
Drive types :11111111
Equipment :11
Memory (Base) :640Kb
Memory (Extented):65535Kb

--- PCI BUS PORT ---

PCI BUS Index Port (write)=[0xCF8] ; PCI BUS data port=[0xCFC]

bus=0 dev=0 func=0 vendor=8086 device=7190 class=60000 Bridge:Host
bus=0 dev=1 func=0 vendor=8086 device=7191 class=60400 Bridge:PCI
bus=0 dev=7 func=0 vendor=8086 device=7110 class=60100 Bridge:ISA
bus=0 dev=7 func=1 vendor=8086 device=7111 class=10180 MassStorage:IDE
bus=0 dev=7 func=2 vendor=8086 device=7112 class=C0300 SerialBus:USB: UHCI
bus=0 dev=7 func=3 vendor=8086 device=7113 class=68000 Bridge:Bridge
bus=0 dev=12 func=0 vendor=1073 device=C class=40100 Multimedia:Audio
bus=1 dev=0 func=0 vendor=5333 device=8A13 class=30000 Display Ctrl
bus=1 dev=0 func=1 vendor=5333 device=8A13 class=30000 Display Ctrl
bus=1 dev=0 func=2 vendor=5333 device=8A13 class=30000 Display Ctrl
bus=1 dev=0 func=3 vendor=5333 device=8A13 class=30000 Display Ctrl
bus=1 dev=0 func=4 vendor=5333 device=8A13 class=30000 Display Ctrl
bus=1 dev=0 func=5 vendor=5333 device=8A13 class=30000 Display Ctrl
bus=1 dev=0 func=6 vendor=5333 device=8A13 class=30000 Display Ctrl
bus=1 dev=0 func=7 vendor=5333 device=8A13 class=30000 Display Ctrl

--- SB Port ---

Speaker Enable port : [0x61] (bits 1,0) ; Timer ports : [0x42,0x43]


freq = 2166 dT= 221
freq = 1077 dT= 186
pause = 142
freq = 5050 dT= 429
pause = 376
freq = 3760 dT= 33
freq = 2454 dT= 328
freq = 4371 dT= 125
pause = 97
freq = 5018 dT= 121
pause = 70
freq = 5203 dT= 459
pause = 257

--- PIC ---

Programmable Interrupt Controller (PIC)
Master : Port A=[0x20] ; Port B=[0x21]
Slave : Port A=[0xA0] ; Port B=[0xA1]

MasterA[1]: (7,6,5,4)=0 , 3=LTIM , 2=ADI, 1=SNGL , 0=IC4 => bin[0]
A[2]: 7=T7 , 6=T6 , 5=T5 , 4=T4 , 3=T3 , (2,1,0) = 0 => bin[10101000]
A[3]: 7=S7, 6=S6, 5=S5, 4=S4, 3=S3, 2=S2, 1=S1, 0=S0 => bin[10101000]
A[4]: (7,6,5)=0, 4=SFNM, 3=BUF, 2=M/S, 1=AEOI, 0=uPM => bin[10101000]
MasterB[1]: Masks:if bit is set then interrupt is not send => bin[1111]
B[2]: 7=R, 6=SL, 5=EOI, (4,3)=0, 2=L2, 1=L1, 0=L0 => bin[1111]

Slave A[1]: (7,6,5,4)=0 , 3=LTIM , 2=ADI, 1=SNGL , 0=IC4 => bin[0]
A[2]: 7=T7 , 6=T6 , 5=T5 , 4=T4 , 3=T3 , (2,1,0) = 0 => bin[10101000]
A[3]: 7=S7, 6=S6, 5=S5, 4=S4, 3=S3, 2=S2, 1=S1, 0=S0 => bin[10101000]
A[4]: (7,6,5)=0, 4=SFNM, 3=BUF, 2=M/S, 1=AEOI, 0=uPM => bin[10101000]
Slave B[1]: Masks:if bit is set then interrupt is not send => bin[0]
B[2]: 7=R, 6=SL, 5=EOI, (4,3)=0, 2=L2, 1=L1, 0=L0 => bin[0]


--- PIT ---

Programmable Interrupt Timer
Ports : Timer/Disk = [0x40]
Memory refresh = [0x41]
Tape drive/Speaker = [0x42]
TIMER COTROLLER CMD= [0x43]
Selecting frequency : Send command to 0x43
Devide 1193180 hz to your frquency (min. 18.2Hz) and store result as WORD.
Send low byte (0x40 or 0x41 or 0x42). Send hi byte to (0x40 or 0x41 or 0x42)
Timer Controller Command port 0x43:
bit 0 -> (0 : Count in binary) / (1 : count in BCD)
bit 3,2,1 -> (0,0,0 :Interrupt on terminal count)
(0,0,1 :Hardware retriggerable one-shot)
(0,1,0 :Rate generator)
(0,1,1 :Sqare wave)
(1,0,0 :Software retriggerable strobe)
(1,0,1 :Hardware rettiggerable strobe)
bit 5,4 -> (1,0 : Counter hach operation)
(0,1 : Read/Write least significant byte of counter)
(1,0 : Read/Write most significant byte of counter)
(1,1 : Read/Write both bytes of counter: least+most)
bit 7,6 -> Counter to be accessed for operation (0,1,2); 3 is ilegal

--- Keyboad Port ---

Keyboard Status Read Port=[0x64] ; Keyboard data port=[0x60]

status:0x14 data:0xB9
status:0x14 data:0xB9
status:0x14 data:0xB9
status:0x14 data:0xB9
status:0x14 data:0xB9
status:0x14 data:0x38
status:0x14 data:0x38
status:0x14 data:0x38
status:0x14 data:0x38
status:0x14 data:0x38
status:0x14 data:0x38
status:0x14 data:0xB8
status:0x14 data:0xB8
status:0x14 data:0xB8
status:0x14 data:0xB8
status:0x14 data:0xB8


Download