{"id":34,"date":"2008-11-04T00:18:17","date_gmt":"2008-11-04T08:18:17","guid":{"rendered":"http:\/\/www.pagetable.com\/?p=34"},"modified":"2008-11-04T00:18:17","modified_gmt":"2008-11-04T08:18:17","slug":"reconstructing-the-leftovers-on-the-amiga-kickstart-10-disk","status":"publish","type":"post","link":"https:\/\/www.pagetable.com\/?p=34","title":{"rendered":"Reconstructing the Leftovers on the Amiga Kickstart 1.0 Disk"},"content":{"rendered":"<p><i>Update<\/i>: The source is available at <a href=\"https:\/\/github.com\/mist64\/extract-adf\">github.com\/mist64\/extract-adf<\/a>; more info <a href=\"https:\/\/www.pagetable.com\/?p=1300\">here<\/a>.<\/p>\n<p><!-- \n\n<p><a href=\"http:\/\/www.commodore-amiga-retro.com\/amiga\/amiga_scuzz178.htm\"><img decoding=\"async\" src=\"http:\/\/www.weihenstephan.org\/~michaste\/pagetable\/amiga\/kickstart.jpg\" width=\"180\" align=\"right\" hspace=\"8\" vspace=\"8\"><\/a><\/p>\n\n --><\/p>\n<p>It is <a href=\"http:\/\/en.wikipedia.org\/wiki\/Amiga_OS#Easter_eggs\">well-known<\/a> that the &#8220;Kickstart&#8221; disk that came with the original Amiga 1000 in 1985 contained some fragments of source code: The floppy disk that was used as a master for duplication had been used by the developers before, and had not been erased completely.<\/p>\n<p>Nobody seemed to have looked too closely at what is on this disk &#8211; so I did, for this episode of <a href=\"http:\/\/www.pagetable.com\/?cat=8\">Computer Archeology<\/a>. The revealed data tells us about how the Amiga operating system was brought up, how it related to Tripos, and where it was developed.<\/p>\n<h3>The Kickstart Disk<\/h3>\n<p>When the Amiga 1000 was released, the 1.0 ROM image was not finalized, so the machine shipped with a \u00e2\u0080\u009cKickstart\u00e2\u0080\u009d floppy disk that was loaded into an extra 256 KB RAM bank which was then write-protected.<\/p>\n<p>A double-density Amiga disk is exactly 880 KB, i.e. it consists of 1760 sectors, each 512 bytes in size. The Kickstart disk has a header on sector 0 (saying &#8220;KICK&#8221; followed by all zero bytes), and the raw ROM image is stored on the following sectors. The ROM is 256 KB in size, so this means that all sectors from 513 on are unused, and, in the case of the Kickstart 1.0 disk, preserved.<\/p>\n<p>The following analysis has been done on the Kickstart 1.0 ADF disk image with an MD5 of 2fb28e7bbab0d2eef00e742c7259a674.<\/p>\n<h3>Amiga Old Filesystem<\/h3>\n<p>Before version 1.3 of the operating system, disks were formatted with the &#8220;<a href=\"http:\/\/lclevy.free.fr\/adflib\/adf_info.html\">Amiga Old Filesystem<\/a>&#8220;, which was quite inefficient, as it stored metadata pretty redundantly. Every single sector, even sectors containing file data, start with a 24 byte header, which contains<\/p>\n<ul>\n<li>the <b>type<\/b> of the sector (directory entry, data&#8230;)\n<li>a pointer to the <b>parent<\/b>\n<li>the <b>sequence number<\/b> of the sector inside the file\n<li>the <b>number of valid bytes<\/b> in the sector\n<li>a pointer to the <b>successor<\/b>\n<li>and a <b>checksum<\/b>.\n<\/ul>\n<p>Every directory entry occupies a complete sector, and deleting a file means just removing the links to the directory entry sector, without touching the data sectors or the directory entry sector at all. And what&#8217;s best: For performance reasons, directory entries are clustered around the center of the disk, i.e. sector 880, which, in our case, has not been overwritten by the ROM image, so it should be easy to get some data out of this disk.<\/p>\n<h3>Extraction Program<\/h3>\n<p>\nThe program to extract the data from the disk uses the following algorithm: It iterates over all sectors from the end of the ROM image to the end of the disk image and looks at the sector type. If it is a data block, it looks at the parent, in the hope that it is an intact directory entry. If this is the case, it walks back the list from parent to parent to get the full path and filename of the file. If the directory entry has not survived, the file will get the index of the directory entry as a name. As we now know the filename of the file the sector belongs to and we can read the sequence number from the sector header, it is possible to write 488 bytes worth of data into the output file.<\/p>\n<p><p>Here is the source code of the program to extract the files: <a href=\"http:\/\/www.weihenstephan.org\/~michaste\/pagetable\/amiga\/extract-adf.c\">extract-adf.c<\/a><\/p>\n<h3>Results<\/h3>\n<p>The disk seemed to have contained C header files and assembly includes earlier, and has then been overwritten with the current set of command line tools of AmigaOS (the name of the disk &#8220;cli26.1&#8221; reflects this), extended with some custom development tools used by Commodore-Amiga.<\/p>\n<p>Since the DOS part of the Amiga operating system is actually based on the only very slightly modified <a href=\"http:\/\/en.wikipedia.org\/wiki\/MetaComCo\">Metacomco<\/a> <a href=\"http:\/\/en.wikipedia.org\/wiki\/TRIPOS\">Tripos<\/a> operating system, the command line tools as well as the development tools mentioned in the following sections are mostly the same as those found in Tripos; therefore the terms Tripos and AmigaDOS may be used interchangeably.<\/p>\n<h3>CLI Programs<\/h3>\n<p>The &#8220;c&#8221; subdirectory contains the following command line tools that can also be found on the Workbench 1.0 disk:<\/p>\n<table>\n<tr>\n<td>\n<pre>Assign\nBreak\nCD\nCopy\nDate\nDelete\nDir\nDiskCopy<\/pre>\n<\/td>\n<td>\n<pre>Echo\nEd\nEdit\nEndCLI\nExecute\nFailAt\nFault\nFormat<\/pre>\n<\/td>\n<td>\n<pre>If\nInfo\nInstall\nJoin\nLab\nList\nMakeDir\nNewCLI<\/pre>\n<\/td>\n<td>\n<pre>Prompt\nProtect\nQuit\nRename\nRun\nSearch\nSkip\nSort<\/pre>\n<\/td>\n<td valign=\"top\">\n<pre>Stack\nStatus\nType\nWait\nWhy<\/pre>\n<\/td>\n<\/tr>\n<\/table>\n<p><\/tt><\/p>\n<p>The following executables can be found in the &#8220;l&#8221; directory:<\/p>\n<p><tt>Disk-Validator<br \/>\nPort-Handler<br \/>\nRam-Handler<br \/>\n<\/tt><\/p>\n<p>But these may very well be earlier versions. &#8220;DiskCopy&#8221; for example is significantly smaller than the &#8220;Diskcopy&#8221; that shipped with Workbench 1.0.\n<\/p>\n<h3>Development Tools<\/h3>\n<p>\nThe following command line utilities can also be found in &#8220;c&#8221;. They do not ship with WorkBench, but are part of a separtare tools disk for developers, as described in the <a href=\"http:\/\/en.wikipedia.org\/wiki\/Special:BookSources\/0553342940\">AmigaDOS Manual<\/a>. Some <a href=\"http:\/\/www.gregdonner.org\/workbench\/wb_b0x.html\">also exist on pre-1.0 beta versions<\/a> of Workbench, although possibly in different versions.<\/p>\n<table border=\"1\">\n<tr>\n<td><tt>Alink<\/tt><\/td>\n<td>Amiga Linker Version 2.17, Copyright (C) 1985 by Tenchstar Ltd., T\/A Metacomco.<\/td>\n<\/tr>\n<tr>\n<td><tt>DiskEd<\/tt><\/td>\n<td>AmigaDOS Disc Editor<\/td>\n<\/tr>\n<tr>\n<td><tt>DownLoad<\/tt><\/td>\n<td>DownLoad version 2.0, Sun-&gt;Amiga transfer utility<\/td>\n<\/tr>\n<tr>\n<td><tt>DumpObj<\/tt><\/td>\n<td>Displays executable hunks in hex<\/td>\n<\/tr>\n<\/table>\n<p><b>Alink<\/b> is the Amiga-native version of the TRIPOS\/Metacomco linker<\/p>\n<p>According to the AmigaDOS Manual (or Tripos Technial Reference Manual), &#8220;to inspect or patch disk blocks, you may use the AmigaDOS [Tripos] disk editor, <b>DISKED<\/b>.&#8221; The version on this disk is 3.2; the 2.0+ NDKs shipped with 3.4, and <a href=\"http:\/\/www.cl.cam.ac.uk\/~mr10\/Cintpos.html\">cintpos<\/a>, the open source release of Tripos, includes the source for 3.0.<\/p>\n<p>\n<b>Download<\/b> is quite interesting, not only because the binary and its documentation are very hard to find, but also because they tell a lot about the history of the Amiga operating system. According to the AmigaDOS manual, it is used to download &#8220;programs written on another computer (for example, a Sun) to the Amiga.&#8221; &#8211; the counterpart on the Sun workstation would be &#8220;binload&#8221;.<\/p>\n<p>An interesting side note on this version of &#8220;Download&#8221; is that it still contains all linker symbols, and has a debugging mode (&#8220;-d&#8221;) that prints out every step that it is doing, so it is pretty easy to reverse-engineer.<\/p>\n<p>There is strong evidence that the Amiga operating system has been cross developed on Sun machines. After all, the official Amiga SDK is called &#8220;NDK&#8221;, &#8220;Native Development Kit&#8221;, implying that the original bringup SDK was not native.<\/p>\n<p>At that time (1985), Sun Workstations were 68000- or 68010-based computers running SunOS 1.x, which was based on 4.1BSD. The C compiler that came with BSD at that time was the Bell Labs &#8220;Portable C Compiler&#8221; (PCC), which could naturally output 68000 code. The &#8220;Bell Labs C compiler&#8221; (i.e. PCC) is mentioned in a header file in the &#8220;Native Development Kit&#8221; for AmigaOS as printed in &#8220;<a href=\"http:\/\/en.wikipedia.org\/wiki\/Special:BookSources\/0201110784\">AMIGA ROM Kernel Reference Manual: Libraries and Devices<\/a>&#8220;, next to the suggested native compiler &#8220;Lattice C&#8221; and two other compilers, implying that PCC could be used for Amiga development.<\/p>\n<p>The AmigaDOS manual says that &#8220;the tools available on the Sun Microsystem for cross development include the assembler, linker, and two C compilers.&#8221; One compiler is explicitly mentioned: It is the &#8220;Greenhills C compiler&#8221; (metacc; the name suggests it was Metacomco&#8217;s shipping C compiler for Tripos); the other one is presumably PCC. According to <a href=\"http:\/\/john.toebes.com\/resume.html?start=2\">this resume<\/a>, the first versions of the ROM were compiled using the Greenhills C compiler.<\/p>\n<p>So Commodore-Amiga must have cross-developed AmigaOS on BSD with the Greenhills C compiler.<\/p>\n<h3>New Executables<\/h3>\n<table border=\"1\">\n<tr>\n<td><tt>c\/d<\/tt><\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><tt>c\/Read<\/tt><\/td>\n<td>serial\/parallel port receiving utility<\/td>\n<\/tr>\n<tr>\n<td><tt>c\/ReadPref<\/tt><\/td>\n<td>accesses config\/preferences<\/td>\n<\/tr>\n<tr>\n<td><tt>demos\/ImageEdit<\/tt><\/td>\n<td><\/td>\n<\/tr>\n<\/table>\n<p>&#8220;d&#8221; seems to be used to delete files, &#8220;Read&#8221; contains strings about reading from serial and parallel ports, &#8220;ReadPrefs&#8221; accesses the file &#8220;config\/preferences&#8221;, which is also included on this disk. It is unknown what ImageEdit is for &#8211; it does not contain any strings, but included linker symbols imply that it deals with timers.<\/p>\n<h3>Devices and Libraries<\/h3>\n<p>The disk also comes with the Narrator device and the Translator library, which are required for speech synthesis. These two files have been overwritten once, so there are now two different copies on the disk:<\/p>\n<table border=\"1\">\n<tr>\n<td><tt>devs\/narrator.device<\/tt><\/td>\n<td><tt>narrator Version 25 (rev 3) (Thu Jun 20 18:47:53 PDT 1985)<\/tt><\/td>\n<\/tr>\n<tr>\n<td><tt>devs\/narrator.device<\/tt><\/td>\n<td><tt>narrator Version 26 (rev 1) (Wed Jun 19 14:22:29 PDT 1985)<\/tt><\/td>\n<\/tr>\n<tr>\n<td><tt>libs\/translator.library<\/tt><\/td>\n<td><tt>translator Version 26 (rev 1) (Wed Jun 19 14:49:56 PDT 1985)<\/tt><\/td>\n<\/tr>\n<tr>\n<td><tt>libs\/translator.library<\/tt><\/td>\n<td><tt>translator Version 26 (rev 5) (Thu Jun 20 17:25:49 PDT 1985)<\/tt><\/td>\n<\/tr>\n<\/table>\n<p>The header of the libraries contain the respective versions. Note that the newer version of narrator.device has the older timestamp. &#8220;PDT&#8221; implies that AmigaOS has been written on the US West Coast &#8211; in the California office of Commodore. For comparison, Workbench 1.0 shipped with<\/p>\n<pre>\nnarrator 1.6 (10 Sep 1985)\ntranslator 1.3 (4 Sep 1985)\n<\/pre>\n<\/p>\n<h3>Misc Files<\/h3>\n<table border=\"1\">\n<tr>\n<td><tt>config\/preferences<\/tt><\/td>\n<td>240 bytes, mostly 0s, no strings, read by c\/ReadPrefs<\/td>\n<\/tr>\n<tr>\n<td><tt>s\/startup-sequence<\/tt><\/td>\n<td><tt>ReadPref<br \/>echo \"Use the DATE command to set date and time\"<br \/>wait 1 sec<br \/>date<\/tt><\/td>\n<\/tr>\n<tr>\n<td><tt>t\/ed-backupequence<\/tt><\/td>\n<td><tt>echo \"Use the DATE command to set date and time\"<br \/>wait 1 sec<br \/>date<\/tt><br \/>This is an &#8220;ED&#8221; backup of startup-sequence<\/td>\n<\/tr>\n<tr>\n<td><tt>demos\/src\/wtest.asm<\/tt><\/td>\n<td>Assembly source in Metacomco format (&#8220;MOVE.L&#8221;; for &#8220;assem&#8221;) that prints &#8220;Hello World&#8221; to the console and opens a window. The source has been generated with &#8220;metacc -S&#8221;.<\/td>\n<\/tr>\n<\/table>\n<h3>Files for Development<\/h3>\n<p>For many of the files on the disk, the original directory entry has been lost, but it was possible to reconstruct the filename using the printed headers in &#8220;<a href=\"http:\/\/en.wikipedia.org\/wiki\/Special:BookSources\/0201110784\">AMIGA ROM Kernel Reference Manual: Libraries and Devices<\/a>&#8220;, digital versions of <a href=\"http:\/\/www.google.com\/codesearch?hl=en&#038;q=show:gUwjUd6n030:URjSMQlpiBw&#038;sa=N&#038;ct=rdp&#038;cs_p=http:\/\/www.innoidea.hu\/subsites\/amiga\/developer\/FILES\/HardFiles\/gcc111-files.tgz&#038;cs_f=ADE\/os-include\">older<\/a> and <a href=\"http:\/\/www.haage-partner.net\/download\/AmigaOS\/NDK39.lha\">newer<\/a> versions of the headers, and the <a href=\"http:\/\/aros.sourceforge.net\/\">AROS<\/a> versions of the headers.<\/p>\n<table border=\"1\">\n<tr>\n<td>Sector<\/td>\n<td>Filename<\/td>\n<td>Comment<\/td>\n<\/tr>\n<tr>\n<td>0935<\/td>\n<td><tt>amiga.lib<\/tt><\/td>\n<td>C wrapper code around the Amiga APIs (first few sectors missing)<\/td>\n<\/tr>\n<tr>\n<td>1077<\/td>\n<td><tt>crt0.obj<\/tt><\/td>\n<td>Linker object that contains the code that gets executed before &#8220;main()&#8221;. It opens dos.library, caches stdin and stdout, and provides an exit() function.<\/td>\n<\/tr>\n<tr>\n<td>1074<\/td>\n<td><tt>clib\/macros.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1025<\/td>\n<td><tt>exec\/alerts.h<\/tt><\/td>\n<td>(first few sectors missing)<\/td>\n<\/tr>\n<tr>\n<td>1026<\/td>\n<td><tt>exec\/execname.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1045<\/td>\n<td><tt>graphics\/clip.h<\/tt><\/td>\n<td><tt>02-04-85    <a href=\"http:\/\/www.rebol.com\/cgi-bin\/blog.r?view=0339\">Dale<\/a>        created file from graph.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1050<\/td>\n<td><tt>graphics\/clip.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1051<\/td>\n<td><tt>graphics\/collide.h<\/tt><\/td>\n<td><tt>8-24-84     Dale        added this header file<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1052<\/td>\n<td><tt>graphics\/copper.h<\/tt><\/td>\n<td><tt>2-09-85     Dale        made #defines for union ignorance<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1053<\/td>\n<td><tt>graphics\/display.h<\/tt><\/td>\n<td><tt>8-24-84     Dale        added this header file<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1054<\/td>\n<td><tt>graphics\/gels.h<\/tt><\/td>\n<td><tt>9-28-84     <a href=\"http:\/\/en.wikipedia.org\/wiki\/RJ_Mical\">-=RJ=-<\/a>      for GELS16 added Bob.h to this file<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1055<\/td>\n<td><tt>graphics\/gels.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1056<\/td>\n<td><tt>graphics\/gfx.h<\/tt><\/td>\n<td><tt>Feb 85  Dale    added Rectangle,BitMap structures<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1057<\/td>\n<td><tt>graphics\/gfx.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1048<\/td>\n<td><tt>graphics\/gfxbase.h<\/tt><\/td>\n<td><tt>10-20-84    <a href=\"http:\/\/www.linkedin.com\/in\/kodiak\">Kodiak<\/a>      added this header file & TextFonts<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1059<\/td>\n<td><tt>graphics\/gfxbase.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1060<\/td>\n<td><tt>graphics\/gfxmacros.h<\/tt><\/td>\n<td><tt>9-07-84     Dale        fixed macros to use new RastPort<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1061<\/td>\n<td><tt>graphics\/graphint.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1062<\/td>\n<td><tt>graphics\/layers.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1063<\/td>\n<td><tt>graphics\/layers.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1064<\/td>\n<td><tt>graphics\/rastport.h<\/tt><\/td>\n<td><tt>02-04-85    Dale        created from graph.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1065<\/td>\n<td><tt>graphics\/rastport.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1058<\/td>\n<td><tt>graphics\/regions.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1066<\/td>\n<td><tt>graphics\/regions.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1067<\/td>\n<td><tt>graphics\/sprite.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1068<\/td>\n<td><tt>graphics\/sprite.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1027 1071<\/td>\n<td><tt>graphics\/text.i<\/tt><\/td>\n<td><tt>$Header: text.i,v 25.1 85\/05\/06 10:54:07 kodiak Exp $<\/tt><br \/>(version at 1027: first few sectors missing)<\/td>\n<\/tr>\n<tr>\n<td>1028 1069<\/td>\n<td><tt>graphics\/text.h<\/tt><\/td>\n<td><tt>$Header: text.h,v 25.1 85\/05\/06 10:53:57 kodiak Exp $<\/tt><br \/>(two identical copies)<\/td>\n<\/tr>\n<tr>\n<td>1072<\/td>\n<td><tt>graphics\/view.h<\/tt><\/td>\n<td><tt>2-8-85      Dale        conversion to 24 View->ViewPort<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1073<\/td>\n<td><tt>graphics\/view.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1044<\/td>\n<td><tt>intuition\/intuition.h<\/tt><\/td>\n<td><tt>1-30-85\t    -=RJ=-\tcreated this file!<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1047<\/td>\n<td><tt>intuition\/intuition.i<\/tt><\/td>\n<td><tt>6-13-85      =VoodooDrRj= added back the comments<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1046<\/td>\n<td><tt>intuition\/intuitionbase.h<\/tt><\/td>\n<td><tt>3-1-85\t    -=RJ=-\tcreated this file!<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1009<\/td>\n<td><tt>libraries\/translator.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1029<\/td>\n<td><tt>libraries\/translator.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1030<\/td>\n<td><tt>libraries\/dos.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1032<\/td>\n<td><tt>libraries\/dos.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1033<\/td>\n<td><tt>libraries\/dosextens.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1034<\/td>\n<td><tt>libraries\/dosextens.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1035<\/td>\n<td><tt>libraries\/mathffp.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1036<\/td>\n<td><tt>resources\/cia.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1043<\/td>\n<td><tt>resources\/ciabase.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1041<\/td>\n<td><tt>resources\/disk.i<\/tt><\/td>\n<td><tt>$Header: disk.i,v 26.1 85\/06\/17 12:19:27 <a href=\"http:\/\/www.linkedin.com\/pub\/0\/2B\/194\">neil<\/a> Exp $<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1042<\/td>\n<td><tt>resources\/disk.h<\/tt><\/td>\n<td><tt>$Header: disk.h,v 26.2 85\/06\/17 13:01:21 neil Exp $<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1038<\/td>\n<td><tt>resources\/potgo.h<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1031<\/td>\n<td><tt>resources\/potgo.i<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1039<\/td>\n<td><tt>resources\/misc.i<\/tt><\/td>\n<td><tt>$Header: misc.i,v 26.1 85\/06\/17 12:08:29 neil Exp $<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1040<\/td>\n<td><tt>resources\/misc.h<\/tt><\/td>\n<td><tt>$Header: misc.h,v 26.1 85\/06\/17 12:08:26 neil Exp $<\/tt><\/td>\n<\/tr>\n<tr>\n<td>1070<\/td>\n<td><tt>diag\/romdiag.i<\/tt><\/td>\n<td>only came with 1.0 of the includes<\/td>\n<\/tr>\n<\/table>\n<p>Unlike the published NDK headers, these still contain the revision control and author information. All files use UNIX line breaks (LF).<\/p>\n<p>Some files contain the address of Commodore-Amiga, which was:<\/p>\n<p><a href=\"http:\/\/maps.google.com\/maps?q=983+University+Ave.+Building+%23D+Los+Gatos,+California,+95030+(Commodore-Amiga+Incorporated)+&#038;sll=37.417546,-122.157878&#038;sspn=1.598918,1.908875&#038;ie=UTF8&#038;t=h&#038;z=16&#038;g=983+University+Ave.+Building+%23D+Los+Gatos,+California,+95030\">Commodore-Amiga Incorporated<br \/>\n983 University Ave. Building #D<br \/>\nLos Gatos, California, 95030<\/a><\/p>\n<h3>Directory Entries with Missing Data<\/h3>\n<p>There are directory entries for the following header files and includes on the disk, but the data is missing<\/p>\n<pre>devices\/audio.h\ndevices\/audio.i\ndevices\/bootblock.h\ndevices\/bootblock.i\ndevices\/console.h\ndevices\/console.i\ndevices\/gameport.h\ndevices\/gameport.i\ndevices\/inputevent.h\ndevices\/inputevent.i\ndevices\/keyboard.h\ndevices\/keyboard.i\ndevices\/keymap.h\ndevices\/keymap.i\ndevices\/narrator.h\ndevices\/narrator.i\ndevices\/parallel.h\ndevices\/parallel.i\ndevices\/serial.h\ndevices\/serial.i\ndevices\/timer.h\ndevices\/timer.i\ndevices\/trackdisk.h\ndevices\/trackdisk.i\nhardware\/blit.i\nhardware\/intbits.h\n<\/pre>\n<p>There are four more directory entries for executable files:<\/p>\n<table border=\"1\">\n<tr>\n<td><tt>Assem<\/tt><\/td>\n<td>AmigaDOS\/Tripos macro assembler by Metacomco.<\/td>\n<\/tr>\n<tr>\n<td><tt>Avail<\/tt><\/td>\n<td>shipped with developer tools, and OS >= 1.3<\/td>\n<\/tr>\n<tr>\n<td><tt>ObjDump<\/tt><\/td>\n<td><a href=\"http:\/\/www.gregdonner.org\/workbench\/wb_b0x.html\">probably<\/a> same as &#8220;DumpObj&#8221;<\/td>\n<\/tr>\n<tr>\n<td><tt>SetPref<\/tt><\/td>\n<td>probably the counterpart to &#8220;ReadPref&#8221;<\/td>\n<\/tr>\n<\/table>\n<h3>Conclusion<\/h3>\n<p>The following conclusions can be drawn from this exercise:<\/p>\n<ul>\n<li>The reduncandy in the Amiga Old Filesystem makes this filesystem perfect for reconstructing deleted and even partially overwritten data.<\/li>\n<li>AmigaOS seems to have been bootstrapped using SunOS and the Metacomco\/Tripos toolchain, and has probably not been self-hosting for 1.0.<\/li>\n<li>The disk was used to move developer tools and header files between machines.<\/li>\n<li>Version 1.0 of the OS has been developed in the California office of Commodore &#8211; the original Amiga office.<\/li>\n<\/ul>\n<h3>Open Questions<\/h3>\n<ul>\n<li>What source control system was used?<\/li>\n<li>How does the version numbering (&#8220;26.1&#8221; etc.) work? How is it related to source control?<\/li>\n<li>Does the 1.0 NDK still exist somewhere? It should have shipped with Lattice C, at least. It would be very interesting to compare these headers and includes with the 1.0 NDK ones; for real differences, and for changes in the comments.<\/li>\n<li>What are the differences between these headers and the 1.0 headers? Any last minute changes?<\/li>\n<\/ul>\n<h3>Links<\/h3>\n<p><a href=\"http:\/\/gega.homelinux.net\/AmigaDevDocs\/\">1<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Update: The source is available at github.com\/mist64\/extract-adf; more info here. It is well-known that the &#8220;Kickstart&#8221; disk that came with the original Amiga 1000 in 1985 contained some fragments of source code: The floppy disk that was used as a master for duplication had been used by the developers before, and had not been erased &#8230; <a title=\"Reconstructing the Leftovers on the Amiga Kickstart 1.0 Disk\" class=\"read-more\" href=\"https:\/\/www.pagetable.com\/?p=34\" aria-label=\"Read more about Reconstructing the Leftovers on the Amiga Kickstart 1.0 Disk\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,5,16],"tags":[],"class_list":["post-34","post","type-post","status-publish","format-standard","hentry","category-amiga","category-archeology","category-github"],"_links":{"self":[{"href":"https:\/\/www.pagetable.com\/index.php?rest_route=\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pagetable.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pagetable.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pagetable.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pagetable.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=34"}],"version-history":[{"count":0,"href":"https:\/\/www.pagetable.com\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.pagetable.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pagetable.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pagetable.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}