{"id":48927349,"url":"https://github.com/pulchart/fat95","last_synced_at":"2026-06-07T20:01:10.055Z","repository":{"id":333733722,"uuid":"1138481400","full_name":"pulchart/fat95","owner":"pulchart","description":"fat95 - Win95/98 compatible file system. Fork of https://aminet.net/package/disk/misc/fat95","archived":false,"fork":false,"pushed_at":"2026-03-15T16:15:44.000Z","size":257,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-03-16T03:45:50.301Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Assembly","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pulchart.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"jaroslavpulchart"}},"created_at":"2026-01-20T18:19:11.000Z","updated_at":"2026-02-10T19:34:18.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/pulchart/fat95","commit_stats":null,"previous_names":["pulchart/fat95"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/pulchart/fat95","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulchart%2Ffat95","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulchart%2Ffat95/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulchart%2Ffat95/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulchart%2Ffat95/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pulchart","download_url":"https://codeload.github.com/pulchart/fat95/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pulchart%2Ffat95/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31918879,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T18:22:33.417Z","status":"online","status_checked_at":"2026-04-17T02:00:06.879Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-17T07:07:16.230Z","updated_at":"2026-04-17T07:07:16.948Z","avatar_url":"https://github.com/pulchart.png","language":"Assembly","funding_links":["https://ko-fi.com/jaroslavpulchart"],"categories":[],"sub_categories":[],"readme":"# Win95/98 compatible FAT filesystem handler for AmigaOS.\n\nBased on Torsten Jager's fat95 v3.18 (Aminet: [disk/misc/fat95.lha](https://aminet.net/package/disk/misc/fat95)).\n\n## fat95 handler\n\n**Download** at GitHub [Releases](https://github.com/pulchart/fat95/releases)\n\n**Purpose**\n\n\"fat95\" is a DOS handler to mount and use Win95/98 volumes just as if they were AMIGA volumes.\n\n**Personal Note**\n\nImprovements to this handler are developed in my free time. If you'd like to support ongoing maintenance and experimentation, you can do so on [Ko-fi](https://ko-fi.com/jaroslavpulchart).\n\n**Community Links**\n\n- **English Amiga Forum Thread:** [Discussion Thread](https://eab.abime.net/showthread.php?t=121575) user questions and troubleshooting.\n- **Aminet fat95 Advanced Search:** [FAT95 releases (m68k, AmigaOS)](https://aminet.net/search?type=advanced\u0026name=fat95\u0026q_path=AND\u0026path%5B%5D=disk%2Fmisc\u0026q_date=AND\u0026o_date=equal\u0026date=\u0026q_desc=AND\u0026desc=\u0026q_readme=AND\u0026readme=\u0026q_content=AND\u0026content=\u0026q_arch=AND\u0026arch%5B%5D=m68k-amigaos\u0026search=search) shows all fat95 packages.\n\n**System Requirements**\n\n* Every AMIGA, OS 1.3+ (OS 2.0+ for full functionality)\n* A suitable device file for low level disk access, like the\n  mfm.device for floppies, compactflash.device for CF in PCMCIA.\n\n**Features**\n\n* Workbench and applications support\n* Diskchange autosense\n* Format type autosense: FAT12, FAT16 and FAT32\n* MBR and GPT partition table support\n* Simple LINUX style partition selection or manual definition\n* Up to 4 GBytes of partition size for FAT16\n* Large harddisk support via TD64 or direct SCSI\n* Long filenames (up to 104 chars for now)\n* Inquiry, read, write, and maintenance access\n* Built-in error check utility\n* Disk formatting using the OS 2.0+ format command\n* MS-DOS 8.3 downward compatibility\n* User definable language and code page\n* Date range Jan 1st, 1980 through Dec 31st, 2107\n* Extended datestamp support: creation date and time, last accessed date\n  (written automatically, readable as file comment text)\n* Volume serial number as name for unnamed volumes\n* Automatic directory optimization\n* Written entirely in assembly language\n\n## What's New in\n\n### 3.20 (16.03.2026)\n\n* **NTFS volume rejection**\n  - NTFS volumes are now explicitly rejected and reported as unrecognised instead of being incorrectly mounted as an unnamed FAT volume with its serial number as the volume name (e.g. \"0000-0100\").\n  - Affects GPT disks (both FAT and NTFS share the same \"Microsoft Basic Data\" partition GUID), MBR disks where an NTFS partition was placed in a FAT partition slot (e.g. type 0x0B/0x0C), and unpartitioned direct volume access paths.\n  - Relates to github issues: [pulchart/cfd#37](https://github.com/pulchart/cfd/issues/37), [salass00/ntfs-3g#3](https://github.com/salass00/ntfs-3g/issues/3)\n\n### 3.19 (01.02.2026)\n\n* **Fork of 3.18**\n  - Set English as default localization for fat95 handler\n  - Rebuild by vasm 2.0d\n  - Consolidated documentation into fat95.guide\n\n* Detect SFS/PFS/FFS/RDB as foreign disk formats\n\n* **GPT partition table support**\n  - Automatic detection of GPT disks via protective MBR (type 0xEE)\n  - Scans GPT partition entries for Microsoft Basic Data partitions (FAT)\n  - Supports partition selection via DosType (same as MBR: FAT\\1, FAT\\2, etc.)\n\n* **Improved disk change handling**\n  - Non-existent partitions now show \"No Disk\" instead of \"Uninitialized\"\n  - Fixes stale partition data when switching to cards with fewer partitions (see [Disk Status Meanings](#disk-status-meanings))\n  - Foreign disk formats (RDB, PFS, SFS) show appropriate status per partition\n\n* **Bug fixes**\n  - Fixed trailing slashes in path names (e.g., \"makedir cf0:temp/\" now correctly creates \"temp\")\n    WARNING: Using trailing slashes with 3.18 corrupted the filesystem\n\n## Installation\n\n**Introduction**\n\nInstalling disk drives under AmigaOS requires *two* components:\n\n1. A **hardware driver** that provides block-level access to the drive. This can be part of the Kickstart ROM (e.g., `trackdisk.device`) or a separate file (e.g., `Devs:compactflash.device`).\n2. A **filesystem handler** that manages partitions, directories, and files. The standard filesystem is in ROM. Others, like fat95, are files in the `L:` drawer.\n\nThese two components are connected via a **mountlist** - a configuration file that tells AmigaOS how to mount the drive.\n\n**Installation**\n\n1. Edit the `install_fat95` text file for your language.\n2. Double-click the `install_fat95` icon to activate the changes.\n3. Optionally double-click example mountlist icons in `DOSDrivers/`:\n   - `MS0`/`MS1` - FAT-formatted PC DD 720k floppy (mfm.device)\n   - `CF0` - FAT partition on CompactFlash in PCMCIA slot (compactflash.device), supports MBR and GPT\n   For custom configurations, see the [Mountlist Configuration](#mountlist-configuration) section.\n4. Copy mountlists to:\n   - `DEVS:DOSDrivers/` for automatic mounting at boot, or\n   - `SYS:Storage/DOSDrives/` for manual mounting via shell command (Method A: Shell Command)\n\n## Mountlist Configuration\n\n### Device Driver Settings\n\nFirst, the name of the driver:\n\n```\nDevice = scsi.device\n```\n\nThat's the one responsible for the Amiga's internal IDE or SCSI\nport. Usually, multiple drives can be connected to such a port.\nTherefore, we need to state which one we want:\n\n```\nUnit = 1\n```\n\nThis is the \"slave\" IDE drive (e.g., a ZIP drive).\nThe \"master\" harddisk has number 0.\nFor drivers with a single drive only, it is also 0.\n\n```\nFlags = 0\n```\n\nSome drivers allow special settings to be made via this one.\nMost cases, that 0 is enough.\n\n```\nBufMemType = 1\nMaxTransfer = 0x20000\nMask = 0xfffffffe\n```\n\nFor the (unpatched) A1200 ROM scsi.device. Or if driver\ndoesn't need them, simply discard.\n\n### File System Settings\n\n```\nFilesystem = l:fat95\n```\n\nAmigaOS wants the full path here.\n\n```\nStackSize = 4096\n```\n\nReserve that many bytes for temporary data. State too few,\nand \"mysterious\" crashes will happen.\n\n```\nGlobVec = -1\n```\n\nfat95 is assembly language written, so -1.\n\n```\nBuffers = 200\n```\n\nHold that many blocks of 512 bytes each in memory.\nMore = Faster = Less memory available.\n\n### Control Options\n\n```\nControl = \"+s\"\n```\n\nAvailable options:\n\n| Option | Description | Default |\n|--------|-------------|---------|\n| `+` | Turn ON the following options | - |\n| `-` | Turn OFF the following options | - |\n| `s` | Force direct SCSI reads/writes (for \u003e4GB disks) | OFF |\n| `d` | Display extra datestamp info as file comments | ON |\n| `D` | Record \"last accessed\" date on file reads | ON |\n| `l` | Show 8.3 filenames lowercase (e.g., \"test.txt\") | OFF |\n| `L` | Show 8.3 filenames with uppercase initial (e.g., \"Test.txt\") | OFF |\n\n### Startup Options\n\n```\nActivate = 1\n```\n\nStart immediately instead of on first access.\n\n## Partition Selection\n\nfat95 supports both **MBR** and **GPT** partition tables with automatic detection.\n\n### Automatic Partition Search (Recommended)\n\n```\nLowCyl = 0              /* Enable auto search */\n\nBlockSize = 512         /* Required by Mount command */\nHighCyl = 1\nBlocksPerTrack = 1\nSurfaces = 1\n```\n\n**DosType Values**\n\nThe **DosType** controls which partition to mount:\n\n| DosType | Hex Value | Description |\n|---------|-----------|-------------|\n| FAT\\0 | 0x46415400 | Floppies only |\n| FAT\\1 | 0x46415401 | First FAT partition (recommended) |\n| FAT\\2 | 0x46415402 | Second FAT partition |\n| FAT\\3 | 0x46415403 | Third FAT partition |\n| FAT\\4 | 0x46415404 | Fourth FAT partition |\n| FAT\\5 | 0x46415405 | First logical drive (extended partition) |\n| FAT\\6 | 0x46415406 | Second logical drive, etc. |\n\n**Recognized partition types:**\n\nFor MBR disks, fat95 recognizes these partition types:\n\n| Type | Description |\n|------|-------------|\n| 0x01 | FAT12 |\n| 0x04 | FAT16, \u003c 32 MB |\n| 0x06 | FAT16, \u003e= 32 MB |\n| 0x0B | FAT32 |\n| 0x0C | FAT32, LBA |\n| 0x0E | FAT16, LBA |\n| 0x05, 0x0F | Extended partition (for logical partitions) |\n\nFor GPT disks, fat95 counts only FAT partitions (Microsoft Basic Data GUID: `EBD0A0A2-B9E5-4433-87C0-68B6B72699C7`).\nNon-FAT partitions (EFI System, Windows Recovery, etc.) are automatically skipped.\n\n**GPT vs MBR Detection**\n\nfat95 automatically detects the partition table type:\n1. Reads block 0 (MBR)\n2. Checks for protective MBR (partition type 0xEE)\n3. If found, reads GPT header at LBA 1 and scans GPT entries\n4. Otherwise, parses standard MBR partition table\n\n### Manual Partition Definition\n\nFor special cases like damaged partition tables:\n\n```\nBlockSize = 512\nDosType = 0x46415401\n\nBlocksPerTrack = 1\nSurfaces = 1\nLowCyl = \u003cStartBlockNumber\u003e\nHighCyl = \u003cLastBlock\u003e\n```\n\n## Mounting the Drive\n\n### Complete Mountlist Example\n\n```\nCF0:\n    FileSystem     = L:fat95\n    Device         = compactflash.device\n    Unit           = 0\n    Flags          = 0\n    LowCyl         = 0          /* Auto partition search */\n    HighCyl        = 1\n    Surfaces       = 1\n    BlocksPerTrack = 1\n    BlockSize      = 512\n    Buffers        = 200\n    BufMemType     = 1\n    MaxTransfer    = 0x1FE00\n    Mask           = 0xFFFFFFFE\n    StackSize      = 4096\n    Priority       = 5\n    GlobVec        = -1\n    DosType        = 0x46415401 /* FAT\\1 = first FAT partition */\n    Activate       = 1\n```\n\n### Method A: Shell Command\n\n```\nmount CF0:\n```\n\n### Method B: Workbench Icon\n\n1. Create project icon `CF0.info`\n2. Enter `c:mount` as the default tool\n3. Double click the icon\n\n### Method C: Auto-mount at Boot\n\nCopy both `CF0` and `CF0.info` to `DEVS:DOSDrivers`\n\n### Method D: OS 1.3 (MountList file)\n\nEdit `DEVS:MountList` and append:\n\n```\nCF0:\n    Device = scsi.device\n    /* ... other entries ... */\n```\n\nThen mount with:\n\n```\nmount CF0:\n```\n\n## Special Features\n\nfat95 uses file comments for special commands:\n\n**Scandisk**\n\n```\nfilenote CF0:anyfile \"!scandisk\"\n```\n\nRecovers lost files and fixes disk errors.\n\n**Control Options**\n\n```\nfilenote CF0:anyfile \"!control -dD\"\n```\n\nChanges configuration options at runtime.\n\n**Security Erase**\n\n```\nfilenote CF0:anyfile \"!erase\"\n```\n\nOverwrites deleted files with zeroes (unrecoverable delete).\nWorks with CompactFlash built-in erase when available.\n\n**Note:** scandisk and erase can be aborted with `\u003cESC\u003e`.\n\n## Troubleshooting\n\n**Report issues at:** https://github.com/pulchart/fat95/issues\n\n**Q: \"object not found\" when mounting?**\n\nA: Check the `Device =`, `Unit =` and `Flags =` entries.\n\n**Debug tool:**\n\n```\ndebug95 CF0: ram:cf0.log\n```\n\nCreates a dump of internal fat95 variables for diagnosis.\n\n### FAT32 Notes\n\n* FAT32 FAT table can be huge (8MB for 8GB partition)\n* fat95 does not cache entire FAT32 table to save memory\n* Free space calculation happens after mount (\"volume is validating\")\n\n### Disk Status Meanings\n\nFat95 reports different disk statuses depending on what it finds:\n\n| Status | ID | Icon | Meaning |\n|--------|----|------|---------|\n| **Mounted** | `ID_DOS` | `Volume name` | FAT partition found and mounted successfully |\n| **Uninitialized** | `ID_NDOS` | `CF0:NDOS` or `CF0:Uninitialized` | Disk present but not FAT format (e.g., RDB, PFS, SFS, FFS) or bad MBR partition table |\n| **No Disk** | `ID_NONE` | (none) | No media inserted OR requested partition doesn't exist |\n| **Unreadable** | `ID_BAD` | `CF0:BAD` | Disk read error or hardware failure |\n| **Busy** | `ID_BUSY` | `CF0:BUSY` | Handler is inhibited (via `INHIBIT` command) |\n\n**Partition specific behavior**\n\nWhen you have multiple mount points (e.g., FAT\\1, FAT\\2, FAT\\3) and insert a disk:\n\n| Scenario | FAT\\1 | FAT\\2 | FAT\\3 |\n|----------|-------|-------|-------|\n| 3-partition FAT disk | Mounted | Mounted | Mounted |\n| 1-partition FAT disk | Mounted | No Disk | No Disk |\n| RDB/PFS/SFS disk | Uninitialized | No Disk | No Disk |\n| No disk inserted | No Disk | No Disk | No Disk |\n\nThis behavior ensures:\n- **FAT\\1** correctly shows \"Uninitialized\" for foreign formats (disk present, wrong type)\n- **FAT\\2, FAT\\3, etc.** correctly show \"No Disk\" when the requested partition doesn't exist\n\nThe exact status shown may depend on the order of disk insertion and reinsertion.\n\n## Tools Included\n\n| Tool | Description |\n|------|-------------|\n| `l/fat95` | FAT95 filesystem handler |\n| `l/install95` | Locale installer (read/write locale files) |\n| `c/dd` | Raw block transfer tool |\n| `c/debug95` | Debug information tool |\n| `c/SetFileSize` | File size modification utility |\n| `c/boot95` | Boot partition creation tool |\n\n### dd Usage\n\nCopy disk blocks to file:\n\n```\ndd scsi.device 1 ram:dump 0 128\n```\n\nWrite file back to disk:\n\n```\ndd ram:dump scsi.device 1 0 128\n```\n\n### Debug95\n\nCreates a dump of internal fat95 variables for diagnosis.\n```\ndebug95 CF0: ram:cf0.log\n```\n\n### boot95\n\nBooting from FAT Partition\n```\nboot95 CF0:\n```\n\nThis installs an Amiga automount sequence in the unused area between\nthe MBR and first partition (~30KB). Requires fat95 in `L:` drawer.\n\n**Caution:** Overwrites existing Amiga style partitioning info.\n\n## License\n\nGNU LGPL v2.1\n\n## History\n\n| Version | Date | Changes |\n|---------|------|---------|\n| v3.20 | 03/2026 | NTFS volume rejection |\n| v3.19 | 02/2026 | GPT partition table support, improved disk change handling, Fixed trailing slashes in path names |\n| v3.18 | 03/2013 | Open source release LGPL (Torsten Jager) |\n| v3.17 | - | No info |\n| v3.16 | - | No info |\n| v3.15 | 05/2004 | Added \"l\" option (lowercase 8.3 names) |\n| v3.14 | 05/2004 | Added \"L\" option (uppercase initial) |\n| v3.13 | 02/2004 | PalmOS formatted memory card support |\n| v3.12 | 11/2003 | Alternative disk recognition via SCSI, optional TD_UPDATE, faster small writes |\n| v3.11 | 08/2003 | Optimized short name generator, directory updates during writes |\n| v3.10 | 07/2003 | Fixed directory creation bugs, international character fixes |\n| v3.09 | 04/2003 | Security erase feature, abortable scandisk |\n| v3.08 | 10/2002 | Skipped version number |\n| v3.07 | 09/2002 | File writing fix, SCSI auto-select, Hungarian localization |\n| v3.06 | 08/2002 | Faster small file access |\n| v3.05 | 07/2002 | New configuration options |\n| v3.04 | 07/2002 | Removed startup messages, scandisk fixes, improved dd tool |\n| v3.03 | 05/2002 | Removed DiskUpdate error message |\n| v3.02 | 03/2002 | Directory creation fix, FAT12 CF card formatting, SCSI error checking |\n| v3.01 | 02/2002 | Minor short name bug fix |\n| v3.00 | 02/2002 | User character set for 8.3 names, official FAT32 cluster sizes |\n| v2.19 | 01/2002 | Filenames up to 104 characters |\n| v2.18 | 12/2001 | SetFileSize() support, user language support |\n| v2.17 | 09/2001 | Faster FAT32, Amiga reformatted ZIPs recognized |\n| v2.16 | 08/2001 | MaxTransfer fix, FileSystem.resource code sharing |\n| v2.15 | 05/2001 | Crash fixes, pure attribute, error check, boot95 tool |\n| v2.14 | 03/2001 | FAT32 mode bug fix |\n| v2.13 | 02/2001 | New buffering system |\n| v2.12 | 02/2001 | SCSI direct command support |\n| v2.11 | 12/2000 | Better FDA compatibility |\n| v2.10 | 10/2000 | Exotic partition tables, TD64 error requester |\n| v2.9 | 09/2000 | AddBuffers fix, safer CURRENT_VOLUME, trackwise access |\n| v2.8 | 08/2000 | Software write protection, fat95debug tool |\n| v2.7 | 08/2000 | Logical drive recognition fix |\n| v2.6 | 07/2000 | Disk full crash fix, inconsistent file access fix |\n| v2.5 | 07/2000 | Track-wise buffering, FAT32 free space fix |\n| v2.4 | 07/2000 | Exclusive locks fix, 8.3 name fixes |\n| v2.3 | 07/2000 | Native ExAll(), ChangeMode(), various bugfixes |\n| v2.2 | 06/2000 | Restart validator, 65-char filenames, FAT32 formatting |\n| v2.1 | 04/2000 | NSD and TD64 support, FAT32 28-bit fix, timestamp fix |\n| v2.0 | 04/2000 | First FAT32 support |\n| v1.22 | 03/2000 | Large sectors fix (\u003e512 bytes) |\n| v1.21 | 03/2000 | Cluster-wise file access, diskchange messages |\n| v1.20 | 03/2000 | Separate caches, workbench icon suppression |\n| v1.19 | 03/2000 | Partition selection fix |\n| v1.18 | 03/2000 | First partition support |\n| v1.17 | 02/2000 | Second published version, improved FORMAT |\n| v1.16 | - | No info |\n| v1.15 | 02/2000 | Code optimizations |\n| v1.14 | 02/2000 | FAT copy update fix |\n| v1.13 | 02/2000 | SERIALIZE_DISK fix |\n| v1.12 | 01/2000 | ETD commands, SERIALIZE_DISK, faster FAT16 writeback |\n| v1.11 | 01/2000 | Device workarounds, faster drawer operations |\n| v1.10 | - | No info |\n| v1.9 | - | No info |\n| v1.8 | 01/2000 | Workaround for register-trashing devices |\n| v1.7 | 01/2000 | Formatting fix, double-mount crash fix, reentrant code |\n| v1.6 | 12/1999 | Large partition fix, SID2 workaround, serial number, dir optimization |\n| v1.5 | 11/1999 | First published version |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulchart%2Ffat95","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpulchart%2Ffat95","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpulchart%2Ffat95/lists"}