Short: Lisa File System Shell Tool Author: ray@arachelian.com (Ray A. Arachelian), port by uploader Uploader: polluks sdf lonestar org (Stefan Haubenthal) Type: util/misc Version: 0.1 Architecture: ppc-morphos URL: http://lisaem.sunder.net/lisafsh --------------------------------------------------------------------------- Lisa File System Shell Tool v0.1 http://lisaem.sunder.net/lisafsh --------------------------------------------------------------------------- Copyright (C) MMIV, Ray A. Arachelian, All Rights Reserved. Released under the GNU Public License, Version 2.0 See: http://www.gnu.org/licenses/gpl.html for License Details There is absolutely no warranty for this program. Use at your own risk. --------------------------------------------------------------------------- This program is meant to be used as a tool to help with the extraction and transfer of information from images of Apple Lisa 3.5" floppy disks. It is released under the GNU Public License, see the above link for details on the GNU project and license details. The following people have contributed to this project and are recognized here: David T. Craig who has provided a wealth of information, Chris McFall who provided details about the MDDF, and Natalia Portillo who wishes to write a universal file system API. This is a rough first draft of this program intended for my own use. I've released this in the hopes that it will prove useful to others, despite it's current limitations. It currently lacks quite a number of features that would make it more useful to the general public, including but not limited to: 1. Command Line interface is too rough, not shell-like enough. 2. No open/close command, you can only work with one disk image which must be entered in at the command line at launch time. i.e. lisafsh Office_Sys_1.dc42 3. It doesn't allow you to edit/save the Disk Copy 4.2 image. I need to figure out how to correctly calculate the checksums first 4. Some information from the disk is not properly extracted which can lead to issues (i.e. wrong data extracted, etc.) These include: Extents - These are the left over chunks of a file which do not fully fit into a single sector. The File System designers wanted to save space, and so these are allocated in special sectors elsewhere on the disk. (Unlike for example the FAT file system which can waste an entire cluster for a few bytes.) This means that upto the last 511 bytes of a file may not be extracted by this program. B-Tree/ This program relies on the extra tag information which wasn't Hashes/ meant for much other than data repair/scavenging (i.e. fsck) Table There are three versions of the Apple Lisa File System. The first is a flat file system with a table, the second uses Hashes, and the newest uses a B-Tree structure. I've not yet reverse engineered these, so the extraction is not tag independent. See below for an explanation. MDDF Only the FS version and volume name fields are known to me. DART The DART (Disk Archiver Tool) program has its own format which compresses sectors. Unlike the DiskCopy 4.2, I was unable to find out any information about it's format at all. If you know it's format and are willing to share it, please contact me. Information about old Macintosh and Apple Lisa Disks: Originally, the 1st Lisa shipped with a proprietary 5.25" double sided floppy disk called Twiggy. These were later replaced by Sony 3.5" single sided, double density floppy drives with the introduction of the Lisa 2 upgrades. The 400K floppies were formatted using a method called GCR (Group Coded Record) which meant that some tracks contained more sectors than others because they had more surface area under them. (Also, the disk motor spun at different speeds for different groups of tracks.) As with most storage devices, these used 512 byte sectors (the original Twiggy disks used 256 byte sectors I believe.) The Lisa engineers also added 12 bytes of meta data to each sector called tags, and these include information such as the Volume ID, the File ID the sector belongs to, as well as next/previous pointers. It also turns out that some file ID's are used reserved. For example AAAA is the boot sector, BBBB is the OS loader, 0000 is a free block, 0001 is the MDDF (aka superblock), etc. The original Macintosh also used this 400K drive and a flat file system called MFS. When later versions of the Macintosh were introduced, they used a new SuperDrive (not to be confused with the current DVD burners!) which could also access MFM (PC) formatted floppies and high density 1.44MB floppies. There are two applications for the classic 68K Macintosh computers that can work with Lisa formatted disks. These are DART and Apple Disk Copy. This program only understands Disk Copy 4.2 disk images. With later versions of Mac OS, the older 400K floppies (and the original MFS) file system were no longer supported, (eventually, floppies were also no longer supported) and over time tag information on the older disks were ignored by tools such as Disk Copy. While new versions of Disk Copy have added a conversion feature to help migrate DART images to Disk Copy 4.2 format, they strip off all tag information. Unfortunately at least in this initial version of the Lisa File System Shell, I rely on the information stored in the tags to get at the files. Because of this, you will not be able convert any DART images this way. You will need access to an old Macintosh which can read/write 400k/800k floppies. You will then need to use DART to restore the disk image to the floppy, and then use Disk Copy 4.2 to create a new image. Good luck finding 3.5" double sided disks. Some claim that it's possible to tape the sensor hole that indicates a HD floppy. I've not tried it. Also note that the Lisa Operating system used features not available on current operating systems. You can have split files which means that a file is broken up in multiple pieces across many disks. You can also have two files with the same exact name, or slashes as part of the file name. A lot of this functionality was implemented by occluding the real file names from the user which is why you won't see the OS/driver file names from the Desktop. At the low level, your documents will show up as something like {D1234T1} and not "Business report 5/12/1971" This is because some files have metadata attached as the first 0xf0 bytes. When you extract such files, you'll find extra file named .meta.txt .meta.bit which separate the metadata out. The following is the help screen from the program: NOTE: This program relies on tag data to perform commands marked by a + sign. It also requires that the disk images be imaged by Apple Disk Copy 4.2. It can't use DART images. If you know DART's format details, please contact me. Versions of ADC newer than 4.2 do not extract tags! Although they claim to be able to convert DART to DC4.2, they strip off the tags, rendering them useless. It only understands Lisa disk images with tags made by Disk Copy 4.2 help - displays this help screen. version - displays version and copyright. {sector#} - jump and display a sector #. (press ENTER for next one.) +|-{#} - skip forward/backward by # of sectors. display - display a sector # cluster - display the 1st sector in a cluster. setclustersize - set the cluster size. dump - dump all sectors and tags in hex display n/p + next/previous display in sorted chain. tagdump + dump tags sorttagdump + sort tags by file ID and sector #, then dump them sortdump + same as above, but also output actual sectors bitmap + show block allocation bitmap extract + extracts all files on disk based on tag data. files are written to the current directory and named based on the file id and Disk Copy image name. dir + list tag file ID's and extracted file names from catalog. quit - exit program. When you launch the program from the command line, with a disk image as it's first and only parameter, it will open it and display the Disk Copy 4.2 image information about the disk image. It looks like this: Header comment :"-not a Macintosh disk-" Data Size :409600 (0x00064000) Tag total :-128 (0xffffff80) Data checksum :0 (0x00000000) Tag checksum :0 (0x00000000) Disk format :0 400K GCR Format byte :0x02 unknown Private :0x0100 (should be 0x100) Data starts at :0x0054 (84) Tags start at :0x64054 (409684) No of sectors :0x0320 (800) Sector size :0x0200 (512) tag size :0x51eb84 (5368708) Sector Navigation: To move from sector to sector, you can simply type in the sector number and hit enter. To move to the next sector hit ENTER. To jump 3 sectors from the current one, you can type in +3. To go back 5 sectors, you can type in -5. The display will look like this: ----------------------------------------------------------------------------- Sec 1:(0x0001) Used Block Part of file OSLoader-bbbb:"OSLoader-bbbb" ----------------------------------------------------------------------------- The top banner tells you in both decimal and hexidecimal the sector number that you are viewing, whether the block is a Free or Used block, and which file it belongs to. Note that some files are special and aren't in the directory. For example the boot sector and the OS loader. These aren't really files, however, I treat them as such in order to be able to extract them in a consistant manner. The file name is shown twice here, this is because it's a special file. The bbbb that you see next to the name is the file ID from the tag information. Next, there is the tag display that shows you a ruler indicating by position the tag location, followed by the actual tags on the next line, and below it a legend: ----------------------------------------------------------------------------- +0 +1 +2 +3 +4 +5 . +6 +7 +8 +9 +a +b tags: 00 00 00 24 bb bb . 00 01 87 ff 07 ff |volid| ?? |fileid|absnext|next|previous ----------------------------------------------------------------------------- Note that tag bytes 4,5 are the file ID and contain the "bbbb" mentioned previously. Next, you'll see the ruler for the data in the sector, followed by the data. On the left, you can see the byte offset (in hexidecimal) for the line displayed on each row. This is followed by the data represented in hexidecimal, a separator, and a possible ASCII representation of that data. ----------------------------------------------------------------------------- +0 +1 +2 +3 +4 +5 +6 +7 . +8 +9 +a +b +c +d +e +f ----------------------------------------------------------------------------- 0000: c0 01 42 80 24 3c 00 30 . 00 00 4e ba ff 14 4e b9 | @!B $< 0 N:4N9 0010: 00 fe 00 94 64 00 00 0a . 30 3c ff ff 60 00 00 4c | ~ 4d *0<` L ... Another example: a small snippet of data from sector 3 that also shows text: 0130: 00 84 4f 53 20 42 4f 4f . 54 20 46 41 49 4c 45 44 | $OS BOOT FAILED 0140: 20 20 20 20 20 20 54 52 . 59 20 41 20 4e 45 57 45 | TRY A NEWE 0150: 52 20 4d 41 43 48 49 4e . 45 20 41 4e 44 20 42 4f | R MACHINE AND BO 0160: 4f 54 20 50 52 4f 4d 00 . 20 5f 22 5f 4e 91 4e d0 | OT PROM _"_N1NP 0170: 2f 02 41 fa 20 6c 4e 90 . 4e 75 20 5f 2e 8d 4e d0 | /"Az lN0Nu _.-NP Allocated/Free sectors: The file system contains a special file which is a bitmap of all the sectors on the disk. This bitmap uses one bit for each sector. As you might imagine there are a lot more bytes in this bitmap than can represent sectors, so the bottom of this sector is mostly empty. To see the block allocation bitmap, type in bitmap: lisafsh> bitmap Block allocation bitmap ----------+----------------------------------------+ Sector |..........1.........2........3..........| hex dec +|0123456789012345678901234567890123456789| ----------+----------------------------------------| 0000(0000)|########################################| 0028(0040)|########################################| 0050(0080)|############ ###############| 0078(0120)|########################################| The sectors marked with #'s are allocated, those with blank spaces are free. At the top there is a horizontal ruler, on the left column for each row, there is the offset (in both hex and decimal.) Adding the sector number from the left column to the top offset matching the row in question lets you find the sector you're interested in. For example, the first free sector for this disk is at sector 92. (80+12). Seeing the file names: To see a list of files, their file ID's, and their first sector number, type in DIR. The FileID is in the left column, followed by the Lisa file name, then the starting sector, represented in hex and decimal: FileID FileName start sector ---------------------------------------------------------- 0018 apin/syslib.obj 0294(660) 0009 SYSTEM.BT_PROFILE 009d(157) 000b SYSTEM.CDD 00ca(202) 000c SYSTEM.CD_2 PORT CARD 00cd(205) 0008 officephrase 007b(123) ... To follow a file, you can type in it's sector number, hit ENTER, then repeatedly use the n command to follow to the next sector of the file you wish to view. [There's a bug where you'll need to use the "n" command twice initially. Also if you follow the file past its end, it will display sectors to the next file.] Extraction of information and files: If you would like to use this tool in as a batch tool from a shell script, you can use Unix's redirection features to pipe a command for it to execute and optionally redirect the output to a file. For example to extract all the files inside of a disk image: echo extract | lisafsh Office_Sys_1.dc42 To get a hex dump of all the sectors in the disk image: echo dump } lisafsh Office_Sys_1.dc42 >Office_Sys_1.dump.txt To exit the program, type in quit. If you wish to contact me, my email address is: my first name AT my last name dot com. :)